Back to skill

Security audit

My Awesome Tools

Security checks for vulnerabilities and agentic risk

Overview

This developer script bundle does not show a backdoor, but it has unsafe file-writing behavior, a real command-injection risk, and a code-review tool that presents canned output as if it analyzed code.

Review and patch these scripts before installing for regular use. Run them only in disposable or version-controlled directories, do not pass untrusted names/descriptions, do not rely on the code-review assistant for real security review, and expect README or generated project files to be overwritten unless you add safeguards.

Vulnerability Patterns
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (5)

T09 · Insecure Skill Coding Practices

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

<![CDATA[Command Injection Through Unescaped GNU sed Expressions]]>

Content
View full analysis
README.md echo -e "${GREEN}✅ README.md generated successfully!${NC}" echo "Project: $NAME" echo "Template: $TEMPLATE" ``` ### Technical Analysis The user-controlled `NAME` and `DESCRIPTION` values, as well as the environment-derived `AUTHOR_NAME`, are inserted directly into double-quoted `sed` programs. They are not escaped as replacement data before being interpreted by `sed`. Characters such as `/`, `\`, `&`, and embedded newlines can change the structure of the generated `sed` program. On GNU `sed`, an attacker can use an embedded newline to terminate the substitution command and introduce an `e` command, which executes a shell command. The remaining generated syntax can be neutralized with a `sed` comment. This is not ordinary shell metacharacter injection through Bash expansion—the shell does not reparse expansion results as shell syntax. Instead, it is injection into the secondary GNU `sed` command language, whose `e` instruction provides a shell-execution primitive. ### Attack Path 1. An attacker supplies a crafted project name, description, or `AUTHOR_NAME` value containing a replacement terminator and embedded newlines. 2. The value is interpolated into a command such as: ```bash sed "s/{DESCRIPTION}/$DESCRIPTION/g" ``` 3. The crafted value terminates the intended substitution and introduces a GNU `sed` `e` instruction. 4. GNU `sed` ...[truncated 847 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
chrome-extension-generator.sh:50
Finding

<![CDATA[Path Traversal and Uncontrolled File Overwrite in Chrome Extension Generation]]>

Content
View full analysis
"$OUTPUT_PATH/manifest.json" << MANIFEST ``` The same derived path is subsequently used to overwrite `popup.html`, `popup.js`, `background.js`, and `README.md`. ### Technical Analysis The conversion of `NAME` to `DIR_NAME` only lowercases letters and replaces spaces with hyphens. It preserves path separators, `.` components, `..` components, absolute-path syntax, and other path-significant characters. Quoting `"$OUTPUT_PATH"` prevents shell word splitting and glob expansion, but it does not prevent filesystem traversal. A value containing traversal components can therefore cause the resolved output directory to fall outside the intended output root. The generator also uses the truncating redirection operator `>` without checking whether destination files already exist. Once an attacker controls the resolved directory, the script will replace fixed filenames in that directory. ### Attack Path 1. An attacker controls or influences the extension name passed to the script. 2. The attacker supplies a name containing path components, such as traversal sequences. 3. The transformation preserves those components in `DIR_NAME`. 4. `OUTPUT_PATH="$OUTPUT_DIR/$DIR_NAME"` resolves outside the intended output directory. 5. `mkdir -p` creates the attacker-selected directory if permitted. 6. The subsequent `cat >` operations create or truncate `manifest.json`, `popup.html`, `popup.js`, `background.js`, and `READ ...[truncated 581 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
saas-landing-page.sh:56
Finding

<![CDATA[Path Traversal and Uncontrolled File Overwrite in Landing-Page Generation]]>

Content
View full analysis
"$OUTPUT_PATH/App.jsx" << 'REACT_APP' ``` and: ```bash cat > "$OUTPUT_PATH/index.html" << INDEX_HTML ``` ### Technical Analysis The product-name normalization retains `/`, `..`, and other path syntax. Appending `-landing` does not prevent traversal: preceding path components can still escape `OUTPUT_DIR`, while the final selected directory receives the suffix. The script creates the resolved directory and writes generated source files without validating that the canonical destination remains under the requested output root. Existing files are overwritten with `>` and no confirmation. ### Attack Path 1. An attacker supplies a product name containing path traversal components. 2. The `tr` operations preserve those components. 3. The constructed `OUTPUT_PATH` resolves outside the intended output root. 4. The generator creates `components` and `assets` directories at the resolved destination. 5. It creates or truncates files such as `App.jsx`, `index.html`, `README.md`, and component files. 6. Existing caller-writable project content at that destination may be replaced. ### Impact Assessment The attacker can redirect generated output to an unintended caller-writable location and overwrite the generator’s fixed filenames. This can: - Corrupt ...[truncated 340 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
saas-landing-page.sh:136
Finding

<![CDATA[Generated Websites Execute Mutable Third-Party CDN Scripts Without Integrity Verification]]>

Content
View full analysis
"$OUTPUT_PATH/index.html" << INDEX_HTML $PRODUCT - $DESCRIPTION
INDEX_HTML ``` The plain HTML branch also generates: ```html ``` ### Technical Analysis The generated pages execute JavaScript obtained from external CDN domains at page-load time. The URLs use mutable aliases, including the unversioned Tailwind browser endpoint and the major-version React alias `@18`. None of the script elements includes a Subresource Integrity hash. Consequently, the browser has no cryptographic guarantee that the fetched content is the same content reviewed when the generator was audited. A CDN compromise, upstream account compromise, malicious package-version change, or mutable alias update can change the effective code executed by previously generated pages. External scripts execute with the privileges of the generated page’s origin and are not isolated merely because they were downloaded from another domain. ### Attack Path 1. A user generates and opens or deploys the landing page. 2. The bro ...[truncated 1183 chars]
Remediation
View remediation

