CVE-2019-14806
Description
Pallets Werkzeug before 0.15.3, when used with Docker, has insufficient debugger PIN randomness because Docker containers share the same machine id.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Werkzeug's debugger PIN is insufficiently random in Docker due to shared machine IDs, allowing remote code execution.
Vulnerability
Werkzeug provides an interactive debugger that can be enabled in development environments. The debugger requires a PIN to prevent unauthorized access. However, prior to version 0.15.3, the PIN generation relied on the machine ID (/etc/machine-id or /proc/sys/kernel/random/boot_id) and MAC addresses. In Docker containers, all containers on the same host share the same machine ID, making the PIN predictable across containers [1][4].
Exploitation
An attacker who can trigger an error in a Werkzeug-based application (e.g., by sending a malformed request) may be presented with the debugger console. Without a properly randomized PIN, the attacker can brute-force or guess the PIN due to the reduced entropy. No authentication is required beyond knowing the shared identifier [3].
Impact
Gaining access to the debugger console allows arbitrary Python code execution on the server. This can lead to full compromise of the application and underlying host, including data theft, privilege escalation, or further lateral movement [2].
Mitigation
The vulnerability is fixed in Werkzeug version 0.15.3, which incorporates additional entropy sources (e.g., a private key-based seed) to make the PIN unique per container. Users should upgrade immediately. For containers, it is also recommended to avoid running the debugger in production [1].
AI Insight generated on May 22, 2026. Synthesized from this CVE's description and the cited reference URLs; citations are validated against the source bundle.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
werkzeugPyPI | < 0.15.3 | 0.15.3 |
Affected products
17- Pallets/Werkzeugdescription
- ghsa-coords16 versionspkg:pypi/werkzeugpkg:rpm/opensuse/python-Werkzeug&distro=openSUSE%20Leap%2015.0pkg:rpm/opensuse/python-Werkzeug&distro=openSUSE%20Leap%2015.1pkg:rpm/opensuse/python-Werkzeug&distro=openSUSE%20Tumbleweedpkg:rpm/opensuse/python-Werkzeug-doc&distro=openSUSE%20Leap%2015.0pkg:rpm/opensuse/python-Werkzeug-doc&distro=openSUSE%20Leap%2015.1pkg:rpm/suse/python-Werkzeug&distro=HPE%20Helion%20OpenStack%208pkg:rpm/suse/python-Werkzeug&distro=SUSE%20Linux%20Enterprise%20Module%20for%20Basesystem%2015pkg:rpm/suse/python-Werkzeug&distro=SUSE%20Linux%20Enterprise%20Module%20for%20Basesystem%2015%20SP1pkg:rpm/suse/python-Werkzeug&distro=SUSE%20Linux%20Enterprise%20Module%20for%20Package%20Hub%2015pkg:rpm/suse/python-Werkzeug&distro=SUSE%20Linux%20Enterprise%20Module%20for%20Package%20Hub%2015%20SP1pkg:rpm/suse/python-Werkzeug&distro=SUSE%20Linux%20Enterprise%20Module%20for%20Public%20Cloud%2012pkg:rpm/suse/python-Werkzeug&distro=SUSE%20OpenStack%20Cloud%208pkg:rpm/suse/python-Werkzeug&distro=SUSE%20OpenStack%20Cloud%209pkg:rpm/suse/python-Werkzeug&distro=SUSE%20OpenStack%20Cloud%20Crowbar%208pkg:rpm/suse/python-Werkzeug&distro=SUSE%20OpenStack%20Cloud%20Crowbar%209
< 0.15.3+ 15 more
- (no CPE)range: < 0.15.3
- (no CPE)range: < 0.12.2-lp150.2.3.1
- (no CPE)range: < 0.14.1-lp151.2.3.1
- (no CPE)range: < 2.0.1-1.2
- (no CPE)range: < 0.12.2-lp150.2.3.1
- (no CPE)range: < 0.14.1-lp151.2.3.1
- (no CPE)range: < 0.12.2-3.3.1
- (no CPE)range: < 0.12.2-3.3.1
- (no CPE)range: < 0.14.1-6.3.1
- (no CPE)range: < 0.12.2-3.3.1
- (no CPE)range: < 0.14.1-6.3.1
- (no CPE)range: < 0.12.2-10.10.1
- (no CPE)range: < 0.12.2-3.3.1
- (no CPE)range: < 0.14.1-3.3.1
- (no CPE)range: < 0.12.2-3.3.1
- (no CPE)range: < 0.14.1-3.3.1
Patches
100bc43b1672eunique debugger pin in Docker containers
2 files changed · +15 −0
CHANGES.rst+2 −0 modified@@ -20,6 +20,8 @@ Unreleased (:issue:`1510`) - The debugger detects cycles in chained exceptions and does not time out in that case. (:issue:`1536`) +- When running the development server in Docker, the debugger security + pin is now unique per container. Version 0.15.2
src/werkzeug/debug/__init__.py+13 −0 modified@@ -67,6 +67,19 @@ def get_machine_id(): return rv def _generate(): + # docker containers share the same machine id, get the + # container id instead + try: + with open("/proc/self/cgroup") as f: + value = f.readline() + except IOError: + pass + else: + value = value.strip().partition("/docker/")[2] + + if value: + return value + # Potential sources of secret information on linux. The machine-id # is stable across boots, the boot id is not for filename in "/etc/machine-id", "/proc/sys/kernel/random/boot_id":
Vulnerability mechanics
Generated on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
9- lists.opensuse.org/opensuse-security-announce/2019-09/msg00034.htmlghsavendor-advisoryx_refsource_SUSEWEB
- lists.opensuse.org/opensuse-security-announce/2019-09/msg00047.htmlghsavendor-advisoryx_refsource_SUSEWEB
- github.com/advisories/GHSA-gq9m-qvpx-68hcghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2019-14806ghsaADVISORY
- github.com/pallets/werkzeug/blob/7fef41b120327d3912fbe12fb64f1951496fcf3e/src/werkzeug/debug/__init__.pyghsax_refsource_MISCWEB
- github.com/pallets/werkzeug/commit/00bc43b1672e662e5e3b8cecd79e67fc968fa246ghsax_refsource_MISCWEB
- github.com/pypa/advisory-database/tree/main/vulns/werkzeug/PYSEC-2019-140.yamlghsaWEB
- palletsprojects.com/blog/werkzeug-0-15-3-releasedghsaWEB
- palletsprojects.com/blog/werkzeug-0-15-3-released/mitrex_refsource_MISC
News mentions
0No linked articles in our index yet.