Back to skill

Security audit

Doc Process

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly coherent document-processing software, but it needs Review because its setup can automatically install unpinned packages, make system package changes, and execute a remote pip bootstrap without user approval.

Install only after reviewing setup.sh. Prefer a virtual environment, run only the dependency group you need, avoid the automatic full setup, and do not approve sudo or remote bootstrap execution unless you are comfortable with those host changes. For sensitive documents, keep timeline logging off or use sanitized filenames and category-only summaries.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
Findings (3)

T03 · Remote Payload Retrieval and Execution

Error
Location
setup.sh:33
Finding

Remote get-pip Payload Is Downloaded and Executed Without Verification

Content
View full analysis
/dev/null; then echo "✓ $($PY -m pip --version)" else echo " pip not found — installing via ensurepip..." if $PY -m ensurepip --upgrade 2>/dev/null; then echo "✓ pip installed via ensurepip" else echo " ensurepip unavailable — trying package manager..." if command -v apt-get &>/dev/null; then sudo apt-get install -y python3-pip elif command -v yum &>/dev/null; then sudo yum install -y python3-pip elif command -v dnf &>/dev/null; then sudo dnf install -y python3-pip elif command -v brew &>/dev/null; then brew install python # pip is bundled with Homebrew Python else echo " Falling back to get-pip.py..." curl -sSL https://bootstrap.pypa.io/get-pip.py | $PY fi fi # Upgrade pip to latest $PY -m pip install --upgrade pip --quiet echo "✓ $($PY -m pip --version)" fi ``` ### Technical Analysis The fallback installation path downloads Python source code from an external URL and pipes it directly into the selected Python interpreter. The payload is not pinned to a known digest, downloaded for inspection, or authenticated through an independently verified signature. Consequently, the effective code executed by the audited package can change after the package itself has been reviewed. HTTPS protects the connection in transit but does not make a mutable upstream payload reproducible or protect against upstream compromise, certificate-authority compromise, or an incorrectly configured proxy trust environment. The exposure is amplified by `SKILL.md`, which ...[truncated 1246 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Error
Location
requirements.txt:1
Finding

Automatic Installation Uses Unpinned Dependencies and Privileged System Package Changes

Content
View full analysis
=1.23 Pillow>=10.0 pytesseract>=0.3 # also needs: brew install tesseract / apt install tesseract-ocr # ── Document scanning / perspective correction (doc_scanner.py) ────────────── opencv-python-headless>=4.9 numpy>=1.24 # Pillow already listed above img2pdf>=0.5 # optional — for PDF output; Pillow fallback used if absent # ── Table extraction from PDFs (table_extractor.py) ────────────────────────── pdfplumber>=0.11 # ── Audio transcription (audio_transcriber.py) ─────────────────────────────── openai-whisper>=20231117 # also needs: brew install ffmpeg / apt install ffmpeg # downloads ~140 MB model on first run only ``` From `setup.sh`: ```bash # Upgrade pip to latest $PY -m pip install --upgrade pip --quiet # ── Step 3: Install Python packages ────────────────────────────────────────── echo "" echo "=== doc-process: installing Python dependencies ===" $PY -m pip install -r "$SKILL_DIR/requirements.txt" --quiet && \ echo "✓ Python packages installed" || \ { echo "✗ pip install failed — try: $PY -m pip install --user -r skills/doc-process/requirements.txt"; exit 1; } if $LIGHT; then echo "Skipping system packages (--light mode)." exit 0 fi echo "" echo "=== doc-process: checking system dependencies ===" # ── tesseract (needed by redactor.py image mode) ───────────────────────────── if command -v tesseract &>/dev/null; then ec ...[truncated 3932 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/timeline_manager.py:35
Finding

Persistent Timeline Accepts Unvalidated Sensitive Data and Stores It in Plaintext

Content
View full analysis
list[dict]: if not TIMELINE_PATH.exists(): return [] try: with TIMELINE_PATH.open(encoding="utf-8") as f: data = json.load(f) return data if isinstance(data, list) else [] except (json.JSONDecodeError, OSError): return [] def _save(entries: list[dict]) -> None: TIMELINE_PATH.parent.mkdir(parents=True, exist_ok=True) with TIMELINE_PATH.open("w", encoding="utf-8") as f: json.dump(entries, f, indent=2, ensure_ascii=False) def _now_iso() -> str: return datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ") def _display_dt(iso: str) -> str: try: dt = datetime.fromisoformat(iso.replace("Z", "+00:00")) return dt.strftime("%Y-%m-%d %H:%M") except ValueError: return iso # --------------------------------------------------------------------------- # Commands # --------------------------------------------------------------------------- def cmd_add(args: argparse.Namespace) -> int: entries = _load() entry = { "id": uuid.uuid4().hex[:8], "timestamp": _now_iso(), "type": args.type, "source": args.source, "summary": args.summary, } entries.append(entry) _save(entries) return 0 ``` ### Technical Analysis The Skill documentation states that timeline summaries must not contain names, identification numbers, dates of birth, addresses, financial identifiers, medical values, or other identifying data. That restriction is enfo ...[truncated 1655 chars]
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
Findings (67)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

