github.com / trailofbits
trailofbits/ skills
Python·1294 files·commit 9b28133·scanned 4d ago·cached ✓
25/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.
score capped at 25 — 6,720 stars — findings likely legitimate code patterns
verdict accurate?
19% file coverage
Research / educational context
threat-state: lowlive
FINDINGS ░▒▓
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..github/scripts/validate_plugin_metadata.py
"""Contents of `rel_path` at `ref`, or None when it did not exist there."""
result = subprocess.run(
["git", "show", f"{ref}:{rel_path}"],
cwd=repo_root,+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.plugins/static-analysis/skills/codeql/scripts/test_build_log.py
def _bash(script: str, cwd: Path) -> subprocess.CompletedProcess[str]:
return subprocess.run(
["bash", "-c", f'. "{BUILD_LOG}"\n{script}'],
cwd=cwd,+4criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.plugins/static-analysis/skills/codeql/scripts/test_shell_blocks.py
try:
compile(body, "<embedded>", "exec")
except SyntaxError as error:
pytest.fail(f"{origin} embeds Python that does not parse: {error}\n{body}")+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.plugins/static-analysis/skills/codeql/scripts/test_shell_blocks.py
cleaned = re.sub(r"<[A-Za-z0-9_ .-]+>", "PLACEHOLDER", source)
result = subprocess.run(["bash", "-n"], input=cleaned, capture_output=True, text=True)
if result.returncode != 0:...+4warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.plugins/zeroize-audit/tests/rust-regression/fixtures/dangerous_apis_src/positive.rs
fn wipe_secret(key: &mut SecretKey) {
unsafe { ptr::write_bytes(key as *mut SecretKey, 0, 1); }
}
+3criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.plugins/constant-time-analysis/ct_analyzer/script_analyzers.py
# Unpredictable timing
"eval": "eval() has unpredictable timing characteristics",
# Predictable randomness
"math.random": "Math.random() is predictable; use crypto.getR...+8criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.plugins/constant-time-analysis/ct_analyzer/script_analyzers.py
# Unpredictable timing
"eval": "eval() has unpredictable timing characteristics",
# Predictable randomness
"math.random": "Math.random() is predictable; use crypto.getR...+7warningRust unsafe blockunsafe blocks bypass Rust's memory safety guarantees. Malware uses them for raw pointer manipulation, shellcode injection, or calling dangerous foreign functions.plugins/constant-time-analysis/ct_analyzer/tests/triage_samples/triage_rust.rs
for i in 0..len {
unsafe {
if *received_tag.add(i) != *computed_tag.add(i) {
return 0;+3criticalFunction() constructor detectednew Function() is equivalent to eval() and can execute arbitrary code strings.plugins/insecure-defaults/tests/harness.js
const body = src.replace(/^export const meta/m, "const meta");
return new Function(
"agent",
"parallel",+5criticalFunction() constructor detectednew Function() is equivalent to eval() and can execute arbitrary code strings.plugins/semgrep-rule-variant-creator/tests/workflow-functions.test.mjs
function load(name, ...preamble) {
return new Function(`${preamble.join('\n')}\n${extract(name)}\nreturn ${name}`)()
}
+5criticalFunction() constructor detectednew Function() is equivalent to eval() and can execute arbitrary code strings.plugins/static-analysis/tests/codeql_build_harness.js
const body = src.replace(/^export const meta/m, "const meta");
return new Function("agent", "parallel", "phase", "log", "args", `return (async () => {\n${body}\n})()`);
}
+5warningExtremely long lines (>1000 chars)Very long lines in source files (not minified bundles) can hide malicious code..claude-plugin/marketplace.json+4
warningExtremely long lines (>1000 chars)Very long lines in source files (not minified bundles) can hide malicious code.plugins/fp-check/hooks/hooks.json+4
warningExtremely long lines (>1000 chars)Very long lines in source files (not minified bundles) can hide malicious code.plugins/trailmark/.claude-plugin/plugin.json+4
warningHigh-entropy string literalsFound 14 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode..github/scripts/validate_plugin_metadata.py+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order..github/scripts/validate_plugin_metadata.py+3
warningHigh-entropy string literalsFound 7 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.plugins/c-review/scripts/test_generate_sarif.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.plugins/rust-review/scripts/test_generate_sarif.py+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.plugins/static-analysis/skills/codeql/scripts/test_shell_blocks.py+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.plugins/yara-authoring/skills/yara-rule-authoring/scripts/test_yara_rules.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.
240 files scanned @ 9b28133 | 8/20/2026 | heuristic scan — always review manually
risk by category
code execution25
network & exfiltration0
file system access0
obfuscation15
supply chain2
owasp / injection0
telemetry
files 240/1294rules hit 22engine v5commit 9b28133
github
trailofbits/skills
Trail of Bits Claude Code skills for security research, vulnerability detection, and audit workflows
6720
580
222d
1294 files
240 scanned(19%)
9b28133
architecture░▒▓
entry (5) flagged (42) pkg (89)
214 nodes · 414 edgesscroll to zoom · click node to jump to finding