clawscan

clawhub:clawscan

View source
F
0/100

First Seen

Feb 18, 2026

Last Scanned

Feb 22, 2026

Findings

17

Score

0/100

HIGH 6
MEDIUM 4
LOW 7

Findings (17)

HIGH
Data transmission pattern
L28

Detects patterns indicating sensitive data being sent to external services

Exfiltrate data
FIX

Restrict file reading to the project directory and block outbound network calls that include file contents. Implement file path validation to prevent directory traversal.

FP?

Likely FP if the tool legitimately reads project files and displays them to the user locally, without sending data to external services.

HIGH
Node.js child process execution
L89

Detects Node.js child_process methods for command execution

child_process.exec(
FIX

Use execFile() or spawn() with explicit argument arrays instead of exec() with a shell string. Validate all inputs before passing to child_process methods.

FP?

Likely FP if the match is in a README code example or package.json script field that runs a well-known CLI tool (e.g., eslint, tsc).

HIGH
Read sensitive files and transmit externally
L90

Detects skills that both read sensitive credential files and send data to external services

Access to `~/.ssh/`, `~/.aws + POST to external
FIX

Block access to git credentials, SSH keys, and repository tokens. If git operations are needed, use scoped deploy keys and restrict the tool to specific repositories.

FP?

Likely FP if the match is documentation about git configuration (e.g., setting up git credentials helper) rather than code that reads and transmits them.

HIGH
Privilege escalation
L93

Detects privilege escalation patterns like setuid, chown root, or sudo with shell commands

setuid
FIX

Avoid depending on packages that could be subject to typosquatting or name confusion. Verify package ownership, check download counts, and audit the package source before adding dependencies.

FP?

Likely FP if the flagged package is a well-known, high-download-count package from a verified publisher.

HIGH
Zero-width character obfuscation
L445

Detects zero-width characters used to hide content

FIX

Remove hidden directives embedded in markdown, HTML comments, or encoded text. All agent-facing text should be explicit and visible in the skill definition.

FP?

Likely FP if the match is a standard markdown formatting pattern or HTML comment used for documentation rather than concealing directives.

HIGH
Private data read with code execution
L90

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

[reads_private_data] Access to `~/.ssh/`, `~/.aws + [executes_code] eval(
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.

MEDIUM
Cross-tool data leakage
L27

Detects patterns where credential or secret reads are combined with external data transmission

Read environment variables** | API key + POST | Where is data
FIX

Prevent credentials and sensitive data obtained by one MCP tool from being passed to other tools. Implement data isolation between tools and restrict cross-tool data flow for secrets.

FP?

Likely FP if the cross-tool data flow is intentional API authentication (e.g., a tool fetches an auth token that another tool uses for the same service).

MEDIUM
Shell subprocess with shell=True
L88

Detects subprocess calls with shell=True which enables shell injection

shell=True
FIX

Replace shell=True with shell=False and pass command arguments as a list. Validate and sanitize all inputs before passing to the shell.

FP?

Likely FP if the match is in documentation describing how subprocess works, or in a comment explaining shell risks rather than actual code.

MEDIUM
Python subprocess execution
L88

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.

MEDIUM
Base64 encode and send
L106

Detects base64 encoding of content followed by transmission

btoa + fetch(
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
Dynamic code evaluation
L151

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

eval(u
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
Shell subprocess with shell=True
L154

Detects subprocess calls with shell=True which enables shell injection

shell=True
FIX

Replace shell=True with shell=False and pass command arguments as a list. Validate and sanitize all inputs before passing to the shell.

FP?

Likely FP if the match is in documentation describing how subprocess works, or in a comment explaining shell risks rather than actual code.

LOW
Shell subprocess with shell=True
L156

Detects subprocess calls with shell=True which enables shell injection

subprocess.run(cmd, shell=True
FIX

Replace shell=True with shell=False and pass command arguments as a list. Validate and sanitize all inputs before passing to the shell.

FP?

Likely FP if the match is in documentation describing how subprocess works, or in a comment explaining shell risks rather than actual code.

LOW
Python subprocess execution
L156

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

subprocess.run(
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
Shell subprocess with shell=True
L194

Detects subprocess calls with shell=True which enables shell injection

shell=True
FIX

Replace shell=True with shell=False and pass command arguments as a list. Validate and sanitize all inputs before passing to the shell.

FP?

Likely FP if the match is in documentation describing how subprocess works, or in a comment explaining shell risks rather than actual code.

LOW
pip install arbitrary package
L334

Detects pip install of arbitrary packages that modify the host environment

pip install sk
FIX

Pin all pip packages to exact versions (e.g., pip install package==1.2.3). Use a requirements.txt or pyproject.toml with pinned versions and hash verification.

FP?

Likely FP if the match is in documentation showing how to install the skill's own PyPI package.

LOW
Mutable GitHub raw content reference
L453

Detects references to raw.githubusercontent.com on mutable branches like main/master

github.com/G0HEAD/skillguard/blob/main/patterns.json)
FIX

Replace GitHub raw.githubusercontent.com references with pinned commit SHAs instead of branch names (e.g., /commit-sha/file instead of /main/file). Branch references are mutable.

FP?

Likely FP if the raw GitHub URL points to a versioned release tag in a well-known repository, though even tags are technically mutable.