There is a clear description-behavior mismatch. The declared purpose is focused on document/image analysis and extraction tasks, while the actual code exclusively transcribes audio files. The code does not implement document categorization, form autofill, contract analysis, receipt/invoice scanning, bank statement parsing, resume parsing, ID/MRZ scanning, medical-record summarization, PII redaction, table extraction, document translation, or document photo dewarping. Instead, its primary purpose is speech-to-text transcription using Whisper, which is not represented in the description. This is a materially different primary capability, not just a supporting implementation detail.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The description claims a comprehensive document-understanding and extraction suite, but the code chunk only performs scan/dewarp/image-enhancement functionality. The scanning/dewarping portion of the description is accurate, yet the vast majority of declared capabilities are not present in the code: there is no OCR, NLP, entity extraction, classification, translation, redaction, summarization, autofill, or structured export logic. This is a material description-behavior mismatch because the declared primary purpose is much broader than the actual implemented behavior. No suspicious undeclared resource access appears beyond local file I/O needed for image/PDF processing.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description centers on document-intelligence/OCR-style processing of documents such as receipts, contracts, IDs, resumes, and medical records. The supplied code does not scan, OCR, parse, redact, translate, dewarp, summarize documents, or extract structured data from document images/files. Instead, it is a standalone CLI utility for maintaining an expense ledger in CSV format. While 'scan receipt' and 'log expense' appear in the declared trigger examples, this code only handles manual structured expense entry and reporting after data is already provided via CLI arguments; it does not analyze receipt documents themselves. Therefore the actual behavior is materially narrower and different from the declared purpose.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The description claims a multi-function document-intelligence skill with many analysis, extraction, translation, and image-enhancement features. The actual code chunk is narrowly focused on one subset: redacting PII and other sensitive content in PDFs, images, and text. That does align with the declared redaction portion (including multiple redaction levels and broad rule coverage), but none of the other major declared functions are implemented in this code. This is a material description-versus-behavior mismatch because the primary apparent behavior of the supplied code is redaction only, not the broad suite of document-intelligence capabilities described.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description presents a comprehensive document-intelligence capability spanning many input document types and processing tasks. The supplied code does something much narrower: it accepts a local JSON file, expects already structured/categorized data, and renders a markdown report for bank statements or expense logs. Within bank reports it summarizes totals, monthly trends, categories, top merchants, subscriptions, anomalies, and possible tax-deduction candidates; within expense reports it summarizes totals, categories, months, merchants, and details. This partially overlaps with the declared bank-statement and expense-related analysis themes, but the overwhelming majority of declared capabilities are absent. There is no evidence of document ingestion, OCR, entity extraction from raw documents, image processing, translation, redaction, or form autofill. Therefore the description materially overstates and misrepresents what this code chunk actually does.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The description presents a very broad document-AI skill spanning many unrelated document-processing functions. This code chunk implements only one narrow subset: parsing bank statement CSV exports and analyzing transactions. That is partially aligned with the 'analyze bank statements' portion of the description, but the declared purpose materially overstates the skill’s scope relative to this code. There is no evidence here of the many other document-intelligence functions claimed. The code does not show harmful undeclared behavior or inconsistent permissions/resources; the mismatch is primarily that the declared description is much broader than the actual implemented functionality.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The code chunk accurately supports only one slice of the description: extracting tables from PDFs to CSV/JSON. It parses page selections, lists found tables, and exports table contents. It does not implement the numerous other advertised capabilities. While over-declaration alone can sometimes be tolerated, here the declared description presents a broad multifunction document-intelligence skill, whereas the supplied code has a much narrower primary purpose. That constitutes a description-behavior mismatch.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The declared description promises active document intelligence capabilities such as OCR-like extraction, document analysis, redaction, translation, and image correction. The supplied code does none of these. Instead, it is a bookkeeping tool for recording and reporting past document-processing events in a local JSON file. This is a materially different primary purpose: timeline management rather than document analysis. The code also performs undeclared persistence and export of user activity/history to local storage and files. While the timeline entries refer to document-processing modes, the script itself only logs metadata and displays statistics; it does not implement any of the advertised document intelligence features.

Content

No source excerpt is available for this finding.

