T01 · Skill Instruction Hijacking
- Location
paper_matching/pipeline.py:76- Finding
Untrusted arXiv Content Is Forwarded to an LLM Without Prompt-Injection Isolation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent paper-recommendation tool, but it sends more member profile data than needed into downstream reports and LLM reranking payloads.
Review before installing in any environment with real member data. Limit the reranking payload to only the profile fields needed for matching, avoid printing full reports to orchestration logs, add prompt-injection isolation for arXiv content, and pin dependencies with a reviewed lock file. Use a least-privilege PostgreSQL account scoped to this skill's tables and an output directory with appropriate retention controls.
paper_matching/pipeline.py:76Untrusted arXiv Content Is Forwarded to an LLM Without Prompt-Injection Isolation
paper_matching/pipeline.py:76Reranking Payload Discloses More Member Profile Data Than Required
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
def _load_environment() -> None:
root = Path(__file__).resolve().parents[1]
env_path = os.getenv("OPENCLAW_ENV_FILE", os.path.expanduser("~/.config/literature-recommendation/.env"))
if load_dotenv is None:
return
load_dotenv(env_path, override=False)
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
def _load_environment() -> None:
root = Path(__file__).resolve().parents[1]
env_path = os.getenv("OPENCLAW_ENV_FILE", os.path.expanduser("~/.config/literature-recommendation/.env"))
if load_dotenv is None:
return
load_dotenv(env_path, override=False)
Package name closely resembles a popular package, suggesting possible typosquatting. Attackers publish malicious packages with similar names to trick developers into installing them.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
required_environment_variables:
- OPENCLAW_DB_DSN
- OPENCLAW_OUTPUT_DIR
environment_file: ~/.config/literature-recommendation/.env
The skill describes capabilities that imply network access, environment access, and database/write operations, but it does not declare any explicit tool scope or permissions boundary in the manifest. This creates a least-privilege failure: an orchestrator or reviewer cannot reliably tell what the skill is allowed to do, increasing the chance of overbroad execution or unsafe deployment.
The trigger list includes broad natural-language phrases such as general requests for paper recommendations, which may overlap with ordinary conversation and cause unintended invocation. In a skill that reads member preferences from PostgreSQL and performs external fetches, accidental activation can lead to unnecessary data access, network calls, and disclosure of recommendation content to downstream systems.
The natural-language contract specifies language: zh-CN, which mandates a specific output language. The file does not indicate that users can choose another language or that this locale restriction is optional, creating a language policy concern.
The natural-language contract explicitly sets language to zh-CN and provides only Chinese instructions and examples for generated recommendation reasons. This imposes a specific language on outputs without any visible user opt-in or justification that the skill is region-specific, which matches the locale-policy violation criteria.
This manifest description explains what the skill does, but it does not define specific invocation phrases, activation boundaries, or exclusion conditions. For a manifest file, the lack of trigger specificity can make skill routing ambiguous and increase the chance of unintended invocation.
The manifest description is written entirely in Chinese and presents the skill behavior in a single language without indicating that users may choose another language or locale. This can violate language/locale policy when no opt-in or justification for the restriction is provided.
The dependency is specified with a lower bound only (requests>=2.31.0), which makes builds non-reproducible and allows future vulnerable or breaking releases to be installed without review. In a skill that performs network/database-backed recommendation workflows, dependency drift can expose the runtime to supply-chain risk or unexpected security regressions.
requests>=2.31.0
python-dotenv>=1.0.0
psycopg[binary]>=3.2.0
The manifest does not pin requests, so it is impossible to verify from this file alone whether deployment will use a version affected by known advisories. This is dangerous because a fresh install could silently resolve to an insecure release range or change behavior in ways that expose credentials, request handling, or TLS assumptions.
python-dotenv>=1.0.0 is unpinned, so the environment may resolve to different versions over time, including versions later found vulnerable. Because this package influences configuration and secrets loading, version drift can have security consequences beyond simple compatibility issues.
requests>=2.31.0
python-dotenv>=1.0.0
psycopg[binary]>=3.2.0
Because python-dotenv is not pinned, the actual installed version cannot be verified against known advisories from the manifest alone. For a skill likely to load secrets and configuration from .env files, uncertainty around package versioning increases the chance of deploying a release with unsafe file-handling behavior.
No suspicious patterns detected.