T09 · Insecure Skill Coding Practices
- Location
SKILL.md:19- Finding
Vikunja credentials and long-lived bearer tokens transmitted over plaintext HTTP
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Vikunja helper mostly matches its task-management purpose, but it under-discloses destructive actions and uses long-lived local tokens in a way users should review carefully.
Install only if you are comfortable giving the agent broad Vikunja account authority, including possible deletion and assignment changes. Prefer an HTTPS or otherwise trusted local endpoint, use a least-privileged token, avoid printing tokens, and require explicit confirmation before any delete operation.
SKILL.md:19Vikunja credentials and long-lived bearer tokens transmitted over plaintext HTTP
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
获取 Token:
RESP=$(curl -s -X POST http://localhost:3456/api/v1/login \
-H 'Content-Type: application/json' \
-d '{"username":"your-user","password":"your-pass"}')
TOKEN=$(echo "$RESP" | grep -o '"token":"[^"]*"' | cut -d'"' -f4)
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
mkdir -p "$AGENT_WORKSPACE/config"
echo "$TOKEN" > "$AGENT_WORKSPACE/config/.vikunja-token"
chmod 600 "$AGENT_WORKSPACE/config/.vikunja-token"
读取 Token:
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
# 列出项目
curl -s http://localhost:3456/api/v1/projects -H "Authorization: Bearer $TOKEN"
# 创建项目(PUT /projects)
curl -s -X PUT http://localhost:3456/api/v1/projects \
The skill documents project deletion but the manifest does not disclose destructive deletion capability. Hidden destructive actions are dangerous because users, agents, or reviewers may grant this skill broader trust than warranted, leading to unexpected permanent data loss.
Documenting project deletion without any warning, confirmation guidance, or note about irreversibility increases the risk of accidental destructive use. In an agent context, terse examples may be copied directly into automation, causing unintended deletion of entire projects.
The task deletion example is presented as a routine operation without a warning about irreversible removal. This is risky in an automation skill because agents may execute the example directly and remove data based on ambiguous prompts or misunderstandings.
The manifest/description understates the skill's capabilities by omitting assignee management, while the body documents endpoints that can change task ownership. This creates a security-relevant mismatch because operators or policy systems may approve the skill for limited task management while it can also modify assignment state affecting other users' workflows.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
return {"Authorization": f"Bearer {get_token()}", "Content-Type": "application/json"}
def create_task(project_id, title, **kw):
return requests.put(f"{BASE}/projects/{project_id}/tasks",
json={"title": title, **kw}, headers=headers()).json()
def update_task(task_id, **kw):
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
json={"title": title, **kw}, headers=headers()).json()
def update_task(task_id, **kw):
return requests.post(f"{BASE}/tasks/{task_id}", json=kw, headers=headers()).json()
def search_tasks(q):
return requests.get(f"{BASE}/tasks", params={"s": q}, headers=headers()).json()
Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.
"persistence": null,
"credentialSetup": {
"type": "env_or_file",
"description": "Login once per agent to get token. Store via $VIKUNJA_TOKEN env or write to $AGENT_WORKSPACE/config/.vikunja-token with chmod 600."
},
"requires": {
"anyBinaries": ["curl"],
The description forces Chinese-language instructions in a skill whose title and structure are otherwise English-facing, with no indication that the user can choose language or that the tool is intended only for a Chinese-speaking locale. This can violate language or locale policy when a specific language is imposed without opt-in.
The manifest says the skill supports completion-status toggling, which implies switching task state in either direction. The documented examples only demonstrate updating a task with done=true and do not provide any dedicated toggle behavior or example of setting done=false.