Back to skill

Security audit

GitHub README Generator

Security checks for vulnerabilities and agentic risk

Overview

This README generator is mostly purpose-aligned, but its script can overwrite an existing README and has unsafe input handling that could run commands from crafted input.

Review this skill before installing. Use it only in a disposable or backed-up working tree, avoid untrusted project names/descriptions or repositories, and do not run the bundled script until its README overwrite behavior and sed-based placeholder replacement are fixed.

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

Error
Location
github-readme-generator.sh:180
Finding

Arbitrary Command Execution Through Sed Script Injection

Content
View full analysis
/dev/null || echo "") if [ -n "$GIT_NAME" ]; then AUTHOR_NAME="$GIT_NAME" fi fi ``` ```bash # Replace placeholders CONTENT=$(echo "$TEMPLATE_CONTENT" | sed "s/{NAME}/$NAME/g") CONTENT=$(echo "$CONTENT" | sed "s/{NAME_KEBAB}/$NAME_KEBAB/g") CONTENT=$(echo "$CONTENT" | sed "s/{NAME_CAMEL}/$NAME_CAMEL/g") CONTENT=$(echo "$CONTENT" | sed "s/{DESCRIPTION}/$DESCRIPTION/g") CONTENT=$(echo "$CONTENT" | sed "s/{AUTHOR_NAME}/$AUTHOR_NAME/g") ``` ### Technical Analysis The script embeds user-controlled values directly into double-quoted `sed` programs. The affected values include the project name, description, transformed project names, the `AUTHOR_NAME` environment variable, and the repository-local Git username. Shell quoting does not make these values safe for use as part of a `sed` program. Characters meaningful to `sed`, including the selected delimiter, backslashes, ampersands, and newline characters, are not escaped. A value containing a newline can terminate the intended substitution command and introduce additional `sed` commands. On GNU `sed`, an injected `e` command executes a command through the system shell. Consequently, a malicious multiline value can convert placeholder processing into arbitrary operating-system command execution. The repository-local value obtained from `git config user.name` must also be considered untrusted because repository configuration or a prepared working directory can influence it. The modern template contains `{ AUTHOR_NAME }` rather than `{AUTHOR_NAME}`, but this mismatch does not reliably prevent exploitation. Inj ...[truncated 1566 chars]
Remediation
View remediation
Vulnerability Patterns
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (2)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script unconditionally overwrites README.md in the current directory without checking whether the file already exists or asking for confirmation. In a real workspace, this can destroy existing project documentation or overwrite user-authored content, causing data loss and potentially disrupting repository state or automation that depends on the prior README.

Content

No source excerpt is available for this finding.

Context-Inappropriate Capability

Low
Category
Not specified by scanner
Confidence
79% confidence
Finding

The manifest describes generating customizable README files from project inputs and templates. Reading .git state and extracting git config user.name introduces access to local developer identity information that is not mentioned in the skill description and is not necessary for basic README generation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.