☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Python logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H 🐛 CWE-770
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-97689

CVE-2026-97689 Resource Exhaustion in urllib3
📅 PUBLISHED: 2026-09-29 00:00 UTC 🔄 UPDATED: 2026-10-13 23:16 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: CONFIRMED — 3+ distinct origins confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.29%
👁️
0.29% probability
7.3× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Global License: Open Source
Affected: Urllib3 — upgrade to patched release
CVSS VECTOR BREAKDOWN 7.5
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: N Confidentiality None
I: N Integrity None
A: H Availability High
7.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-97689 is a denial-of-service (DoS) vulnerability in the Python urllib3 HTTP client library. It affects versions from 1.10.3 up to (but not including) 2.8.0, where the HTTPResponse.read_chunked and HTTPResponse.stream methods allocate unbounded memory when processing malformed chunked transfer encoding responses. A malicious or compromised HTTP server can exploit this flaw to exhaust client-side process memory, leading to application crashes or resource exhaustion.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Technical Analysis

The vulnerability resides in urllib3's HTTP chunked transfer encoding parser. Per the NVD description, when a server responds with Transfer-Encoding: chunked, the client's streaming chunk parser reads the chunk-size field by buffering bytes until it encounters a newline (\n) or end-of-file (EOF). There is no maximum length bound applied to this buffering operation.

Specifically, the methods HTTPResponse.read_chunked and HTTPResponse.stream are affected. A malicious server can send a Transfer-Encoding: chunked response and then transmit a very long run of bytes without ever sending a newline character. Because the parser must buffer the entire chunk-size line to determine where the chunk data begins, it will continue to allocate memory for these bytes indefinitely. This results in unbounded memory allocation in the client process.

The root cause maps to CWE-770 (Allocation of Resources Without Limits or Throttling). The attack is network-based and requires no authentication or user interaction. The vulnerability is triggered solely by the server's response, meaning any application using an affected urllib3 version to make HTTP requests to external or untrusted endpoints is potentially vulnerable.

The issue is fixed in version 2.8.0, where a length bound is presumably enforced on the chunk-size field buffering. No public proof-of-concept (PoC) or exploit code is available, and the CVSS vector is not provided by NVD, but the impact is rated as high availability due to memory exhaustion.

Exploitation Scenarios

  1. Reconnaissance/target identification: An attacker identifies a victim application or service that uses an affected version of urllib3 (1.10.3 to <2.8.0) to make outbound HTTP requests. This could be a web application, microservice, or any Python-based client that fetches resources from URLs controlled or influenced by the attacker.

  2. Triggering the flaw class: The attacker controls or compromises an HTTP server that the victim client connects to. The server responds to an HTTP request with a header Transfer-Encoding: chunked. It then begins sending a response body consisting of a very long sequence of bytes without a newline character. This causes the client's chunk parser to buffer the incomplete chunk-size line indefinitely. The vulnerability class is a resource exhaustion / denial-of-service through malformed input handling.

  3. Payload/execution method at the vulnerability-class level: The "payload" is simply a stream of bytes (no newline) sent after the chunked transfer encoding header. No code execution is required; the attack relies on the client's parser behavior. The attacker can maintain the connection and continue sending bytes, causing the client process's memory usage to grow until it crashes, becomes unresponsive, or is killed by the operating system's out-of-memory (OOM) killer.

  4. Post-exploitation impact: Successful exploitation results in a denial of service on the client side. The affected process may crash, hang, or consume excessive system memory, potentially affecting other processes on the same host. In a multi-tenant or containerized environment, this could lead to broader service disruption. No confidentiality or integrity impact is expected.

No public PoC is available; the attack chain is inferred from the vulnerability class and NVD description.

Impact Assessment

The vulnerability allows a remote, unauthenticated attacker to cause a denial of service on systems using affected urllib3 versions. The CVSS v3.1 vector (as estimated) indicates network attack vector (AV:N), low attack complexity (AC:L), no privileges required (PR:N), no user interaction (UI:N), and high availability impact (A:H). Confidentiality and integrity impacts are none. The blast radius includes any application, service, or script that uses urllib3 to make HTTP requests to untrusted or attacker-controlled endpoints. Given the widespread use of urllib3 in Python ecosystems (including as a dependency of requests), the potential impact is broad. However, exploitation requires the attacker to control the server side of the HTTP communication, which may limit scenarios to malicious external services, compromised upstreams, or man-in-the-middle positions.

Detection Guidance

Sigma Rule

