Skip to main content

Datadog dd-trace-py CVE-2026-116589

| EUVDEUVD-2026-110470 HIGH
Uncaught Exception (CWE-248)
2026-10-26 GitHub_M GHSA-p3m5-h5v9-vqj6
8.2
CVSS 4.0 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Identify app running dd-trace-py with IAST enabled
  2. Delivery
    Submit input containing lone surrogate character
  3. Exploit
    %-format operation invokes IAST modulo aspect
  4. Execution
    Unhandled encoding error aborts Python process
  5. Impact
    Service denial / interrupted work

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A10:2025 - Mishandling of Exceptional Conditions
ASVS 5.0
V16 - Security Logging and Error Handling Exception handling completeness
Exploitation Conditions

Three concrete conditions must all hold: (1) IAST must be explicitly enabled via DD_IAST_ENABLED=true - it is OFF by default, which is the single biggest limiting factor; (2) the monitored application code must apply an old-style %-string-formatting operation (e.g. 'template %s' % value) to attacker-controlled input - f-strings and str.format are not affected; (3) the attacker-supplied input must contain a value that the taint-tracking modulo aspect cannot process, specifically a lone UTF-16 surrogate character (e.g. \ud800) that fails native UTF-8 conversion. Affected builds are dd-trace-py 3.13.0 through 4.15.4 on Python applications. The attack needs no authentication or user interaction at the dd-trace layer (PR:N/UI:N), but the combination of a non-default security feature plus a specific vulnerable code pattern substantially limits realistic exposure.

Impact

The headline CVSS 4.0 base score of 8.2 (High) is driven entirely by availability impact (VA:H), with no confidentiality or integrity impact (VC:N/VI:N) - this is a pure denial-of-service, consistent with CWE-248 (uncaught exception). The vector shows AV:N/PR:N/UI:N (network-reachable, no authentication or user interaction at the dd-trace layer), which inflates the score, but AT:P signals a present attack requirement and the real-world exposure is heavily gated by two preconditions stated in the vendor advisory: IAST must be explicitly enabled (DD_IAST_ENABLED=true, which is NOT the default) and the monitored application must pass attacker-controlled input through an old-style %-formatting operation. The supporting signals point to modest real-world risk: EPSS is 0.33% (26th percentile), there is no CISA KEV listing, and the vuln.today Decision label is 'this_week' rather than act_now/emergency. This is therefore a genuine but non-emergency priority - a high-CVSS DoS whose practical reach is narrowed by a non-default configuration and a specific code pattern. The EPSS/KEV signals (low probability, no confirmed active exploitation) are consistent with each other and with the gated exploitation conditions; nothing here indicates widespread opportunistic exploitation. Note the input CVSS is 4.0 only - no CVSS 3.1 vector was supplied - and the 'Information Disclosure' tag contradicts the availability-only impact (see data_quality_flags).

Exploit ScenarioDerived

