Cloudanix VulnDB

CVE-2025-69225

Medium · 5.3

AIOHTTP has unicode match groups in regexes for ASCII protocol elements

CVSS

5.3

EPSS

0.3%

Published

Jan 5, 2026

CISA due date

—

Cloudanix analysis

Next patch cycle SSVC: Track

Some web services may mishandle specially crafted download-range requests, which could cause unexpected errors or service disruption until the affected software is updated.

Chainable
Exploitation
Remote Unauthenticated
Attacker needs
None
Complexity
Moderate
Impact
Data Exposure
Component
Library
Class
Improper Input Validation
Remediation
Upgrade
Effort
Medium
Patch risk
Low

What it actually does

This is an improper input validation issue in HTTP Range header parsing: the parser accepts non-ASCII digit characters as decimal numbers even though HTTP byte-range syntax is expected to use ASCII digits. A remote client can send crafted Range headers containing Unicode decimal characters, causing the application or intermediary stack to treat an otherwise invalid header as a valid byte range. The most likely technical effects are inconsistent request handling, bypass of validation logic that only expects ASCII digits, unexpected 206 Partial Content responses, application errors, or limited denial-of-service/resource consumption depending on how the affected component uses parsed ranges. There is no indication from the provided data that this enables code execution or privilege escalation.

Why it matters to the business

Internet-facing services that process HTTP Range requests through affected aiohttp or packaged Linux/Debian components may be exposed to malformed requests that produce unexpected behavior, errors, or availability impact. The severity is moderate, EPSS is currently low, it is not listed in CISA KEV, and no mature public exploit is reported, so this should generally be treated as routine patching unless the affected service is highly exposed, performance-sensitive, or depends heavily on partial-content delivery such as file downloads, media streaming, object serving, or API gateways.

How an attack unfolds

An attacker identifies an HTTP endpoint backed by an affected parser and sends requests containing a Range header such as a byte range expressed with Unicode decimal characters instead of ASCII digits. A compliant parser should reject or ignore the malformed Range header, but the vulnerable parser may interpret those characters as valid decimals. If upstream proxies, WAFs, caches, application code, and the backend parser disagree on whether the header is valid, the attacker may be able to trigger inconsistent behavior such as unexpected partial responses, validation bypass, excessive range-processing work, or application exceptions. Exploitation does not require authentication if the affected endpoint is public, but the practical impact depends on the application’s Range handling and surrounding infrastructure.

How to fix it

Upgrade affected components to fixed versions. Based on the provided fixed-version data: Debian 11 should be updated to linux package version 5.10.113-1 or later; Debian 12 and Debian 13 should be updated to linux package version 5.17.3-1 or later; aio-libs/aiohttp Git users should include commit 41f01ed680b7efc8f97677df45731b80328aad6c or a release that contains it. Where immediate patching is not possible, add compensating controls at the reverse proxy, WAF, load balancer, or application edge to reject or strip Range headers that contain anything other than RFC-compliant ASCII syntax, especially non-ASCII decimal characters. For services that do not require partial-content support, disable or drop the Range header entirely. Ensure caches and upstream proxies apply the same validation behavior as the backend to avoid inconsistent interpretation.

How to confirm the fix worked

Confirm package and dependency versions with the organization’s standard asset, package, and software composition analysis tooling. For aiohttp source deployments, verify that commit 41f01ed680b7efc8f97677df45731b80328aad6c or a later fixed commit is present. Functionally test representative endpoints by sending Range headers with non-ASCII digits and verify that the service rejects the request, ignores the malformed Range header, or returns a safe 4xx response rather than treating it as a valid byte range. Also verify that reverse proxies, WAFs, application servers, and backend services behave consistently. Regression-test legitimate ASCII Range requests such as 'Range: bytes=0-99' to ensure normal partial-content functionality still works where required.

Typical attack path

  1. Discover an HTTP service or application using an affected aiohttp/parser version or affected Debian package.
  2. Identify endpoints that accept or act on HTTP Range headers, such as file download, static content, media, backup, or large-object endpoints.
  3. Send crafted requests with Range headers containing non-ASCII decimal digits, for example Arabic-Indic, Extended Arabic-Indic, Devanagari, or Fullwidth digits.
  4. Observe whether the service returns 206 Partial Content, 4xx errors, 5xx errors, abnormal latency, or behavior that differs from upstream controls or caches.
  5. Repeat or automate crafted requests to cause inconsistent behavior, bypass Range-header filtering, or create availability pressure if the application performs expensive range processing.