Vague Triggers

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The trigger phrases are extremely broad, including generic language such as 'analyze this' and 'what is this'. In an agent environment, that can cause unintended invocation on unrelated user content, increasing the chance of unnecessary file access, sensitive-document processing, or accidental execution of setup and helper workflows.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill instructs automatic execution of setup.sh with no prompt, including installation of Python packages and system binaries via package managers. Automatic dependency installation expands the attack surface, creates supply-chain risk, and can modify the host environment without informed user consent.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
All dependencies are also listed in `requirements.txt` at the repository root.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
| `utils.py` | re, unicodedata, datetime, pathlib | None | Never |

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The eval file declares skill_name as 'open-claw' and only tests a narrower subset of behaviors, while the manifested skill is 'doc-process' with broader capabilities. This mismatch can cause the wrong evaluation suite to be applied, leaving major features untested and allowing unsafe behavior or policy regressions to ship undetected.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The file implements general audio transcription, while the skill manifest is narrowly framed around document processing and document-image/OCR style capabilities. This mismatch expands the skill's effective data-access scope to spoken conversations and meeting audio, which can expose sensitive information and violate user expectations or platform policy even if the code itself is not overtly malicious.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The runtime behavior loads a Whisper model and transcribes arbitrary audio files, which does not match the manifest's document-focused description. In a document-processing skill, hidden or undeclared modality support is dangerous because it can be used to collect or transform sensitive voice data under a misleading capability label, reducing transparency and weakening trust and review controls.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The manifest claims no network calls beyond listed behavior, yet the automatic setup path performs package installation that necessarily reaches external repositories and may fetch system packages. This weakens user consent and transparency around external communications and supply-chain exposure.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The ambiguous-intent routing defaults toward classification and offers broad mode selection, which can blur activation boundaries. Although it includes a consent gate for reading the first pages, the overall design still encourages the skill to engage on weak signals and increases the risk of processing sensitive documents under uncertain intent.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill promises timeline entries contain no personal data, but also says it records filenames. Filenames often contain names, account numbers, case numbers, or medical identifiers, so the feature can persist sensitive data contrary to the stated privacy guarantees.

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 · evals/evals.json (reported line 19)May include surrounding context.

json
},
    {
      "id": 2,
      "prompt": "Please review this contract and tell me what risks I should know about. The contract says: This Service Agreement is between TechCorp Inc. and the Customer. The term is 24 months with automatic renewal unless cancelled 90 days in advance. TechCorp may modify pricing with 30 days written notice. Customer is liable for all damages including indirect and consequential losses with no cap on liability. All disputes must be resolved by binding arbitration in Delaware. TechCorp may assign this agreement to any third party without consent.",
      "expected_output": "A TL;DR summary of the contract, a risk report with RED/YELLOW/GREEN tiers, and identification of renewal traps and hidden terms.",
      "expectations": [
        "Output contains a TL;DR or summary section",

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 · evals/evals.json (reported line 27)May include surrounding context.

json
},
    {
      "id": 2,
      "prompt": "Please review this contract and tell me what risks I should know about. The contract says: This Service Agreement is between TechCorp Inc. and the Customer. The term is 24 months with automatic renewal unless cancelled 90 days in advance. TechCorp may modify pricing with 30 days written notice. Customer is liable for all damages including indirect and consequential losses with no cap on liability. All disputes must be resolved by binding arbitration in Delaware. TechCorp may assign this agreement to any third party without consent.",
      "expected_output": "A TL;DR summary of the contract, a risk report with RED/YELLOW/GREEN tiers, and identification of renewal traps and hidden terms.",
      "expectations": [
        "Output contains a TL;DR or summary section",

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/contract-analyzer.md (reported line 63)May include surrounding context.

md
},
    {
      "id": 2,
      "prompt": "Please review this contract and tell me what risks I should know about. The contract says: This Service Agreement is between TechCorp Inc. and the Customer. The term is 24 months with automatic renewal unless cancelled 90 days in advance. TechCorp may modify pricing with 30 days written notice. Customer is liable for all damages including indirect and consequential losses with no cap on liability. All disputes must be resolved by binding arbitration in Delaware. TechCorp may assign this agreement to any third party without consent.",
      "expected_output": "A TL;DR summary of the contract, a risk report with RED/YELLOW/GREEN tiers, and identification of renewal traps and hidden terms.",
      "expectations": [
        "Output contains a TL;DR or summary section",

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/contract-analyzer.md (reported line 70)May include surrounding context.

md
},
    {
      "id": 2,
      "prompt": "Please review this contract and tell me what risks I should know about. The contract says: This Service Agreement is between TechCorp Inc. and the Customer. The term is 24 months with automatic renewal unless cancelled 90 days in advance. TechCorp may modify pricing with 30 days written notice. Customer is liable for all damages including indirect and consequential losses with no cap on liability. All disputes must be resolved by binding arbitration in Delaware. TechCorp may assign this agreement to any third party without consent.",
      "expected_output": "A TL;DR summary of the contract, a risk report with RED/YELLOW/GREEN tiers, and identification of renewal traps and hidden terms.",
      "expectations": [
        "Output contains a TL;DR or summary section",

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The final eval includes a broad prompt ('What can you help me with?') that overlaps with common everyday speech and can trigger the skill outside its intended context. In a skill with document-processing features that handle sensitive data, overly broad activation language increases the chance of accidental invocation, unintended data exposure, or misrouting user requests to the wrong workflow.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This guide instructs handling bank and credit card statements, which contain highly sensitive financial and personal data, but it provides no privacy warning, minimization guidance, or handling safeguards. In the context of a document-processing skill that may ingest user-supplied statements, this omission increases the risk of unnecessary exposure, over-collection, and unsafe downstream sharing or retention of financial data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
90% confidence
Finding

The guide encourages exporting categorized transactions as CSV, which can create additional persistent copies of detailed financial records without warning about storage, sharing, or retention risks. Because CSV exports are easy to duplicate, email, or leave unprotected, this can materially increase the exposure surface for sensitive transaction history.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.