T09 · Insecure Skill Coding Practices
- Location
scripts/parse_filmliste.py:106- Finding
Unbounded Download and Full Decompression of Remote Data
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent and purpose-aligned, but it relies on a downloaded public catalog and should be used with normal caution around cached data and links.
Install only if you are comfortable with the skill creating or reading PROFILE.md, downloading and caching a public media catalog, and sending recommendations through your configured output channel. Treat recommendation links as external links, and prefer added resource limits and URL validation for shared, sensitive, or low-resource environments.
scripts/parse_filmliste.py:106Unbounded Download and Full Decompression of Remote Data
scripts/parse_filmliste.py:149Unvalidated Remote URLs Included in Trusted Recommendation Output
This finding indicates the skill may download external data, maintain a local cache, and apply hard-coded selection logic despite presenting itself as an on-demand personalized recommender. Undisclosed network access and persistence expand the attack surface and can introduce privacy, integrity, and supply-chain risks if users or policy engines are not made aware.
This finding indicates the skill may download external data, maintain a local cache, and apply hard-coded selection logic despite presenting itself as an on-demand personalized recommender. Undisclosed network access and persistence expand the attack surface and can introduce privacy, integrity, and supply-chain risks if users or policy engines are not made aware.
The skill invokes shell execution (python3 scripts/start_curation.py) but does not declare an explicit tool scope such as permissions or allowed-tools. This weakens least-privilege controls and can allow broader-than-expected command execution in environments that rely on the manifest for sandboxing and user trust.
The instructions explicitly require that recommendations be written in German, including a note that output must be in German even though the template is in English. This imposes a language/locale constraint without offering the user a choice or documenting a clear region-specific justification.
This code downloads data from a remote URL via curl and writes it directly to a trusted local file that is then consumed by the workflow. While there is no shell injection here, it creates a supply-chain trust boundary: if the remote endpoint, transport, or downloaded content is compromised, the downstream parser may process malicious input and potentially fail or be exploited depending on parser robustness.
if needs_download():
log("Downloading Filmliste-akt.xz ...")
result = subprocess.run(["curl", "-fsSL", "-o", str(FILMLISTE), DOWNLOAD_URL])
if result.returncode != 0:
print("Error: Download of Filmliste-akt.xz failed.", file=sys.stderr)
sys.exit(1)
subprocess module calls execute external commands. Without careful input validation, this enables command injection.
parser = Path(__file__).parent / "parse_filmliste.py"
log("Starting parse_filmliste.py ...")
subprocess.run(
[sys.executable, str(parser), str(FILMLISTE), "--limit", "1337", "--min-duration", "42"],
check=True,
)
No suspicious patterns detected.