Back to skill

Security audit

multimodal-parser

Security checks for vulnerabilities and agentic risk

Overview

This skill is a coherent local file parser that uses disclosed OCR, document, and transcription tools, with supply-chain and privacy considerations users should understand before installing.

Install this only if you are comfortable granting it access to the files you ask it to parse and allowing it to run local parser tools. Prefer installing dependencies in an isolated environment with pinned versions, and avoid sending highly sensitive documents, images, or audio through downstream LLM workflows unless you understand retention and sharing behavior.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (2)

T03 · Remote Payload Retrieval and Execution

Warning
Location
index.ts:1
Finding
Remote TypeScript Dependency Executed Without Cryptographic Integrity Verification## Vulnerability Details **File Location**: `index.ts:1` **Vulnerability Type**: Remote dependency retrieval without integrity verification **Risk Level**: Medium ```typescript import { z } from "https://deno.land/x/zod@v3.22.4/mod.ts"; ``` ### Technical Analysis The application imports and executes TypeScript directly from an externally hosted HTTPS URL. Although the URL contains a version identifier, the project does not include a dependency lockfile, integrity hash, or vendored copy that cryptographically binds the imported content to the version reviewed during this audit. Consequently, the effective code executed by the Skill depends on the security and immutability of the remote package source and its delivery infrastructure. Module initialization code runs with the permissions granted to the Deno process. This Skill legitimately requires local file access and subprocess execution, which could increase the consequences if the imported module were replaced or compromised. ### Attack Path 1. An attacker compromises the remote package repository, its publishing account, hosting infrastructure, or another relevant dependency-delivery component. 2. The attacker causes malicious content to be served from the imported URL. 3. A user starts the Skill in an environment where the dependency is not already securely pinned and cached. 4. Deno retrieves and evaluates the remote module. 5. Malicious module initialization code executes using the permissions granted to the Skill process. This path requires compromise or unauthorized mutation of the external dependency source; the repository itself does not contain evidence that such a compromise has occurred. ### Impact Assessment Successful exploitation could execute arbitrary code within the Deno process's permission boundary. Depending on the runtime permissions supplied when the Skill is launched, this could expose files available to the process, invoke local programs, alte ...[truncated 219 chars]
Remediation
## Remediation Suggestions - Vendor the reviewed Zod dependency into the project so runtime execution does not depend on mutable remote content. - Alternatively, generate and commit a Deno lockfile containing integrity information, and require frozen or locked dependency resolution during deployment. - Pin all transitive dependencies and verify their integrity in CI before release. - Restrict Deno permissions to the minimum required directories, executable commands, and network destinations. - Disable unnecessary runtime network access after dependencies have been securely resolved. - Define a dependency update process that includes source review, integrity verification, and lockfile updates.

T08 · Insecure Dependencies

