Back to skill

Security audit

Readme Maker

Security checks for vulnerabilities and agentic risk

Overview

This skill is not clearly malicious, but it presents itself as a README helper while mainly saving user-provided text into persistent local logs that can be searched and exported.

Review before installing. Treat this as a local logging/history tool rather than a real README generator, and do not pass secrets, private project notes, unreleased details, tokens, or sensitive README drafts unless you are comfortable with them being stored in plaintext under ~/.local/share/readme-maker/ and later searchable/exportable.

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
scripts/script.sh:63
Finding

Unescaped Log Data Causes JSON, CSV, and Log Injection

Content
View full analysis
> "$DATA_DIR/history.log"; } ``` The JSON exporter inserts stored values directly into JSON strings without escaping quotation marks, backslashes, control characters, or newlines: ```bash json) echo "[" > "$out" local first=1 for f in "$DATA_DIR"/*.log; do [ -f "$f" ] || continue local name=$(basename "$f" .log) while IFS='|' read -r ts val; do [ $first -eq 1 ] && first=0 || echo "," >> "$out" printf ' {"type":"%s","time":"%s","value":"%s"}' "$name" "$ts" "$val" >> "$out" done < "$f" done echo "\n]" >> "$out" ;; ``` The CSV exporter similarly writes fields without RFC 4180 quoting or spreadsheet-formula neutralization: ```bash csv) echo "type,time,value" > "$out" for f in "$DATA_DIR"/*.log; do [ -f "$f" ] || continue local name=$(basename "$f" .log) while IFS='|' read -r ts val; do echo "$name,$ts,$val" >> "$out"; done < "$f" done ;; ``` Domain commands persist caller-controlled input without escaping. This pattern is repeated for `check`, `validate`, `generate`, `format`, `lint`, `explain`, `convert`, `template`, `diff`, `preview`, `fix`, and `report`: ```bash local input="$*" local ts=$(date '+%Y-%m-%d %H:%M') echo "$ts|$input" >> "$DATA_DIR/check.log" local total=$(wc -l < "$DATA_DIR/check.log") echo " [Readme Maker] check: $input" echo " Saved. Total check entries: $total" _log "check" "$input" ``` ### Technical Analysis The application uses a pipe-delimited storage format but accepts arbitrary command arguments as a field value. Newlines and pipe characters ca ...[truncated 3033 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (8)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The skill is presented as a README design/styling tool, but the documented behavior includes persistent logging of all user inputs, history tracking, search, export, and status/reporting features unrelated to the declared narrow purpose. This mismatch is dangerous because users may provide repository metadata, draft content, internal project details, or tokens embedded in README text without realizing the tool retains and exposes that data on disk through history/search/export functions.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The implementation materially differs from the stated purpose: instead of designing or validating README content, it acts as a persistent activity logger for arbitrary user input. This mismatch is dangerous because users may provide repository metadata, tokens, private notes, or other sensitive text under the assumption of a README tool, and the script silently stores that data on disk for later retrieval and export.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill documents local storage of command inputs and activity history, but does not clearly warn users that README contents and other supplied text will be written persistently to disk and later exportable/searchable. In this context, README drafts may contain internal URLs, unreleased project details, contact information, or accidentally pasted secrets, so silent persistence increases confidentiality and privacy risk.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill explicitly instructs that command inputs should be timestamped, logged, stored by category, and made available through history, search, and export features. Persistently retaining arbitrary user-provided documentation content broadens exposure of potentially sensitive material and creates a secondary data store that may outlive the original task or be accessed by other local users/processes.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The script includes persistent logging, export, search, and status features that exceed what is necessary for a README formatting utility. Those extra capabilities increase the attack surface and create a local data-exfiltration path because accumulated user inputs can be searched and exported in bulk without any purpose-bound restriction.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The tool persistently records user inputs and provides multiple ways to surface them later, including recent activity, search, status, and export. In the context of a README helper, this is more dangerous because users are unlikely to expect surveillance-style retention of arbitrary prompts, making accidental capture of secrets and private content more likely.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The export functionality aggregates previously logged activity into json, csv, or txt files, creating easy-to-consume copies of potentially sensitive plaintext data. That increases exposure because one command can package historical inputs into shareable files without any warning, review step, or access control.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

At this location, user-supplied input is appended directly to persistent log files with no warning, consent, or filtering. This is risky because secrets or sensitive project content typed into the tool can be retained indefinitely in plaintext under the user's home directory and later exposed to other local processes or users.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.