CVE-2026-34525
Medium · 5.3CVSS
5.3
EPSS
0.4%
Published
Apr 1, 2026
CISA due date
—
Cloudanix analysis
Some Python web services may accept confusing website-name information in requests, which can let an attacker trick the service into making wrong routing or link decisions.
- Exploitation
- Remote Unauthenticated
- Attacker needs
- None
- Complexity
- High
- Impact
- Data Tampering
- Component
- Web Framework
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Prior to aiohttp 3.13.4, the HTTP parser/server handling accepted requests containing more than one Host header instead of rejecting them as malformed. Because different HTTP components may choose different Host header instances, an attacker can create ambiguity between proxies, load balancers, caches, application routing logic, URL generation, redirect construction, and security checks that rely on the request host. The likely impact is integrity-related: host confusion, incorrect routing, poisoned links or redirects, cache-key inconsistencies, and bypass of host-based validation in applications built on affected aiohttp versions. The issue is remotely reachable over the network, requires no authentication, and has low observed exploitation likelihood based on the provided EPSS value, but practical exploitability depends heavily on how aiohttp is deployed behind intermediaries and how the application uses the Host header.
Why it matters to the business
Organizations running affected aiohttp-based services could have application behavior manipulated through malformed HTTP requests, potentially causing users to be redirected to attacker-controlled domains, receiving poisoned cached content, or bypassing host-based access controls in specific deployment patterns. The operational risk is moderate rather than broadly catastrophic: exploitation usually requires a favorable proxy/cache/application chain and knowledge of how the service processes Host headers. Because aiohttp is a common Python web framework and library, the main business concern is hidden exposure in internally developed services, APIs, and downstream applications that may not be inventoried as internet-facing web servers.
How an attack unfolds
An attacker sends a crafted HTTP request to an aiohttp service or to a proxy/load balancer in front of it with two or more Host headers, such as one Host value expected by the front-end component and a second value intended to influence aiohttp or application logic. If the front-end component and aiohttp application disagree about which Host header is authoritative, the attacker can create a host-confusion condition. Depending on the application, this may allow manipulation of generated absolute URLs, password-reset links, redirects, CORS or origin checks, virtual-host routing, tenant selection, or cache keys. A complete exploit typically requires the attacker to identify an endpoint that reflects or relies on the host value, confirm that duplicate Host headers are forwarded rather than normalized or rejected, and then use the ambiguity to trigger an incorrect security or routing decision. There is no indication from the provided data that this vulnerability is known to be exploited in the wild or used in ransomware campaigns.
How to fix it
Upgrade aiohttp to version 3.13.4 or later wherever it is used. If direct upgrade is not immediately possible, add compensating controls at the earliest ingress point: reject any HTTP request containing more than one Host header, normalize requests so exactly one validated Host header reaches the application, and enforce an explicit allowlist of permitted hostnames in reverse proxies, API gateways, and application middleware. Review application code for security decisions based on request.host, Host, X-Forwarded-Host, Forwarded, or generated absolute URLs, and ensure trusted proxy handling is configured correctly. Disable or carefully scope caching for responses whose content or routing depends on the Host header until the patch is deployed.
How to confirm the fix worked
Confirm all deployed Python environments, containers, virtual environments, and packaged applications use aiohttp 3.13.4 or later. Validate with package inventory commands such as `python -m pip show aiohttp`, `pip freeze`, lockfile review, SBOM scanning, and container image scanning. Perform a controlled HTTP test against representative endpoints by sending a request with two Host headers and verify the request is rejected with a 400-class response or blocked by the proxy/WAF before reaching the application. Review reverse proxy and application behavior to ensure duplicate Host headers are not forwarded, cached, or used in URL generation. Confirm dependency lockfiles and rebuilt container images no longer include vulnerable aiohttp versions earlier than 3.13.4.
Typical attack path
- Identify an aiohttp-based HTTP service, especially one exposed through a reverse proxy, CDN, API gateway, or caching layer.
- Send baseline requests to observe redirects, absolute URL generation, cache behavior, CORS behavior, or host-based routing decisions.
- Send malformed requests containing multiple Host headers with different values.
- Determine whether the front-end component and aiohttp application interpret different Host values or forward duplicates unchanged.
- Target application functionality that trusts the Host header, such as redirects, password-reset URLs, link generation, tenant routing, or cacheable responses.
- Use the host confusion to cause incorrect redirects, poisoned cached content, bypassed host validation, or other application-specific integrity impacts.
How to detect it
To determine whether exploitation was attempted, review raw HTTP request logs, WAF logs, reverse proxy debug logs, packet captures, and load balancer logs for requests containing more than one Host header. Standard web access logs often record only one normalized host value, so prioritize telemetry that preserves full request headers. Look for duplicate Host headers with conflicting values, unusual external domains in Host-like fields, unexpected redirects to unrecognized domains, cache misses or hits tied to abnormal hostnames, password-reset or invitation links generated with unapproved domains, and spikes in 400 responses after duplicate-host blocking is enabled. If the service sits behind Nginx, Apache, Envoy, HAProxy, CDN, or an API gateway, compare front-end logs with aiohttp application logs to identify discrepancies between the host received at the edge and the host used by the application. No named threat actors or active exploitation campaigns are indicated in the provided data.
- Host: .*\r\nHost:
- \nHost: .*\nHost:
- Duplicate Host header
- multiple Host headers
- Multiple Host headers
- 400 Bad Request: duplicate Host
- 400 Bad Request: multiple Host
- X-Forwarded-Host:
- Forwarded: host=
What your security team should do
- Inventory all services and container images that include aiohttp, including transitive dependencies and internally developed Python services.
- Prioritize internet-facing aiohttp services, services behind shared caches/CDNs, and applications that generate absolute URLs, redirects, password-reset links, or tenant routing from request host values.
- Upgrade aiohttp to 3.13.4 or later and rebuild/redeploy affected artifacts rather than only changing source manifests.
- Add ingress-layer controls to reject requests with duplicate Host headers across WAFs, API gateways, reverse proxies, and load balancers.
- Review application logic for trust in Host, X-Forwarded-Host, and Forwarded headers and replace implicit trust with explicit hostname allowlists.
- Search recent access, proxy, WAF, and raw HTTP logs for duplicate Host header attempts, especially requests followed by unusual redirects, cache anomalies, or unexpected hostnames in generated links.
- Because the issue is not in CISA KEV, has no reported ransomware association, and has low EPSS, treat it as a timely patching and hardening item unless exposure includes high-risk host-based security logic.
The record
AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Prior to version 3.13.4, multiple Host headers were allowed in aiohttp. This issue has been patched in version 3.13.4.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| Chainguard | checkov | 0 | 3.2.517-r0 |
| Chainguard | datahub-ingestion-fips | 0 | 1.5.0.1-r1 |
| Chainguard | keep-api | 0 | 0.51.0-r2 |
| Chainguard | keep-api-fips | 0 | 0.51.0-r2 |
| Chainguard | metaflow-service-fips | 0 | 2.5.0-r2 |
| Wolfi | checkov | 0 | 3.2.517-r0 |
| openSUSE:Leap 16.0 | python-aiohttp | 0 | 3.11.16-160000.5.1 |
Related vulnerabilities
- CVE-2026-34519 AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Also affects checkov
- CVE-2026-34518 AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Also affects checkov
- CVE-2026-34520 AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Also affects checkov
- CVE-2026-34514 AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Also affects checkov
- CVE-2026-34516 AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Also affects checkov
- CVE-2026-34517 AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Also affects checkov
- CVE-2026-34513 AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Also affects checkov
- CVE-2026-34515 AIOHTTP is an asynchronous HTTP client/server framework for asyncio and Python. Also affects checkov