An attacker sends input containing a lone UTF-16 surrogate character (e.g. \ud800) to an application running a vulnerable dd-trace-py (3.13.0-4.15.4) with IAST enabled, where that input is rendered through an old-style '... %s' % value formatting operation. The IAST modulo taint-tracking aspect cannot UTF-8-encode the lone surrogate, raises an unhandled native error, and aborts the Python process, dropping in-flight work. No weaponized public exploit is published; the fix PR (#20786) includes a regression test that demonstrates the exact triggering input, but the advisory deliberately omits detailed reproduction steps.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
Patch available 0.3% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 28, 2026

Denial of service in the Datadog dd-trace-py Python APM client, versions 3.13.0 through 4.15.4, where the IAST instrumentation for old-style % string formatting fails to contain an internal error and can terminate the entire Python process, interrupting whatever work it was handling. Three conditions must all hold for exploitation: IAST must be explicitly enabled (DD_IAST_ENABLED=true, which is not the default), the monitored application must apply a %-formatting operation to attacker-controlled input, and that input must contain a value the taint-tracking modulo aspect cannot process - the vendor release note specifically identifies a lone UTF-16 surrogate character that fails native UTF-8 conversion. This is a pure availability issue with no confidentiality or integrity impact; the advisory withholds reproduction steps, and no public exploit or active exploitation has been identified at time of analysis (EPSS 0.33%, not in CISA KEV).

RemediationAI

Upgrade the ddtrace package to 4.15.5, the vendor-released fix (release tag https://github.com/DataDog/dd-trace-py/releases/tag/v4.15.5; fixes landed in PR https://github.com/DataDog/dd-trace-py/pull/20786 with follow-up https://github.com/DataDog/dd-trace-py/pull/20823, commits 69dc19853247434ceab83e0c1c4e279a2eb2a3f7 and ace972489b57dd020ff52b706bb548a354f2dd69). If upgrading cannot be scheduled immediately, the vendor documents two workarounds: disable IAST by setting DD_IAST_ENABLED=false - which removes the crash path but also eliminates all IAST vulnerability detection for that service - or rewrite % string interpolations that consume user input to use str.format or f-strings, which are not instrumented by the affected aspect but require touching application code and auditing every affected formatting site. Full details are in the GHSA advisory at https://github.com/DataDog/dd-trace-py/security/advisories/GHSA-p3m5-h5v9-vqj6.

Affected VersionsENISA

dd-trace-py 3.13.0, < 4.15.5

Affected Packages

pypi ddtrace fix: 4.15.5
euvd dd_trace_py fix: 4.15.5

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in pypi, euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

dd-trace-py is Datadog's Python APM and application security client, and its IAST (Interactive Application Security Testing) engine implements taint tracking in a native C++ extension (ddtrace/appsec/_iast/_taint_tracking). The affected code is the 'modulo aspect' (aspect_modulo.cpp, api_modulo_aspect), which intercepts the Python % operator to propagate taint ranges through string interpolation: it collects the tainted-object map for the candidate text and its parameters, computes text ranges, converts the candidate text to a native std::string, re-applies the modulo operation, and converts the escaped result back into tainted text. Because a lone surrogate such as \ud800 cannot be encoded to UTF-8, that native string conversion throws inside the aspect; before the fix this exception was not caught, so the error propagated out and aborted the Python process - the CWE-248 (uncaught exception) root cause. The patch in PR #20786 wraps the whole aspect body in the TRY_CATCH_ASPECT("modulo_aspect", return return_candidate_result(), ...) guard so a conversion failure falls back to returning the plain (untainted-annotation) result instead of terminating the interpreter, and adds regression coverage (test_modulo_with_tainted_lone_surrogate_parameter) alongside the release note fix-iast-modulo-surrogate-abort. Only the % operator path is instrumented this way; f-strings and str.format are not affected, and the flaw is reachable only when IAST is enabled and the tainted value actually flows into that formatting operation.

Know when Python gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 8.2 HIGH
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
vuln.today AI 7.5 HIGH

Pure DoS from a process abort, so A:H with C:N/I:N; attacker-controlled network input triggers it deterministically (AC:L, PR:N, UI:N), though exposure is gated by non-default IAST config.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
Present
Privileges Required
None
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

2
Patch available
Oct 26, 2026 - 22:03 EUVD
CVE Published
Oct 26, 2026 - 21:26 cve.org
HIGH 8.2

DescriptionCVE.org

Datadog dd-trace-py is the Datadog Python APM client. From 3.13.0 until 4.15.5, the IAST string-processing instrumentation does not properly handle certain internal errors while old-style % string formatting processes attacker-controlled input. An unhandled error can terminate the Python process and interrupt the work it is handling. Exploitation requires IAST to be enabled, which is not the default, and application code to apply the affected formatting operation to attacker-controlled input. This issue is fixed in version 4.15.5.

Executive ViewAI

Why It Matters

Datadog's Python APM client (dd-trace-py) versions 3.13.0 through 4.15.4, when IAST is explicitly enabled, can be crashed by attacker-controlled input containing lone UTF-16 surrogates, causing process termination. This affects only services that have opted into IAST and perform %-formatting on untrusted data, potentially disrupting application availability. Leadership should prioritize patch validation and configuration review to prevent availability incidents in affected services.

Business Impact: Medium
Compensating Controls

Apply vendor patch.

Threat Intelligence Overview

EPSS Score
0.3%
Top 74% exploitable
Prevalence
Medium
popular Python APM client, but vulnerable IAST feature is non-default
Threat Intel
1
1 source
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available Yes
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
Medium

Priority Score

41
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +41
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.

More in Python

View all
CVE-2025-24016 CRITICAL POC
9.9 Feb 10

Wazuh SIEM platform versions 4.4.0 through 4.9.0 contain an unsafe deserialization vulnerability in the DistributedAPI t

CVE-2025-27520 CRITICAL POC
9.8 Apr 04

BentoML version 1.4.2 and earlier contains an unauthenticated remote code execution vulnerability through insecure deser

CVE-2025-2945 CRITICAL POC
9.9 Apr 03

pgAdmin 4 contains critical remote code execution vulnerabilities in the Query Tool download and Cloud Deployment endpoi

CVE-2013-5093 MEDIUM POC
6.8 Sep 27

The renderLocalView function in render/views.py in graphite-web in Graphite 0.9.5 through 0.9.10 uses the pickle Python

CVE-2025-32375 CRITICAL POC
9.8 Apr 09

BentoML is a Python library for building online serving systems optimized for AI apps and model inference. Rated critica

CVE-2014-0224 HIGH POC
7.4 Jun 05

OpenSSL before 0.9.8za, 1.0.0 before 1.0.0m, and 1.0.1 before 1.0.1h does not properly restrict processing of ChangeCiph

CVE-2024-21644 HIGH POC
7.5 Jan 08

pyLoad download manager version prior to 0.5.0b3.dev77 exposes the Flask SECRET_KEY through an unauthenticated endpoint.

CVE-2026-33017 CRITICAL POC
9.3 Mar 17

Langflow (a visual LLM pipeline builder) contains a critical unauthenticated code execution vulnerability (CVE-2026-3301

CVE-2017-9462 HIGH POC
8.8 Jun 06

In Mercurial before 4.1.3, "hg serve --stdio" allows remote authenticated users to launch the Python debugger, and conse

CVE-2026-49869 CRITICAL POC
10.0 Jun 26

Unauthenticated remote code execution affects Kestra OSS (the open-source event-driven orchestration platform) prior to

CVE-2026-39987 CRITICAL POC
9.3 Apr 08

Unauthenticated remote code execution in Marimo ≤0.20.4 allows attackers to execute arbitrary system commands via the `/

CVE-2024-21645 MEDIUM POC
5.3 Jan 08

pyLoad is the free and open-source Download Manager written in pure Python. Rated medium severity (CVSS 5.3), this vulne

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy