github.com / scrapy
scrapy/ scrapy
Python·676 files·commit eb778e6·scanned 10d ago·cached ✓
15/100
LOW RISK
Minor findings consistent with the project type. Nothing reachable from install hooks.
score capped at 15 — 64,027+ stars — findings likely false positives
verdict accurate?
64,027 stars
Partial architecture graph
threat-state: lowlive
FINDINGS ░▒▓
criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.scrapy/utils/engine.py
try:
checks += [(test, eval(test))] # noqa: S307
except Exception as e:
checks += [(test, f"{type(e).__name__} (exception)")]+8criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.scrapy/utils/engine.py
try:
checks += [(test, eval(test))] # noqa: S307
except Exception as e:
checks += [(test, f"{type(e).__name__} (exception)")]+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.scrapy/commands/edit.py
"""
return subprocess.call([*shlex.split(editor), os.fspath(file_path)]) # noqa: S603
+4criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.scrapy/extensions/remote_control.py
try:
# eval() returns a coroutine if and only if the source used a top-level await,
# else it runs synchronously and returns None.
eval_result = eval(code_o...+8criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.scrapy/extensions/remote_control.py
try:
# eval() returns a coroutine if and only if the source used a top-level await,
# else it runs synchronously and returns None.
eval_result = eval(code_o...+7criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.scrapy/shell.py
if self.code:
print(eval(self.code, globals(), self.vars)) # noqa: S307
else:
# Detect interactive shell setting in scrapy.cfg+8criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.scrapy/shell.py
if self.code:
print(eval(self.code, globals(), self.vars)) # noqa: S307
else:
# Detect interactive shell setting in scrapy.cfg+7warningHigh-entropy string literalsFound 5 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.tests/utils/bases/download_handlers_http.py+3
warningHigh-entropy string literalsFound 11 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.tests/utils/bases/http_request.py+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.docs/conf.py+3
warningHigh-entropy string literalsFound 3 long strings with high Shannon entropy. This is common in obfuscated payloads that hide URLs, keys, or bytecode.scrapy/core/_http2/protocol.py+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.tests/spiders.py+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.tests/test_exporters.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.
468 files scanned @ eb778e6 | 8/25/2026 | heuristic scan — always review manually
risk by category
code execution25
network & exfiltration0
file system access0
obfuscation15
supply chain0
owasp / injection0
telemetry
files 468/676rules hit 14engine v5commit eb778e6
github
scrapy/scrapy
Scrapy, a fast high-level web crawling & scraping framework for Python.
64027
11921
6039d
676 files
468 scanned(69%)
eb778e6
architecture░▒▓
entry (0) flagged (45) pkg (414)
814 nodes · 3851 edgesscroll to zoom · click node to jump to finding