How to detect it

Review HTTP access logs, reverse-proxy logs, WAF logs, CDN logs, application logs, and error traces for requests containing a Range header with Unicode/non-ASCII decimal digits. Focus on endpoints returning 206 Partial Content, 400/416 client errors, 500-series errors, abnormal response sizes, or elevated latency after malformed Range requests. Look for repeated probing across many paths, user agents, or source IPs, especially against file download, static asset, media, and large-object endpoints. If full headers are not logged, temporarily enable safe header logging for Range on exposed services or use WAF telemetry to capture malformed Range attempts. Correlate suspected requests with application exceptions in Range parsing, unexpected partial response generation, worker restarts, CPU spikes, or increased upstream timeout errors. No named threat actors, ransomware campaigns, or KEV exploitation are indicated by the provided data.

  • Range: bytes=٠-
  • Range: bytes=۰-
  • Range: bytes=०-
  • Range: bytes=0-
  • Range: bytes=١-٢
  • Range: bytes=۱-۲
  • Range: bytes=१-२
  • Range: bytes=1-2
  • Range: bytes=٠-٩
  • Range: bytes=۰-۹
  • Range: bytes=०-९
  • Range: bytes=0-9
  • (?i)Range:\s*bytes=.*[\u0660-\u0669]
  • (?i)Range:\s*bytes=.*[\u06F0-\u06F9]
  • (?i)Range:\s*bytes=.*[\u0966-\u096F]
  • (?i)Range:\s*bytes=.*[\uFF10-\uFF19]

What your security team should do

  • Inventory internet-facing and internal HTTP services that use aiohttp or affected Debian packages and prioritize externally exposed file-serving, media, object-download, and API gateway workloads.
  • Apply the fixed Debian package versions or aiohttp commit/release during the next normal patch cycle; accelerate patching for high-traffic public services that rely on Range processing.
  • Add WAF or reverse-proxy rules to reject Range headers containing non-ASCII characters, multiple unexpected ranges, or malformed byte-range syntax.
  • Enable logging of request headers, response status, response size, and upstream error details for endpoints that process Range requests, subject to privacy and retention policies.
  • Search historical HTTP access logs for non-ASCII digits in Range headers and investigate clusters of 4xx/5xx responses, unusual 206 responses, or repeated malformed requests from the same sources.
  • Where Range support is unnecessary, strip the Range header at the edge to reduce attack surface.

The record

The parser allows non-ASCII decimals to be present in the Range header.

Affected packages

