T08 · Insecure Dependencies
- Location
SKILL.md:60- Finding
Execution of Unpinned Third-Party and Git-Hosted Dependencies
- Content
View full analysis
Vulnerability Details
File Location:
SKILL.md, lines 60, 85–87, and 121–124
Vulnerability Type: Unpinned and mutable software dependencies
Risk Level: MediumVulnerable Code
bash uvx markitdown-mcpbash pip install "git+https://github.com/Self-made-Orange/markitdown.git#subdirectory=packages/markitdown[all]" pip install "git+https://github.com/Self-made-Orange/markitdown.git#subdirectory=packages/markitdown-ocr" pip install openaibash uvx --from "git+https://github.com/Self-made-Orange/markitdown.git#subdirectory=packages/markitdown[all]" \ --with "git+https://github.com/Self-made-Orange/markitdown.git#subdirectory=packages/markitdown-ocr" \ --with openai \ markitdown "<abspath>" --use-plugins --llm-client openai --llm-model "${MARKITDOWN_OCR_MODEL:-gpt-4o-mini}"Technical Analysis
The documented installation and execution commands resolve packages without fixed versions, cryptographic hashes, lockfiles, or immutable Git commit references. The OCR components are fetched directly from a GitHub fork through a mutable repository reference rather than an audited commit SHA or integrity-verified release artifact.
Both
pip installanduvxmay execute package installation logic and subsequently run downloaded code. The one-shotuvxcommand is particularly sensitive because it retrieves and executes newly resolved code in the same workflow. Consequently, the code actually executed can differ from the content that was previously reviewed.This creates a software supply-chain risk. A compromised package registry account, GitHub repository, mutable branch, upstream release, or transitive dependency could introduce attacker-controlled code. No evidence establishes that the currently referenced projects are malicious; the vulnerability is the absence of controls ensuring that future installations execute the reviewed versions.
Attack Path
- An ...[truncated 1801 chars]
- Remediation
View remediation
Remediation Suggestions
- Pin every package to a reviewed exact version instead of resolving the latest available release.
- Pin Git dependencies to audited full commit SHAs rather than mutable default branches or repository references.
- Use a lockfile or fully constrained requirements file that also pins transitive dependencies.
- Require cryptographic hashes for downloaded packages, such as with
pip --require-hashes, and verify release provenance or signatures where available. - Prefer trusted, versioned release artifacts from an established package registry over direct installation from a mutable personal fork.
- Mirror approved artifacts into a controlled internal registry after security review.
- Run conversion tools in an isolated sandbox or container with:
- A read-only filesystem except for a dedicated output directory.
- Access restricted to the specific input document.
- No unnecessary host-directory mounts.
- Network access disabled for local conversion and allowlisted only when OCR is explicitly required.
- A narrowly scoped API credential supplied only to the OCR subprocess.
- Separate dependency installation from document processing. Build and scan a fixed environment in advance rather than downloading executable dependencies when handling an attachment.
- Add automated dependency scanning and periodic review of pinned versions before controlled upgrades.
- Document the exact reviewed package versions and Git commit SHAs so operators can verify that the runtime matches the audited configuration.