Warning
Location
SKILL.md:67
Finding
Unpinned Python Package Installation Instructions Create Supply-Chain Risk## Vulnerability Details **File Location**: `SKILL.md:67-71`; duplicated in `README.md:63-67` **Vulnerability Type**: Unpinned third-party dependency installation **Risk Level**: Medium ```bash # macOS brew install tesseract tesseract-lang poppler pandoc pip install openai-whisper ffmpeg # Ubuntu/Debian apt install tesseract-ocr tesseract-ocr-chi-sim poppler-utils pandoc ffmpeg pip install openai-whisper ``` The same installation commands appear in `README.md`: ```bash # macOS brew install tesseract tesseract-lang poppler pandoc pip install openai-whisper ffmpeg # Ubuntu/Debian apt install tesseract-ocr tesseract-ocr-chi-sim poppler-utils pandoc ffmpeg pip install openai-whisper ``` ### Technical Analysis The documented `pip install` commands do not pin reviewed package versions and do not verify package hashes. Package selection therefore depends on the current state of the configured Python package index and its dependency resolver. A future compromise of a package, publishing account, registry, configured mirror, or transitive dependency could introduce attacker-controlled installation or runtime code. The macOS command also installs the PyPI package named `ffmpeg`. That package is not equivalent to installing the trusted FFmpeg system executable required by Whisper, creating ambiguity and increasing the possibility that users install an unintended component. These are documentation-driven installation risks rather than evidence that the repository currently contains a malicious package. ### Attack Path 1. An attacker compromises a referenced Python package, one of its transitive dependencies, its publishing account, or a package index or mirror used by the victim. 2. The attacker publishes a malicious release that remains compatible with the unpinned dependency request. 3. A user follows the documented `pip install` command. 4. Pip resolves and downloads the attacker-controlled release beca ...[truncated 955 chars]
Remediation
## Remediation Suggestions - Replace ad hoc pip commands with a reviewed requirements or lock file containing exact versions. - Include cryptographic hashes and require installation with `pip install --require-hashes -r requirements.txt`. - Pin and review transitive dependencies, not only `openai-whisper`. - Install the FFmpeg executable through a trusted operating-system package manager, such as `brew install ffmpeg` on macOS, rather than `pip install ffmpeg`. - Recommend installation inside an isolated virtual environment without administrative privileges. - Configure CI to scan dependencies for known vulnerabilities and unexpected ownership or release changes. - Keep `SKILL.md` and `README.md` synchronized so both documents provide the same hardened installation procedure.
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • 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 (9)

Missing User Warnings

Medium
Confidence
90% confidence
Finding
The README encourages parsing local documents, images, PDFs, and audio but does not warn users that these inputs may contain sensitive personal, financial, medical, or confidential business data. In an agent context, missing privacy guidance increases the likelihood that users will process sensitive files without understanding retention, transmission, or downstream LLM exposure risks.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The markdown presents all user-facing instructions and examples in Chinese, which effectively forces a specific language for users. The policy for this category flags language or locale constraints unless the skill offers opt-in choice or clearly documents a justified regional scope.

Natural-Language Policy Violations

Medium
Confidence
96% confidence
Finding
The default OCR language is hard-coded to "chi_sim+eng", which imposes a specific language/locale behavior even when the user has not requested it. Under the policy, language defaults that force a locale without opt-in should be flagged unless clearly justified or presented as a user choice.

Context-Inappropriate Capability

Medium
Confidence
90% confidence
Finding
The manifest describes a unified multimodal parser that outputs structured text, but the implementation relies on spawning external binaries via Deno.Command for dependency checks and actual parsing. Launching local executables is a materially broader capability than ordinary file parsing logic and is not explicitly declared in the skill's stated purpose.

Context-Inappropriate Capability

Medium
Confidence
87% confidence
Finding
For image parsing, the skill runs the tesseract binary on the host system. While OCR is consistent with the parser's purpose, executing arbitrary host-installed programs is a sensitive capability that the manifest description does not disclose.

Missing User Warnings

Medium
Confidence
91% confidence
Finding
The skill invokes host-installed parsers/transcribers on user-supplied files without any explicit user-facing disclosure in the implementation. In an agent environment, this can expand the trust boundary unexpectedly: untrusted files are handed to complex native tools, increasing exposure to parser bugs or sensitive host-side effects without the operator’s informed consent.

Context-Inappropriate Capability

Medium
Confidence
88% confidence
Finding
The parser uses pdftotext and pandoc subprocesses to extract content from PDF and DOCX files. Those host command executions exceed what a plain-language parser description typically conveys unless subprocess/tool execution is explicitly part of the declared scope.

Context-Inappropriate Capability

Medium
Confidence
89% confidence
Finding
The code performs transcription by launching the whisper command-line tool rather than using self-contained parsing code. Even though transcription matches the functional goal, the host-level process execution capability is not clearly justified by the manifest wording alone.

Natural-Language Policy Violations

Low
Confidence
95% confidence
Finding
The parameter table sets `options.ocr_lang` default to `chi_sim+eng`, which imposes a specific language/locale preference in the documented default behavior. The README does not explain why Chinese is the default or explicitly frame it as user-configurable guidance, which can conflict with language/locale neutrality expectations.

Static analysis

No suspicious patterns detected.