T03 · Remote Payload Retrieval and Execution
- Location
README.md:59- Finding
Unverified Remote Installer Executed Directly by a Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears to match its stated PDF extraction purpose, but its setup and cloud-processing behavior need review before installation.
Review before installing. Prefer the built-in venv/pip or conda setup path instead of running the `curl | sh` uv installer, pin or verify any installation sources, and only process PDFs you are allowed to send to the configured LLM provider or Mathpix. Use a dedicated API key with limits, check the resolved base URL before use, and avoid batch mode for confidential or regulated documents unless the endpoint and provider policy are approved.
README.md:59Unverified Remote Installer Executed Directly by a Shell
README_ZH.md:58Unverified Remote Installer Executed Directly by a Shell in Chinese Documentation
SKILL.md:36Skill Instructions Recommend Direct Execution of a Mutable Remote Script
extractor.py:45Sensitive PDF Content and API Credentials Can Be Sent to an Arbitrary Configured Endpoint
Piping network-fetched content directly into sh is a classic command-chaining pattern that eliminates any review barrier before execution. In a skill README, this is particularly dangerous because users may copy-paste setup commands verbatim, turning documentation into a one-step remote code execution path if the source is tampered with.
# Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create virtual environment and install dependencies in project directory
cd ~/.claude/skills/sci-data-extractor
Piping remote content directly into sh creates an immediate command-execution path from an external source to the user's shell. In the context of a skill installation README, this is more dangerous because users are likely to copy-paste it verbatim, enabling full host compromise if the fetched script is malicious or tampered with.
# 安装 uv(如果还没安装)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 在项目目录创建虚拟环境并安装依赖
cd ~/.claude/skills/sci-data-extractor
The shell pipeline ending in '| sh' is a direct command-chaining execution pattern that can lead to arbitrary code execution from remote content. In skill context, this is especially risky because users may copy-paste setup instructions without scrutiny, turning documentation into an execution vector.
Method 1: Using uv (Recommended - Fastest)
# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create virtual environment and install dependencies
cd /path/to/sci-data-extractor
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
cp .env.example .env
# Edit .env and add your API key
# Get API key from: https://console.anthropic.com/
EXTRACTOR_API_KEY=your-api-key-here
EXTRACTOR_BASE_URL=https://api.anthropic.com
EXTRACTOR_MODEL=claude-sonnet-4-5-20250929
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# 创建 .env 文件
cp .env.example .env
# 编辑 .env,添加你的 API key
# EXTRACTOR_API_KEY=your-api-key-here
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
# 创建 .env 文件
cp .env.example .env
# 编辑 .env,添加你的 API key
# EXTRACTOR_API_KEY=your-api-key-here
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
print("安装命令: pip install openai")
sys.exit(1)
# 加载 .env 文件
try:
from dotenv import load_dotenv
load_dotenv()
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
print("安装命令: pip install openai")
sys.exit(1)
# 加载 .env 文件
try:
from dotenv import load_dotenv
load_dotenv()
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
print("安装命令: pip install openai")
sys.exit(1)
# 加载 .env 文件
try:
from dotenv import load_dotenv
load_dotenv()
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
print("安装命令: pip install openai")
sys.exit(1)
# 加载 .env 文件
try:
from dotenv import load_dotenv
load_dotenv()
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
print("安装命令: pip install openai")
sys.exit(1)
# 加载 .env 文件
try:
from dotenv import load_dotenv
load_dotenv()
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
print("安装命令: pip install openai")
sys.exit(1)
# 加载 .env 文件
try:
from dotenv import load_dotenv
load_dotenv()
The README explicitly promotes AI-powered extraction using external LLM and OCR providers, but it does not clearly warn that PDF contents, including potentially sensitive research or unpublished data, may be transmitted to third-party services. This creates a real privacy and data-governance risk because users may assume processing is local when it is not.
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.
# Install uv (if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Create virtual environment and install dependencies in project directory
cd ~/.claude/skills/sci-data-extractor
uv venv
source .venv/bin/activate # Linux/macOS
The README directs users to configure Mathpix and other API-backed services, confirming that document-derived content may be transmitted off-host to third parties. In the context of a PDF extraction skill, this is security-relevant because scientific PDFs can contain confidential data, proprietary methods, or embargoed research.
- **Anthropic Claude**: https://console.anthropic.com/
- **OpenAI**: https://platform.openai.com/api-keys
- **Mathpix OCR**: https://api.mathpix.com/
## Usage
The README explicitly describes using external AI and OCR providers to process scientific PDFs and images, but it does not clearly warn that document contents may be transmitted to third-party services. This can lead users to upload unpublished papers, proprietary research, or sensitive data without informed consent, causing confidentiality and compliance issues.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
npx commands without a version suffix (e.g. @1.0.0) create a rug-pull risk if the upstream server is compromised and publishes a malicious update.
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.
cd ~/.claude/skills/sci-data-extractor
conda create -n sci-data-extractor python=3.11 -y
conda activate sci-data-extractor
pip install -r requirements.txt
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.
cd ~/.claude/skills/sci-data-extractor
conda create -n sci-data-extractor python=3.11 -y
conda activate sci-data-extractor
pip install -r requirements.txt
The skill documents capabilities that involve network access, reading environment variables for credentials, and writing output files, but it does not declare an explicit tool/permission scope. This creates an authorization ambiguity where an agent or user may not realize the skill can transmit document contents externally or access secrets, increasing the chance of overbroad execution.
The skill advertises PDF extraction and LLM/OCR use, but it does not clearly warn that uploaded PDF content may be transmitted to third-party providers such as Anthropic, OpenAI, or Mathpix. Users may therefore process unpublished, confidential, or regulated research documents without informed consent about external data exposure.
The documentation instructs users to run npx skills add without pinning a specific package or version. This can cause installation of whatever skills package or remote behavior is current at execution time, creating a supply-chain risk if the package is updated maliciously, typo-squatted, or otherwise changes unexpectedly.
This code file contains user-facing natural-language strings such as the module docstring, error messages, help text, and examples entirely in Chinese. Under the policy rule for language/locale, forcing a specific language without user opt-in or documented regional justification is a policy concern.
The README instructs users to use Mathpix OCR with API credentials but does not warn that PDF contents will be transmitted to an external service. In a scientific-literature extractor, PDFs may contain unpublished, proprietary, or regulated data, so omission of a privacy/data-transfer notice can mislead users into exposing sensitive documents.
No suspicious patterns detected.