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

Content
View full analysis

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
View 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

Content
View full analysis

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
View 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
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
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.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.