T01 · Skill Instruction Hijacking
- Location
SKILL.md:130- Finding
Global Agent Task-State Instruction Hijacking
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This Vikunja task skill is broadly related to its stated purpose, but it overreaches and includes unsafe install and credential-handling guidance that users should review before installing.
Review before installing. Use HTTPS only, avoid the curl-to-/usr/local/bin helper install unless you pin and verify the script, store tokens in a secret manager or tightly permissioned file instead of ~/.bashrc, and require explicit confirmation before deletes, bulk changes, sharing, team/member changes, or attachment operations.
SKILL.md:130Global Agent Task-State Instruction Hijacking
SKILL.md:105Mutable Remote Executable Downloaded and Installed Without Verification
SKILL.md:112Bearer Token Persisted in Plaintext Shell Startup Configuration
vikunja.sh:55Credentials and Bearer Tokens May Be Transmitted Over Cleartext HTTP
vikunja.sh:55Unescaped Values Interpolated into JSON Request Bodies
The code is clearly related to Vikunja and uses its API, so the general domain matches. However, the declared description significantly overstates functionality. The script only supports a narrow set of task/project commands and authentication. There is no evidence of endpoints or commands for labels, teams, views, comments, attachments, or bulk operations, and it is not a full v2 API integration. This is a description/behavior mismatch due to substantial overclaiming of supported capabilities.
Referenced artifact was not completely inspected
Save `vikunja.sh` to a directory in your PATH for convenient CLI access:
YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).
on: Bearer $VIKUNJA_TOKEN" | jq '.[] | {id,title}'
**Step 4: Optional — Install the Helper Script**
Save `vikunja.sh` to a directory in your PATH for convenient CLI access:
```bash
curl -sL https://raw.githubusercontent.com/ashanzzz/openclaw-person-skills/main/skills/vikunja-task-api/vikunja.sh \
-o /usr/local/bin/vikunja && chmod +x /usr/local/bin/vikunja
Then configure:
echo 'export VIKUNJA_URL="http://your-vikunja-instance:3456"' >> ~/.bashrc
echo 'export VIKUNJA_TOKEN="tk_your_token"' >> ~/.bashrc
source ~/.bashrc
Usage examples:
vikunja list # List all open tasks
vikunja due-today # Tasks due today
vikunja create 9 "New task" # Create task in project 9
vikunja done 123 # Mark task 123 as done
vikunja show 123 # Show task details
Use Vikunja as the source of truth for all task management. This skill supersedes any internal working-buffer tracking for user-visible
The skill documents extensive shell-based capabilities but does not declare any tool scope or allowed-tools boundary. That omission weakens least-privilege controls and can let an agent invoke shell/network operations that users or the platform did not explicitly approve.
The skill instructs users to download and execute a remote script directly into a PATH location without integrity verification, pinning, or code review. This creates a supply-chain risk: if the upstream repository or network path is compromised, arbitrary code could be installed and later executed with the user's privileges.
Save vikunja.sh to a directory in your PATH for convenient CLI access:
curl -sL https://raw.githubusercontent.com/ashanzzz/openclaw-person-skills/main/skills/vikunja-task-api/vikunja.sh \
-o /usr/local/bin/vikunja && chmod +x /usr/local/bin/vikunja
The skill advises placing long-lived credentials in shell startup files like ~/.bashrc, which exposes them to accidental disclosure through dotfile syncing, local compromise, shell history debugging, or other processes/users with read access. Persisting API tokens in general-purpose startup files is unnecessary and broadens credential exposure.
The markdown includes destructive operations such as delete project/task/label without any warning, confirmation guidance, or safety rails. In an agent setting, such examples can normalize or trigger unsafe state-changing actions that cause irreversible data loss.
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "Authorization: Bearer $VIKUNJA_TOKEN" | jq '.[] | {id,title,owner}'
# Create project (PUT, not POST!)
curl -X PUT "$VIKUNJA_URL/api/v1/projects" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Project Name","description":"","identifier":"","hex_color":""}' | jq '{id,title}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "Authorization: Bearer $VIKUNJA_TOKEN" | jq
# Update project (POST)
curl -X POST "$VIKUNJA_URL/api/v1/projects/{id}" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"New Title","hex_color":"#ff0000"}' | jq '{id,title}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
| jq '.[] | {id,title,done,due_date}'
# Create task in project (PUT, not POST!)
curl -X PUT "$VIKUNJA_URL/api/v1/projects/{project_id}/tasks" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Task Title","description":"","due_date":"2026-04-30T23:59:00Z"}' | jq '{id,title}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "Authorization: Bearer $VIKUNJA_TOKEN" | jq
# Update task (POST) — including mark done
curl -X POST "$VIKUNJA_URL/api/v1/tasks/{id}" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"done":true,"title":"Updated Title"}' | jq '{id,done,done_at}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-d '{"done":true,"title":"Updated Title"}' | jq '{id,done,done_at}'
# Delete task
curl -X DELETE "$VIKUNJA_URL/api/v1/tasks/{id}" \
-H "Authorization: Bearer $VIKUNJA_TOKEN"
# Bulk update tasks
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-d '{"tasks":[{"id":1,"done":true},{"id":2,"done":true}]}' | jq
# Update task position (for drag-and-drop reordering)
curl -X POST "$VIKUNJA_URL/api/v1/tasks/{id}/position" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"position":0,"bucket_id":5}' | jq
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-d '{"position":0,"bucket_id":5}' | jq
# Duplicate task
curl -X PUT "$VIKUNJA_URL/api/v1/tasks/{id}/duplicate" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"project_id":9}' | jq '{id,title}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "Authorization: Bearer $VIKUNJA_TOKEN" | jq
# Add assignee
curl -X PUT "$VIKUNJA_URL/api/v1/tasks/{id}/assignees" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"user_id":1}' | jq
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-d '{"user_id":1}' | jq
# Bulk add assignees
curl -X POST "$VIKUNJA_URL/api/v1/tasks/{id}/assignees/bulk" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"user_ids":[1,2,3]}' | jq
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "Authorization: Bearer $VIKUNJA_TOKEN" | jq
# Add label to task
curl -X PUT "$VIKUNJA_URL/api/v1/tasks/{id}/labels" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"label_id":5}' | jq
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-d '{"label_id":5}' | jq
# Bulk update labels on task
curl -X POST "$VIKUNJA_URL/api/v1/tasks/{id}/labels/bulk" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"labels":[{"label_id":5},{"label_id":8}]}' | jq
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "Authorization: Bearer $VIKUNJA_TOKEN" | jq
# Create comment
curl -X PUT "$VIKUNJA_URL/api/v1/tasks/{id}/comments" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"comment":"This is a comment"}' | jq '{id,comment}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-d '{"comment":"This is a comment"}' | jq '{id,comment}'
# Update comment
curl -X POST "$VIKUNJA_URL/api/v1/tasks/{id}/comments/{comment_id}" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"comment":"Updated comment"}' | jq
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-F "file=@/path/to/file.pdf" | jq
curl -X DELETE "$VIKUNJA_URL/api/v1/tasks/{id}/attachments/{attachment_id}"
-H "Authorization: Bearer $VIKUNJA_TOKEN"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "Authorization: Bearer $VIKUNJA_TOKEN" | jq '.[] | {id,title,hex_color}'
# Create label
curl -X PUT "$VIKUNJA_URL/api/v1/labels" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Bug","hex_color":"#ff0000"}' | jq '{id,title}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-d '{"title":"Bug","hex_color":"#ff0000"}' | jq '{id,title}'
# Update label
curl -X PUT "$VIKUNJA_URL/api/v1/labels/{id}" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"Feature","hex_color":"#00ff00"}' | jq
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-H "Authorization: Bearer $VIKUNJA_TOKEN" | jq '.[] | {id,title}'
# Create bucket
curl -X PUT "$VIKUNJA_URL/api/v1/projects/{id}/views/{view_id}/buckets" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"To Do"}' | jq '{id,title}'
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
-d '{"title":"To Do"}' | jq '{id,title}'
# Update bucket
curl -X POST "$VIKUNJA_URL/api/v1/projects/{project_id}/views/{view_id}/buckets/{bucket_id}" \
-H "Authorization: Bearer $VIKUNJA_TOKEN" \
-H "Content-Type: application/json" \
-d '{"title":"In Progress"}' | jq
No suspicious patterns detected.