title: urllib3 Unbounded Memory Allocation via Malformed Chunked Encoding
id: 3f8a1c2e-5b7d-4a9f-8c3e-1d2f4a6b8c9e
status: experimental
description: Detects potential exploitation of CVE-2026-97689 where a server sends a very long unterminated chunk-size line in a chunked transfer encoding response, leading to unbounded memory allocation in urllib3 clients.
author: Threat Intelligence
date: 2026-01-01
logsource:
  category: application
  product: python
  service: urllib3
detection:
  selection:
    EventID: 1001  # Hypothetical application log event for HTTP response parsing errors
    Message|contains: 'chunked'
    Message|contains: 'newline'
  condition: selection
fields:
  - Message
  - SourceIP
  - DestinationIP
falsepositives:
  - Legitimate large chunked responses with delayed newlines (rare)
level: high

YARA Rule

rule CVE_2026_97689_urllib3_Memory_Exhaustion
{
    meta:
        description = "Detects Python scripts or binaries that may be vulnerable to CVE-2026-97689"
        author = "Threat Intelligence"
        date = "2026-01-01"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-97689"
        severity = "high"
    strings:
        $s1 = "read_chunked" ascii wide nocase
        $s2 = "HTTPResponse" ascii wide nocase
        $s3 = "urllib3" ascii wide nocase
        $s4 = "Transfer-Encoding" ascii wide nocase
    condition:
        (uint16(0) == 0x5A4D or uint32(0) == 0x464C457F) and  // PE or ELF
        any of ($s1, $s2, $s3) and $s4
}

Suricata IDS Rule

alert tcp any any -> any any (msg:"CVE-2026-97689 urllib3 Unbounded Memory Allocation via Chunked Encoding"; flow:to_client,established; content:"Transfer-Encoding|3a| chunked"; nocase; content:"|0a|"; distance:0; within:10; pcre:"/Transfer-Encoding\x3a\s*chunked\r\n\r\n[^\n]{10000,}/i"; sid:1000001; rev:1;)

Note: This rule attempts to detect a chunked response with a very long initial line without newline. Due to TCP stream reassembly limitations, a more robust detection would require stateful inspection.

Elastic Detection

sequence by process.entity_id
  [network where network.protocol == "http" and http.response.headers contains "Transfer-Encoding: chunked"]
  [network where network.protocol == "http" and length(http.response.body) > 1000000 and not http.response.body contains "\n"]

Splunk SPL Query

index=proxy OR index=network sourcetype=http
| search "Transfer-Encoding: chunked"
| rex field=http_response_body "(?<chunk_line>[^\n]+)"
| where len(chunk_line) > 10000
| stats count by src_ip, dest_ip, url
| where count > 0

Wazuh OSSEC Rule

<group name="urllib3,CVE-2026-97689,">
  <rule id="100100" level="12">
    <decoded_as>json</decoded_as>
    <field name="event_type">http_response</field>
    <match>Transfer-Encoding: chunked</match>
    <regex>[^\n]{10000,}</regex>
    <description>CVE-2026-97689: Potential urllib3 unbounded memory allocation via malformed chunked encoding</description>
    <mitre>
      <id>T1190</id>
    </mitre>
  </rule>
</group>

Mitigation & Patch Guidance

Patch confidence: 0/4 (UNPATCHED — no patch evidence from any tracked source).

  1. Immediate mitigations:

    • Avoid making HTTP requests to untrusted or user-controlled endpoints using affected urllib3 versions.
    • Implement network-level filtering or application-level timeouts to limit the duration of HTTP responses.
    • Monitor client process memory usage for anomalies when communicating with external servers.
    • If possible, use a reverse proxy or HTTP client with built-in response size limits.
  2. Patch/upgrade steps:

    • Upgrade urllib3 to version 2.8.0 or later. This version contains the fix for the unbounded memory allocation.
    • For applications using requests, upgrade to a version that depends on urllib3 >= 2.8.0.
    • Verify the upgrade by checking pip show urllib3 or equivalent.
  3. Long-term hardening:

    • Enforce strict limits on HTTP response sizes and header lengths at the application or proxy level.
    • Adopt a security-focused dependency management process to track CVEs in critical libraries like urllib3.
    • Consider using a language or library with built-in protections against unbounded memory allocation in protocol parsers.
    • Conduct regular security assessments of third-party dependencies.

References

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

product:"urllib3"
title:"urllib3"
product:"urllib3" "1.10.3"
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-97689/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.