Back to skill

Security audit

Ai Expert Team

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly transparent and purpose-aligned, but it automatically stores full run artifacts in a predictable temp location and can use unpinned external catalogs.

Install only if you are comfortable with the skill writing full task details to local temp files. Avoid using it on secrets or sensitive business data unless you first harden the artifact directory, validate run IDs, restrict permissions, and plan cleanup. Only initialize the external source assets if you accept current GitHub content, or pin the repositories to reviewed commits.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:87
Finding

Predictable Temporary Storage and Unsanitized Run Identifier

Content
View full analysis
/ ├── case-input.md # Original problem statement and constraints ├── team-roster.md # Selected CEO and specialists with rationale ├── handoffs/ # One file per specialist │ ├── .md │ └── ... ├── reports/ # Expert reports (one per specialist) │ ├── .md │ └── ... ├── challenges.md # CEO challenges and expert responses ├── verification.md # Verification verdicts (PASS/FAIL/PARTIAL) └── final-synthesis.md # CEO synthesis and recommendations ``` ```bash RUN_ID="${RUN_ID:-run-$(date +%Y%m%d-%H%M%S)}" RUN_DIR="/tmp/ai-expert-team/runs/$RUN_ID" mkdir -p "$RUN_DIR/handoffs" "$RUN_DIR/reports" ``` ### Technical Analysis The caller-controlled `RUN_ID` is directly appended to a filesystem path without character validation, canonicalization, or a check that the resulting path remains beneath `/tmp/ai-expert-team/runs`. Shell quoting prevents shell metacharacter injection, but it does not prevent filesystem traversal. A value containing path separators or `..` components can cause `RUN_DIR` to resolve outside the intended run namespace. For example, a run identifier such as `../../target` would produce a path lexically located under the runs directory but resolving elsewhere after path normalization. The Skill also uses a predictable shared directory under `/tmp` without requiring: - A private `0700` parent directory. - `0600` permissions for generated files. - Exclusive directory creation. - Rejection of pre-existing files or symbolic links. - A collision- ...[truncated 2090 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
SKILL.md:31
Finding

Mutable External Agent Catalogs Are Not Pinned or Integrity-Verified

Content
View full analysis
assets/.gitignore fi [ -d assets/agency-agents ] || git clone https://github.com/msitarzewski/agency-agents.git assets/agency-agents [ -d assets/nuwa-skill ] || git clone https://github.com/alchaincyf/nuwa-skill.git assets/nuwa-skill ``` ```text Do not commit the cloned repositories. They are working assets for local inspection only and are ignored by `assets/.gitignore`. If the user explicitly asks to initialize these assets, clone any missing repos, record the checked-out branch and short HEAD in the response, and verify the parent repo still has no tracked `ai-expert-team` diff. ``` The specialist-selection reference also directs the workflow to clone and inspect the mutable Agency Agents repository: ```text When a run needs grounded Agency Agents roles, use the local source asset: - `assets/agency-agents` If the directory does not exist, clone it first from: - `https://github.com/msitarzewski/agency-agents.git` ``` ### Technic ...[truncated 2808 chars]
Remediation
View remediation
``` Apply the same approach to the Nuwa repository. 3. Maintain an allowlist containing: - Canonical repository URL. - Approved full commit SHA. - Expected tree or archive hash. - Review date. - Optional signed release or maintainer-signature information. 4. Verify the remote URL and checked-out commit before reading repository content. Abort if either differs from the allowlist. 5. Treat all cloned files as untrusted data. Explicitly reject imported instructions that request: - Credentials, tokens, environment variables, or private files. - Broader tools than the current task requires. - Edits, deployment, publication, messaging, or other external mutation without authorization. - Execution of repository scripts or installation of repository dependencies. - Changes to host safety rules or verification requirements. 6. Separate source updates from ordinary runs. Require distinct confirmation before changing an approved pinned revision. 7. Review and approve the diff between the old and proposed pinned revisions before making an update available to runtime selection. 8. Prefer vendoring a minimal, reviewed, integrity-checked role metadata snapshot when licensing and maintenance requirements permit it. ]]>
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (6)

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · SKILL.md (reported line 412)May include surrounding context.

md
3. **Specialists with overlapping work**
   - Fix: define each specialist by deliverable, not job title glamour.

4. **No verification layer**
   - Fix: add Reality Checker, Evidence Collector, or a dedicated verifier.

5. **Imperative helper prompts from uncertain routing**

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The file provides profile descriptions but no formal activation policy, conflict-resolution logic, or negative examples, leaving model behavior under-specified. In multi-agent orchestration, this increases the chance of arbitrary routing, prompt-sensitive drift, and unsafe selection of persuasive but weakly qualified personas for consequential decisions.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The trigger domains are very broad and substantially overlap across profiles, which can cause ambiguous or inconsistent expert selection. In a decision-routing skill, that ambiguity can steer the system toward an ill-suited lens for sensitive topics like security, legal, or high-risk operational decisions, degrading reliability and potentially bypassing safer specialist choices.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
75% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

Scanner excerpt · references/specialist-selection.md (reported line 244)May include surrounding context.

md
- Multi-Agent Architect.
- System Designer.

Why weak: too much architecture overlap, no verification owner, no security or documentation owner.

## Final Specialist Roster Format

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
82% confidence
Finding

The CEO selection guide mixes English and Chinese names/labels, such as '張一鳴' and '孫宇晨', as part of the default routing pool. While not inherently unsafe, this introduces a language/locale assumption in the skill's natural-language behavior without documenting user opt-in or a region-specific justification.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
72% confidence
Finding

Natural-language identifiers appear in multiple languages, including the Chinese heading '張一鳴', but the document does not clarify language-selection behavior or whether locale use depends on user preference. This can create ambiguity around language handling and may conflict with organizational expectations for user language choice.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.