DANGER
malware detected
github.com / sup3rus3r
sup3rus3r/ obsidian-ai
Python·296 files·commit 1213550·scanned 3d ago·cached ✓
70/100
DANGEROUS
Sensitive capability combinations reachable from entry points. Do not run without review.
This repository contains patterns associated with malware. Do NOT run this code.
verdict accurate?
threat-state: dangerouslive
FINDINGS ░▒▓
criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.backend/dag_executor.py
This is a plain string-substitution pass over a constrained grammar — no
eval(), no expression language — by design (see dag_executor design notes:
n8n's full JS-expression templating is a...+8criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.backend/dag_executor.py
This is a plain string-substitution pass over a constrained grammar — no
eval(), no expression language — by design (see dag_executor design notes:
n8n's full JS-expression templating is a...+7criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.backend/python_tool_runner.py
Tool code used to be exec()'d inside the server process, where it could read the
decrypted provider keys and the JWT/encryption secrets in os.environ, and could
hang or crash the server. Each call no...+7criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.backend/secret_placeholder.py
Syntax modeled on dag_executor.py's {{ nodes.<id>.output.<path> }}
interpolator — plain regex substitution, not eval()/an expression language,
for the same reasons documented there (injection surface,...+8criticalPython dynamic code executioneval(), exec() or compile() on untrusted input can execute arbitrary code. Common in Python malware for running obfuscated payloads.backend/secret_placeholder.py
Syntax modeled on dag_executor.py's {{ nodes.<id>.output.<path> }}
interpolator — plain regex substitution, not eval()/an expression language,
for the same reasons documented there (injection surface,...+7criticaleval() usage detectedeval() executes arbitrary code and is commonly used in malware to run obfuscated payloads fetched from remote servers.backend/web_tools.py
calculate deliberately does NOT use Python eval() — it walks a restricted
AST, allowlisting only numeric literals, arithmetic operators, and a small
math function table. Any other node (names, attrib...+8warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.frontend/app/(authenticated)/channels/[id]/page.tsx+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.frontend/components/dialogs/tool-dialog.tsx+3
warningFlattened or dead control flowDetected switch(true), dead if branches, or deeply nested ternaries — patterns used by obfuscators to hide execution order.frontend/components/playground/artifact-panel.tsx+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.
255 files scanned @ 1213550 | 10/26/2026 | heuristic scan — always review manually
risk by category
code execution25
network & exfiltration0
file system access0
obfuscation9
supply chain0
owasp / injection0
telemetry
files 255/296rules hit 10engine v7commit 1213550
github
sup3rus3r/obsidian-ai
Obsidian AI is an open-source platform that gives you a full visual interface for building, managing, and running AI agents — no SDKs, no boilerplate, no glue code required.
68
15
245d
296 files
255 scanned(86%)
1213550
architecture░▒▓
entry (1) flagged (8) pkg (311)
561 nodes · 1890 edgesscroll to zoom · click node to jump to finding