Back to skill

Security audit

tulisai

Security checks for vulnerabilities and agentic risk

Overview

This skill appears intended for managing one specific blog, but its file-writing examples can overwrite or delete local content without strong safeguards.

Install only if you intend to let the agent manage /home/hades/BangunAI-Blog. Before allowing writes, deletes, git commits, or pushes, ask for a shown target path and diff, and avoid accepting filenames or categories containing slashes, dot-dot segments, or unexpected extensions.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:462
Finding

Unvalidated Content Paths Permit Arbitrary File Overwrite

Content
View full analysis
"$BLOG_ROOT/src/content/$CATEGORY/$FILENAME" <<'EOF' --- title: "Judul Artikel Baru" slug: judul-artikel-baru summary: "Ringkasan singkat tentang artikel ini yang menarik perhatian pembaca." type: note category: Tech tags: [react, typescript, tutorial] date: "2026-02-12T15:00:00" readingTime: 5 --- Content here... EOF ``` The same unsafe path construction is repeated in the documented writing, article, and read-item workflows: ```bash cat > "$BLOG_ROOT/src/content/$CATEGORY/$FILENAME" <<'EOF' ``` ### Technical Analysis The workflow treats `CATEGORY` and `FILENAME` as path components but does not validate, normalize, or constrain either value before using them in a shell redirection target. Shell quoting prevents word splitting and wildcard expansion, but it does not prevent traversal sequences such as `../`. The operating system resolves these components before opening the destination. Moreover, the `>` operator opens the resolved file with truncation, destroying existing content before writing the generated MDX data. For example, with a legitimate category and a malicious filename: ```bash CATEGORY="writing" FILENAME="../../../package.json" ``` the resulting path is: ```text /home/hades/BangunAI-Blog/src/content/writing/../../../package.json ``` which resolves to: ```text /home/hades/BangunAI-Blog/package.json ``` Additional traversal components could target any file writable by the account running the Agent. A malicious `CATEGORY` can similarly escape `src/content`. ### Attack Path 1. A user requests content creati ...[truncated 1321 chars]
Remediation
View remediation
&2 exit 1 ;; esac ``` 2. **Restrict filenames to safe MDX names** ```bash if [[ ! "$FILENAME" =~ ^[a-z0-9][a-z0-9-]*\.mdx$ ]]; then echo "Invalid filename" >&2 exit 1 fi ``` This rejects directory separators, traversal components, whitespace, shell metacharacters, and unexpected extensions. 3. **Verify the canonical destination** ```bash BASE="$BLOG_ROOT/src/content/$CATEGORY" DEST=$(realpath -m -- "$BASE/$FILENAME") BASE_REAL=$(realpath -- "$BASE") case "$DEST" in "$BASE_REAL"/*) ;; *) echo "Destination escapes the content directory" >&2 exit 1 ;; esac ``` 4. **Prevent unintended replacement** Refuse to overwrite an existing destination unless the user explicitly authorizes it: ```bash if [ -e "$DEST" ]; then echo "Destination already exists; explicit overwrite approval required" >&2 exit 1 fi ``` For new files, use noclobber mode or an atomic exclusive-creation mechanism where practical. 5. **Apply the validation consistently** Use one shared validated writer implementation for every copy of the workflow in `SKILL.md`, `README.md`, and `EXAMPLES.md` so that users do not copy an unsafe variant. 6. **Consider symbolic-link defenses** Ensure the destination directory and target are not attacker-controlled symbolic links. For stronger guarantees, create files through a trusted directory descriptor using exclusive and no-follow semantics. ]]>
Vulnerability Patterns
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (7)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · EXAMPLES.md (reported line 348)May include surrounding context.

Delete Post

bash
cd /home/hades/BangunAI-Blog
git rm src/content/writing/unwanted-post.mdx
echo "✅ Deleted post (git tracked)"

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 871)May include surrounding context.

md
git commit -m "Rename: old post to new name"

# Delete (tracked)
git rm src/content/writing/unwanted.mdx
git commit -m "Remove: unwanted post"

# Push

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The delete example performs a destructive action with git rm and immediately reports success, but it does not include any confirmation, preview, or warning that the operation removes tracked content. In an agent skill context, examples are often copied or automated directly, so the lack of a safeguard increases the chance of accidental data loss from an unintended path or file selection.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The README advertises workflows that create, append, update, and read files in a local repository without warning that they will modify user content. In an agent setting, this can normalize silent filesystem changes and make destructive or privacy-impacting actions more likely, especially when combined with automatic activation.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The auto-loading triggers are broad enough to activate on generic requests like creating blog content or writing MDX, which can cause the skill to run in contexts the user did not explicitly intend. Because this skill is designed to read and modify local files under a fixed path, over-broad activation increases the chance of unintended file access or content changes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The skill includes workflows such as update_about and update_now that overwrite whole files using shell redirection (cat > "$FILE" <<EOF) with user-influenced content, but it does not clearly warn that existing content will be replaced. In an agent setting, this creates a real risk of unintended data loss or destructive modification if the workflow is invoked with wrong or malformed input.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
87% confidence
Finding

The file's instructional text and content templates are written in Indonesian throughout, including fixed example page content, without indicating that language is configurable or limited to an Indonesian-specific use case. This can violate language/locale policy when a skill imposes a language by default without user opt-in.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.