Ecosystem Package Introduced Fixed
PyPI aiohttp 0 3.13.3
Chainguard airflow-2 0 2.11.0-r19
Chainguard airflow-2-bitnami-compat 0 2.11.0-r19
Chainguard airflow-2-compat 0 2.11.0-r18
Chainguard airflow-2-compat 0 2.11.0-r19
Chainguard airflow-2-iamguarded-compat 0 2.11.0-r18
Chainguard airflow-2-iamguarded-compat 0 2.11.0-r19
Chainguard airflow-3-compat 0 3.1.5-r1
Chainguard airflow-3-iamguarded-compat 0 3.1.5-r1
Chainguard airflow-core-2 0 2.11.0-r11
Chainguard airflow-core-2-compat 0 2.11.0-r10
Chainguard airflow-core-2-oci-entrypoint 0 2.11.0-r10
Chainguard apache-beam-python-3.11-sdk 0 2.70.0-r1
Chainguard authentik 0 2025.10.3-r3
Chainguard authentik-fips 0 2025.10.3-r1
Chainguard authentik-go-server 0 2025.10.3-r3
Chainguard authentik-go-server-fips 0 2025.10.3-r0
Chainguard awx 0 24.6.1-r23
Chainguard checkov 0 3.2.499-r0
Chainguard dask-kubernetes 0 2025.7.0-r4
Chainguard gitaly-config-18.5 0 18.5.5-r0
Chainguard gitaly-config-18.6 0 18.6.2-r0
Chainguard gitaly-config-18.7 0 18.7.0-r0
Chainguard gitlab-base-18.5 0 18.5.4-r0
Chainguard gitlab-base-18.6 0 18.6.3-r0
Chainguard gitlab-base-18.7 0 18.7.0-r0
Chainguard gitlab-base-fips-18.5 0 18.5.4-r1
Chainguard gitlab-base-fips-18.6 0 18.6.3-r0
Chainguard gitlab-base-fips-18.7 0 18.7.0-r0
Chainguard gitlab-certificates-18.5 0 18.5.4-r0
Chainguard gitlab-certificates-18.6 0 18.6.2-r0
Chainguard gitlab-certificates-18.7 0 18.7.0-r0
Chainguard gitlab-cfssl-self-sign-scripts-18.5 0 18.5.4-r0
Chainguard gitlab-cfssl-self-sign-scripts-18.6 0 18.6.2-r0
Chainguard gitlab-cfssl-self-sign-scripts-18.7 0 18.7.1-r0
Chainguard gitlab-cng-18.5 0 18.5.4-r0
Chainguard gitlab-cng-18.6 0 18.6.3-r0
Chainguard gitlab-cng-18.7 0 18.7.0-r0
Chainguard gitlab-cng-fips-18.5 0 18.5.4-r1
Chainguard gitlab-cng-fips-18.6 0 18.6.3-r0
Chainguard gitlab-cng-fips-18.7 0 18.7.1-r0
Chainguard gitlab-container-registry-18.5 0 18.5.4-r0
Chainguard gitlab-container-registry-18.6 0 18.6.2-r0
Chainguard gitlab-container-registry-18.7 0 18.7.0-r0
Chainguard gitlab-container-registry-fips-18.5 0 18.5.4-r1
Chainguard gitlab-container-registry-fips-18.6 0 18.6.2-r1
Chainguard gitlab-container-registry-fips-18.7 0 18.7.0-r0
Chainguard gitlab-container-registry-scripts-18.5 0 18.5.4-r0
Chainguard gitlab-container-registry-scripts-18.6 0 18.6.2-r0
Chainguard gitlab-container-registry-scripts-18.7 0 18.7.0-r0
Chainguard gitlab-exporter-18.5 0 18.5.4-r0
Chainguard gitlab-exporter-18.6 0 18.6.2-r0
Chainguard gitlab-exporter-18.7 0 18.7.0-r0
Chainguard gitlab-exporter-scripts-18.5 0 18.5.4-r0
Chainguard gitlab-exporter-scripts-18.6 0 18.6.2-r0
Chainguard gitlab-exporter-scripts-18.7 0 18.7.0-r0
Chainguard gitlab-gitaly-scripts-18.5 0 18.5.5-r0
Chainguard gitlab-gitaly-scripts-18.6 0 18.6.2-r0
Chainguard gitlab-gitaly-scripts-18.7 0 18.7.0-r0
Chainguard gitlab-logger-18.5 0 18.5.5-r0
Chainguard gitlab-logger-18.6 0 18.6.2-r0
Chainguard gitlab-logger-18.7 0 18.7.0-r0
Chainguard gitlab-logger-fips-18.5 0 18.5.4-r1
Chainguard gitlab-logger-fips-18.6 0 18.6.2-r1
Chainguard gitlab-logger-fips-18.7 0 18.7.0-r0
Chainguard gitlab-pages-scripts-18.5 0 18.5.5-r0
Chainguard gitlab-pages-scripts-18.6 0 18.6.2-r0
Chainguard gitlab-pages-scripts-18.7 0 18.7.0-r0
Chainguard gitlab-rails-scripts-18.5 0 18.5.5-r0
Chainguard gitlab-rails-scripts-18.6 0 18.6.3-r0
Chainguard gitlab-rails-scripts-18.7 0 18.7.1-r0
Chainguard gitlab-rails-scripts-fips-18.5 0 18.5.4-r1
Chainguard gitlab-rails-scripts-fips-18.6 0 18.6.2-r1
Chainguard gitlab-rails-scripts-fips-18.7 0 18.7.0-r0
Chainguard gitlab-shell-18.5 0 18.5.5-r0
Chainguard gitlab-shell-18.6 0 18.6.2-r0
Chainguard gitlab-shell-18.7 0 18.7.1-r0
Chainguard gitlab-shell-fips-18.5 0 18.5.4-r1
Chainguard gitlab-shell-fips-18.6 0 18.6.2-r1
Chainguard gitlab-shell-fips-18.7 0 18.7.1-r0
Chainguard gitlab-shell-scripts-18.5 0 18.5.5-r0
Chainguard gitlab-shell-scripts-18.6 0 18.6.2-r0
Chainguard gitlab-shell-scripts-18.7 0 18.7.0-r0
Chainguard gitlab-sidekiq-ce-18.5 0 18.5.4-r0
Chainguard gitlab-sidekiq-ce-18.6 0 18.6.2-r0
Chainguard gitlab-sidekiq-ce-18.7 0 18.7.0-r0
Chainguard gitlab-sidekiq-ce-fips-18.5 0 18.5.4-r1
Chainguard gitlab-sidekiq-ce-fips-18.6 0 18.6.2-r1
Chainguard gitlab-sidekiq-ce-fips-18.7 0 18.7.1-r0
Chainguard gitlab-toolbox-ce-18.5 0 18.5.5-r0
Chainguard gitlab-toolbox-ce-18.6 0 18.6.3-r0
Chainguard gitlab-toolbox-ce-18.7 0 18.7.1-r0
Chainguard gitlab-toolbox-ce-fips-18.5 0 18.5.5-r0
Chainguard gitlab-toolbox-ce-fips-18.6 0 18.6.3-r0
Chainguard gitlab-toolbox-ce-fips-18.7 0 18.7.1-r0
Chainguard gitlab-webservice-ce-18.5 0 18.5.5-r0
Chainguard gitlab-webservice-ce-18.6 0 18.6.2-r0
Chainguard gitlab-webservice-ce-18.7 0 18.7.0-r0
Chainguard gitlab-webservice-ce-fips-18.5 0 18.5.4-r1
Chainguard gitlab-webservice-ce-fips-18.6 0 18.6.3-r0
Chainguard gitlab-webservice-ce-fips-18.7 0 18.7.1-r0
Chainguard gitlab-workhorse-scripts-18.5 0 18.5.5-r0
Chainguard gitlab-workhorse-scripts-18.6 0 18.6.2-r0
Chainguard gitlab-workhorse-scripts-18.7 0 18.7.0-r0
Chainguard gitlab-workhorse-scripts-fips-18.5 0 18.5.4-r1
Chainguard gitlab-workhorse-scripts-fips-18.6 0 18.6.3-r0
Chainguard gitlab-workhorse-scripts-fips-18.7 0 18.7.0-r0
Chainguard kubeflow-pipelines-visualization-server 0 2.15.0-r1
Chainguard open-webui 0 0.6.43-r1
Chainguard open-webui-compat 0 0.6.43-r0
Chainguard py3-cassandra-medusa 0 0.26.0-r3
Chainguard py3-cassandra-medusa-compat 0 0.26.0-r2
Chainguard py3-cassandra-medusa-compat 0 0.26.0-r3
Chainguard py3-vllm-cuda-12.4 0 0.13.0-r1
Chainguard py3.10-vllm-cuda-12.4 0 0.16.0-r1
Chainguard py3.11-text-generation-inference 0 3.3.7-r2
Chainguard py3.12-vllm-cuda-12.4 0 0.16.0-r1
Chainguard request-1276 0 0.27.0-r1
Chainguard request-1276-compat 0 0.27.0-r1
Chainguard text-generation-inference 0 3.3.7-r2
Chainguard text-generation-inference-compat 0 3.3.7-r2
Chainguard tritonserver-backend-vllm-cuda-12.9 0 25.9.0_git20251112-r7
Chainguard tritonserver-backend-vllm-meta-cuda-12.9 0 25.9.0_git20251112-r4
SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise Module for Public Cloud 15 SP4 python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise Module for Python 3 15 SP7 python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise Server 15 SP4-LTSS python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise Server 15 SP5-LTSS python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise Server 15 SP6-LTSS python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP4 python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP5 python-aiohttp 0 3.9.3-150400.10.36.1
SUSE:Linux Enterprise Server for SAP Applications 15 SP6 python-aiohttp 0 3.9.3-150400.10.36.1
Wolfi airflow-3-compat 0 3.1.5-r1
Wolfi airflow-3-iamguarded-compat 0 3.1.5-r1
Wolfi checkov 0 3.2.499-r0
Wolfi dask-kubernetes 0 2025.7.0-r4
Wolfi kubeflow-pipelines-visualization-server 0 2.15.0-r1
Wolfi open-webui 0 0.6.43-r1
Wolfi open-webui-compat 0 0.6.43-r0
Wolfi py3-cassandra-medusa 0 0.26.0-r3
Wolfi py3-cassandra-medusa-compat 0 0.26.0-r2
Wolfi py3-cassandra-medusa-compat 0 0.26.0-r3
openSUSE:Leap 15.6 python-aiohttp 0 3.9.3-150400.10.36.1
openSUSE:Leap 16.0 python-Brotli 0 1.1.0-160000.3.1
openSUSE:Leap 16.0 python-aiohttp 0 3.11.16-160000.3.1
openSUSE:Tumbleweed python-aiohttp 0 3.13.3-1.1

Related vulnerabilities