Back to skill

Security audit

ClawBio Orchestrator

Security checks for vulnerabilities and agentic risk

Overview

This is a disclosed bioinformatics routing skill with some quality and privacy cautions, but I found no hidden, destructive, or malicious behavior in the artifacts.

Install only if you are comfortable with a local bioinformatics router that writes an audit log. Avoid putting sensitive sample names or private paths into prompts unless you want them logged, confirm before any upload or destructive action, and prefer a version that pins or removes unused dependencies.

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
orchestrator.py:139
Finding

Attacker-Controlled Input Permits Audit Log Injection

Content
View full analysis

Vulnerability Details

File Location: orchestrator.py, lines 139–150 and line 213
Vulnerability Type: Audit log injection through insufficient output encoding
Risk Level: Medium

Vulnerable Code

python
def append_audit_log(output_dir: Path, action: str, details: str = "") -> None:
    """Append an entry to the audit log."""
    log_file = output_dir / "analysis_log.md"
    now = datetime.now(timezone.utc).strftime("%Y-%m-%d %H:%M:%S UTC")
    entry = f"- **{now}**: {action}"
    if details:
        entry += f" -- {details}"
    entry += "\n"

    with open(log_file, "a") as f:
        if not log_file.exists() or log_file.stat().st_size == 0:
            f.write("# Analysis Audit Log\n\n")
        f.write(entry)

The function is called with the raw command-line input:

python
append_audit_log(output_dir, f"Routed to {skill}", f"input={args.input}, method={method}")

Technical Analysis

The value of args.input is fully controlled by the command-line caller. It is interpolated directly into a Markdown audit-log entry without normalization, escaping, or rejection of control characters.

An input containing carriage returns, newline characters, or Markdown syntax can terminate the intended log entry and insert arbitrary additional content. Because the resulting file is represented as an audit trail, consumers may incorrectly treat injected lines as authentic records produced by the application.

The attack requires the input to trigger successful skill detection or to be accompanied by a valid --skill argument. No command execution occurs through this flaw; the vulnerability affects the integrity of the generated audit log.

Attack Path

  1. An attacker invokes the program with a valid forced skill or an input containing a recognized routing keyword.
  2. The attacker embeds newline characters and forged Markdown audit entries in --input.
  3. The routing operation ...[truncated 1030 chars]
Remediation
View remediation

Remediation Suggestions

  • Store audit records in a structured format such as JSON Lines rather than constructing Markdown from untrusted values.
  • Serialize each record with a standard JSON encoder so newline characters and other control characters are escaped.
  • If Markdown output must be retained, replace or encode \r, \n, and other control characters before interpolation.
  • Escape Markdown metacharacters in all untrusted fields.
  • Consider recording command-line arguments as structured arrays instead of concatenated strings.
  • Add tests proving that multiline input, Markdown headings, list markers, and control characters cannot create additional logical records.
  • If logs are security-sensitive, apply restrictive file permissions and consider authenticated or append-only logging to make later tampering detectable.

T08 · Insecure Dependencies

Note
Location
SKILL.md:16
Finding

Unpinned Third-Party Dependencies Undermine Supply-Chain Integrity

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 16–21
Vulnerability Type: Unpinned third-party package installation
Risk Level: Low

Vulnerable Code

yaml
install:
  - kind: uv
    package: biopython
    bins: []
  - kind: uv
    package: pandas
    bins: []

Technical Analysis

The installation metadata requests biopython and pandas without exact versions, integrity hashes, or a committed lockfile. Consequently, separate installations of the same reviewed Skill may resolve to different package and transitive-dependency versions.

The package names are established package names, and the audited files contain no evidence that either package is currently malicious. The security concern is that dependency resolution remains mutable after review: an upstream compromise, malicious release, or unexpected dependency change could introduce unreviewed code into the installation environment.

The audited orchestrator.py file does not import either dependency. Their installation therefore appears unnecessary for the implementation currently present, increasing supply-chain exposure without a demonstrated runtime requirement.

Attack Path

  1. A host processes the installation metadata in SKILL.md.
  2. The package manager resolves the latest versions permitted at installation time because no versions are pinned.
  3. A future compromised or otherwise unsafe upstream release, or one of its transitive dependencies, is selected.
  4. The package manager downloads and installs code that was not part of the audited project snapshot.
  5. Package installation hooks or later imports may execute that code with the privileges of the installer or application process.

This path is contingent on a compromised or unsafe upstream artifact; no such compromise was demonstrated during this audit.

Impact Assessment

If an upstream dependency were compromised, malicious package code could potent ...[truncated 460 chars]

Remediation
View remediation

Remediation Suggestions

  • Remove biopython and pandas from the installation metadata if they are not required by the current implementation.
  • If they are required by intended functionality, pin each dependency to an exact reviewed version.
  • Commit a dependency lockfile that includes all transitive dependencies.
  • Require package hashes and verify artifacts against trusted indexes.
  • Use an isolated, least-privileged environment for dependency installation and execution.
  • Introduce automated dependency scanning and a controlled process for reviewing and updating pinned versions.
  • Rebuild and test the Skill whenever dependency versions or hashes change.
Vulnerability Patterns
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (6)

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

The core declared purpose of routing bioinformatics requests is supported: the code maps file types and keywords to sub-skills, validates skill existence, lists skills, and logs routing. However, the description materially overstates the implemented capabilities. There is no analysis planning logic, no reproducibility export functionality, and no operational report generation beyond an unused helper that formats a markdown header. The actual primary behavior is a lightweight routing CLI with audit logging, so the description is only partially accurate and should be flagged as a mismatch due to these undeclared/overstated major capabilities.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
95% confidence
Finding

The skill can write files and potentially access the network, but it declares no explicit tool scope or permission boundaries. For a meta-agent that routes requests and appends logs, this creates unnecessary ambiguity about what side effects are allowed, increasing the risk of unintended file modification, data exfiltration, or unsafe downstream tool use when handling sensitive genomic data.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The routing table activates lit-synthesizer for the generic signal 'Literature query' with examples like 'Find papers on X' and 'Summarise recent work on Y'. These phrases are broad natural-language requests that could match ordinary conversation, and the file does not provide exclusions or tighter scope constraints for when this skill should or should not route such requests.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The generic trigger phrase for reproducibility export could cause unintended invocation of a sub-skill that may generate pipelines, containers, command logs, or exports without sufficient user intent verification. In a bioinformatics context, that can expose file paths, parameters, environment details, and potentially sensitive dataset metadata if routed automatically.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The manifest describes a meta-agent that handles analysis planning, report generation, and reproducibility export. In this file, the implemented behavior is limited to file/query-based skill detection, listing skills, printing a routing JSON object, and writing a minimal audit log; functions like report header generation are defined but never used, and there is no implementation of planning or reproducibility export.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

The tool writes raw user-controlled input into an audit log entry without disclosure or sanitization. In this bioinformatics context, inputs may include sensitive sample identifiers, filesystem paths, or free-text queries, creating a privacy/confidentiality risk and potentially enabling log injection or misleading audit records if newline/markdown control characters are supplied.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.