T03 · Remote Payload Retrieval and Execution
- Location
scripts/install.sh:28- Finding
Remote Executable Downloaded Without Integrity Verification
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This PDF conversion skill has a coherent purpose, but it downloads and later runs an unverified OCR executable and offers remote OCR without clear privacy and secret-handling warnings.
Install only if you are comfortable running a downloaded third-party OCR executable without built-in checksum verification. Prefer the default local engine for confidential PDFs. If using Gemini, assume document contents may be sent to the provider and store the API key with owner-only permissions or a safer secret manager.
scripts/install.sh:28Remote Executable Downloaded Without Integrity Verification
scripts/requirements.txt:1Python Dependency Is Not Fully Pinned or Hash-Verified
SKILL.md:39Gemini API Key Is Stored Without Explicitly Restrictive Permissions
scripts/pdf2word.py:40Predictable Temporary Output Path Enables File-Race and Symlink Attacks
The README explicitly instructs users to send scanned PDF contents to a remote OCR engine (Gemini API) but does not warn that document data may leave the local machine and be processed by a third party. Because scanned PDFs often contain sensitive personal, legal, financial, or business information, this omission can cause inadvertent privacy, confidentiality, or compliance exposure.
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
To use Gemini, first configure your API key:
mkdir -p ~/.ocr
echo "gemini_api_key=your_gemini_key" > ~/.ocr/config
The README encourages use of the Gemini engine for OCR but does not disclose that document contents will be transmitted to a third-party API. In a PDF-to-Word skill, users may process sensitive scanned documents, so omission of this data-flow warning creates a meaningful privacy and compliance risk.
The instructions store a long-lived API key in a predictable path under ~/.ocr/config without any guidance on file permissions or safer secret-handling options. While this is common documentation behavior rather than overtly malicious logic, it can expose credentials to other local users, backups, shell history, or accidental disclosure depending on system configuration.
要使用 Gemini,请先配置您的 API 密钥:
mkdir -p ~/.ocr
echo "gemini_api_key=your_gemini_key" > ~/.ocr/config
The skill documentation describes capabilities that require shell execution and file access, but it does not declare an explicit tool scope such as permissions or allowed-tools. This creates a mismatch between what the skill can induce an agent to do and what reviewers or policy controls can validate, increasing the risk of overbroad execution or unexpected file access.
The skill recommends use of a remote OCR engine (Gemini) but does not clearly warn that document contents may be transmitted to a third-party service. Users may unknowingly send sensitive scanned documents, including personal, financial, or regulated data, outside the local environment.
The instructions store a Gemini API key in a persistent config file under ~/.ocr, which leaves credentials on disk beyond the current session. Persistent secrets increase exposure to later compromise through local account access, backups, accidental inclusion in support bundles, or other processes reading user home-directory files.
To use Gemini, first configure your API key:
mkdir -p ~/.ocr
echo "gemini_api_key=your_gemini_key" > ~/.ocr/config
The installer fetches a prebuilt executable from a remote release URL and immediately places it on disk and marks it executable, but it performs no integrity or authenticity verification such as a pinned checksum or signature check. If the release asset, GitHub account, network path, or upstream distribution process is compromised, users may install and later execute a trojanized binary through this skill's setup flow.
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
try:
# Pass extra custom arguments to docr
cmd = [docr_path, input_pdf, "-o", temp_text_file] + extra_args
subprocess.run(cmd, check=True)
except subprocess.CalledProcessError as e:
print(f"Error: OCR extraction failed: {e}")
sys.exit(1)
The dependency is specified as python-docx>=1.1.0, which allows installation of any future release and does not guarantee reproducible or reviewed builds. This increases supply-chain risk because a later vulnerable or malicious version could be pulled in unexpectedly, and it also makes it hard to verify whether the environment is using a safe release.
python-docx>=1.1.0
python-docx has known historical advisories related to XML external entity handling, and because the manifest does not pin the version, there is no way to verify from this file alone whether the installed release is patched. In a PDF/Word conversion skill that processes user-supplied documents, document-parsing libraries are security-sensitive, so uncertainty around a potentially vulnerable parser is more dangerous than in a non-document-processing context.
No suspicious patterns detected.