T09 · Insecure Skill Coding Practices
- Location
tracker.py:181- Finding
Directory Traversal in Photo Destination Construction
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill mostly does what it says, but its local file handling and dry-run behavior have real safety gaps that users should review before installing.
Review before installing. Use only trusted vehicle names and category values, avoid formula-like text in spreadsheet fields, and do not rely on --dry-run as side-effect free until the config-write ordering is fixed. Prefer configuring dedicated photo and Excel directories and avoid pointing them at sensitive locations.
tracker.py:181Directory Traversal in Photo Destination Construction
tracker.py:220Spreadsheet Formula Injection Through Expense Fields
tracker.py:164Dry-Run Mode Can Persistently Modify Configuration
The skill description emphasizes Google Sheets expense tracking, but the documented behavior also includes local config access, local Excel creation, and filesystem-based photo storage. This mismatch can mislead users and automated policy systems about the real data access surface, increasing the chance of over-broad trust and unintended local data exposure or modification.
The skill performs file read/write operations but does not declare any tool scope or permissions boundary. This creates an authorization transparency gap: an agent or reviewer may assume the skill is limited to benign tracking behavior while it can access and modify local files, including config, photos, and spreadsheets.
The manifest says this skill tracks vehicle expenses in Google Sheets and saves photos. While writing to Google Sheets is expected, dynamically reaching into another skill's codebase to reuse authentication is a broader cross-skill integration capability that is not part of the stated purpose and expands trust to external local code.
The config sets the locale to "en-US", which is a natural-language/locale constraint. In this file there is no indication that the user can opt in to this locale or that the restriction is justified as region-specific behavior.
The string "English (US)" defines a specific locale in natural-language content, and this file provides no indication that users can choose another language or that the US locale is optional. Because SQP-3 applies to all file types and covers forced language/locale behavior, this is a mild policy concern if the skill defaults users into this locale without explicit selection.
No suspicious patterns detected.