T01 · Skill Instruction Hijacking
- Location
scripts/write_chapter.py:164- Finding
Untrusted project content is embedded in LLM prompts without instruction isolation
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is a coherent local novel-prompt generator, but its path handling can read files outside the intended book project and its generated prompts can treat project text as instructions.
Install only for trusted local book projects, and do not let untrusted users choose --outline or --output paths. Review generated prompts before sending them to an LLM, and prefer a fixed project directory plus pinned dependencies if using this in automation.
scripts/write_chapter.py:164Untrusted project content is embedded in LLM prompts without instruction isolation
scripts/write_chapter.py:121Outline path validation permits files outside the book directory
scripts/requirements.txt:1Runtime dependencies are installed without version or integrity pinning
The skill documentation describes local file read and write behavior but does not declare any explicit tool scope or permissions boundary. In an agent environment, this can lead to over-broad filesystem access, making it easier for the skill to read unintended files or overwrite arbitrary paths if the runtime grants default file capabilities.
The dependency rich is unpinned, so installs may resolve to different versions over time, reducing build reproducibility and increasing supply-chain risk if a future release introduces a vulnerability or breaking change. This is a real but low-severity dependency hygiene issue rather than an immediately exploitable flaw in the file itself.
rich
PyYAML
PyYAML is unpinned, which is more concerning because multiple historical security advisories exist for this package. Without version pinning, deployment may pull an affected release, creating a realistic supply-chain and known-vulnerable dependency exposure if the package is used to parse attacker-controlled YAML.
rich
PyYAML
The manifest includes PyYAML without a version, and that package has several known advisories across past releases. Because the installed version cannot be determined from this file, there is a credible risk that an affected version could be installed, especially in automated or fresh environments; in a prompt-generation skill, YAML may plausibly be used for profiles/config data, making unsafe parsing more relevant.
No suspicious patterns detected.