werkzeug 3.1.9
- Source
- https://github.com/pallets/werkzeug
- Tag scanned
3.1.9- Compared with
3.1.8(0 signals introduced since)- Files
- 229 scanned, 46 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 0 warn · 6 info
- Scan time
- 7.5 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 6 of 6 warn and critical signals; 6 demoted to info.
- Disclude version
- 4.1.0
- Scanned (UTC)
- 2026-10-22 04:00
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
likely benign exec of user-entered code in the Werkzeug debugger's interactive console.
Reasoning
This exec runs code entered into the Werkzeug interactive debugger console against the frame's locals. That is the documented purpose of the debugger, which is gated by a PIN and is only meant for development. The pattern is dynamic execution, but it is a visible, intended feature rather than hidden obfuscation or a dropper.
-
= =likely benign Reads the caller's frame locals to render them in the debugger's dump output.Reasoning
sys._getframe(1).f_locals is read to dump local variables for the debugger's object-inspection output. It is a plain, expected use of frame introspection in a debugging helper, with no exfiltration or hidden behavior visible.
-
: = return # type: ignorelikely benign exec of internally generated code to build a routing converter function.Reasoning
This exec runs a code object that the routing module generates from its own internal template (the converter function built from rule definitions). The inputs are library-controlled, not attacker-supplied network or file data, and the result is simply looked up by name. This is a known code-generation technique in routing.
-
= returnlikely benign compile of an internally generated AST module for the routing code generator.Reasoning
compile is applied to a module AST built by the routing code generator, using a fixed filename of '<werkzeug routing>'. It is part of the same internal codegen path as the exec above. The source is not external input, so there is no sign of malicious intent.
-
likely benign Dynamic import inside werkzeug's import_string utility, which loads modules by dotted name.
Reasoning
This __import__ is inside import_string, a standard helper that imports a module from a dotted name supplied by the calling developer. The call is the normal way this utility works, so the 'critical' severity reflects the generic dynamic-import signal and not real malicious behavior.
-
, = = returnlikely benign Dynamic __import__ of a module split from a dotted path, followed by getattr to resolve an object.Reasoning
This __import__ call uses a module name split from a dotted import path in import_string, followed by getattr on the result. It is the standard fallback that resolves an object from a dotted path. The pattern is an ordinary dynamic-import idiom in a library helper.
Reproduce This Scan
Run disclude locally to verify. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.
&&