T09 · Insecure Skill Coding Practices
- Location
scripts/vikunja.sh:90- Finding
Arbitrary Local Command Execution Through Python Source Injection
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Vikunja task skill mostly matches its purpose, but its helper script has unsafe input handling that can run crafted local code and may expose the API token if configured with HTTP.
Review this skill before installing. Use it only with a trusted Vikunja URL over HTTPS, a least-privilege API token, and clear user confirmation before write actions. The script should be fixed to URL-encode arguments safely, reject non-HTTPS remote URLs, and make the timezone configurable before routine use.
scripts/vikunja.sh:90Arbitrary Local Command Execution Through Python Source Injection
scripts/vikunja.sh:20Bearer Token Can Be Transmitted Over Plaintext HTTP
The skill invokes shell commands and makes network-backed API calls to a self-hosted Vikunja instance, but it declares no explicit tool scope or permissions boundary. That increases the chance the agent can use broader shell/network capabilities than intended, making unintended external access or command execution harder to constrain and audit.
The description is broad enough to match many ordinary productivity requests, which can cause the skill to activate when the user did not specifically intend to interact with their Vikunja instance. In this skill's context, overbroad activation is more dangerous because the skill supports persistent task and project modifications against a live self-hosted service.
The documentation presents create/complete/project-creation commands as routine actions without clearly warning that they will modify persistent data on the user's Vikunja instance. This can lead to accidental writes or state changes, especially if an agent follows the examples automatically in response to ambiguous user requests.
The skill hard-codes America/Denver for due-date handling and cron scheduling without offering a user-configurable timezone. In a task-management context, this can cause reminders, overdue calculations, and notifications to occur at the wrong times, potentially leading to missed deadlines or misleading automation behavior.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# --- Helpers ---
api_get() {
curl -s -H "$AUTH" "${API}/$1"
}
api_put() {
The task-listing request forces filter_timezone=America/Denver, which imposes a specific locale setting on all users. This can violate language/locale policy expectations because the script does not offer a user choice or explain why this region-specific timezone is required.
Both the overdue and due commands use filter_timezone=America/Denver, again enforcing a region-specific locale assumption in user-visible task filtering behavior. The script provides no opt-in, override, or explanation for this fixed timezone choice.
No suspicious patterns detected.