other

Warning
Location
code-review-assistant.sh:22
Finding

<![CDATA[Code Review Assistant Presents Static Sample Findings as Real Analysis]]>

Content
View full analysis
${NC}" exit 1 fi echo "📁 Reviewing: $TARGET" echo "" cat << 'REPORT' ### Code Review Report #### ⚠️ Issues Found ##### High Priority 1. **Security: Potential SQL Injection** - File: example.js - Line: 45 ```javascript const query = `SELECT * FROM users WHERE id = ${userId}`; ``` **Recommendation**: Use parameterized queries ##### Medium Priority 2. **Error Handling: Missing try-catch** - File: example.js - Line: 23 ```javascript const data = JSON.parse(response); ``` **Recommendation**: Add error handling 3. **Best Practice: Hardcoded Secret** - File: example.js - Line: 67 ```javascript const API_KEY = "sk-1234567890"; ``` **Recommendation**: Use environment variables ##### Low Priority 4. **Style: Use const instead of let** 5. **Style: Add JSDoc comments** 6. **Performance: Consider caching** --- ### Summary | Type | Count | |------|-------| | Security | 1 | | Error Handling | 1 | | Best Practices | 2 | | Style | 2 | ### Recommendation Fix high priority issues before merging. Consider addressing medium priority items in next iteration. --- REPORT echo -e "${GREEN}✅ Review complete!${NC}" ``` ### Technical Analysis The script accepts a target path and announces that it is reviewing that target, but it never opens, parses, scans, or otherwise inspects the target. Instead, it emits a fixed report referring to `example.js` and predetermined line numbers. The `diff` mode similarly prints a real `git diff --stat` followed by fixed file names and issue counts. This mixing of genuine ...[truncated 1350 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (9)

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
98% confidence
Finding

The help text advertises options such as language selection, output file saving, and output formatting, but the script does not parse or implement them. This is dangerous because users may rely on nonexistent review behavior, assume reports were tailored or saved when they were not, and make security or release decisions based on misleading functionality.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
99% confidence
Finding

The review <path> command claims to review a supplied file or directory, but the implementation ignores the target and prints a canned report. In a code-review assistant, this is especially dangerous because it can create false assurance that code was security-reviewed when no analysis occurred, potentially allowing real vulnerabilities to be missed and merged.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script unconditionally writes to README.md, overwriting any existing file without confirmation or backup. In an agent or automation context, this can destroy project documentation or replace manually curated content, causing integrity loss and potentially erasing important instructions or security-related documentation.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

Lines L116-L120 present user-facing guidance in Chinese, and line L129 also continues this pattern, while the rest of the script is primarily in English. This creates a language/locale policy concern because the skill forces a specific language for part of the output without user opt-in or justification.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This shell script is a code file, so SQP-2 applies to sensitive environment variable access and related user disclosure. Line L122 instructs the user to set GITHUB_TOKEN to enable PR reviews, but there is no accompanying warning or explanatory comment about using a personal access token or the implications of supplying credentials.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The diff command is presented as reviewing the current git diff, but it only shows git diff --stat and then emits a static findings report unrelated to actual changes. This can mislead users into believing security-relevant changes were inspected, reducing trustworthiness and causing unsafe changes to pass review unnoticed.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The modern template uses { AUTHOR_NAME } with spaces, but the replacement logic later only substitutes {AUTHOR_NAME} without spaces. This directly contradicts the apparent template intent that the generated README should include the resolved author name, so the placeholder will remain unreplaced in output.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The script hard-codes lang="en" in both generated HTML variants, which imposes a specific language/locale on all outputs. There is no option for users to select another locale and no documented reason that the skill must be English-only.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
97% confidence
Finding

The heredoc at L39-L170 interpolates $TAGS_TAG_LINE at L46 before the variable is assigned at L173-L177. This contradicts the script's documented usage at L4 suggesting tag support, because provided tags are never actually included in the generated blog content.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.