CVE-2026-69246
Received Received - Intake

Host Header Injection in Guzzle PHP HTTP Client

Vulnerability report for CVE-2026-69246, including description, CVSS score, EPSS score, affected products, exploitability, helpful resources, and attack-flow context.

Publication date: 2026-08-03

Last updated on: 2026-08-03

Assigner: GitHub, Inc.

Description

Guzzle is an extensible PHP HTTP client. Prior to 7.15.2 and 8.0.1, Guzzle gives a transport the request URI as text and supplies the Host header separately. The cURL handlers set CURLOPT_URL to the URI exactly as written and push that Host into CURLOPT_HTTPHEADER; StreamHandler does the same through fopen(). libcurl then parses the authority itself, percent-decoding it and, on an IDN-capable build, applying IDNA mapping, and uses the result to resolve, connect, name the TLS peer and address a proxy CONNECT, while the supplied Host suppresses the aligned one libcurl would have generated. For a URI host written as 127.0.0.%31, filter_var() rejects the host as an IP literal, yet libcurl decodes it to 127.0.0.1 and reaches loopback with no DNS lookup while the server receives Host: 127.0.0.%31. An attacker who influences a fetched URI can therefore reach a host the application's checks excluded and read whatever the host exposes of the response. The same divergence moves Guzzle's own decisions onto a spelling the transport does not use: no_proxy selects proxy routing from the literal host, and RedirectMiddleware decides from it whether to strip Authorization and Cookie. Exploitation requires the application to build a request URI from untrusted input and to make a host decision before handing it to Guzzle. This issue is fixed in versions 7.15.2 and 8.0.1.

CVSS Scores

EPSS Scores

Probability:
Percentile:

Meta Information

Published
2026-08-03
Last Modified
2026-08-03
Generated
2026-08-04
AI Q&A
2026-08-04
EPSS Evaluated
N/A
NVD

Affected Vendors & Products

Showing 1 associated CPE
Vendor Product Version / Range
guzzle guzzle to 8.0.1 (exc)

Helpful Resources

Exploitability

CWE
CWE Icon
KEV
KEV Icon
CWE ID Description
CWE-918 The web server receives a URL or similar request from an upstream component and retrieves the contents of this URL, but it does not sufficiently ensure that the request is being sent to the expected destination.
CWE-180 The product validates input before it is canonicalized, which prevents the product from detecting data that becomes invalid after the canonicalization step.
CWE-436 Product A handles inputs or steps differently than Product B, which causes A to perform incorrect actions based on its perception of B's state.
CWE-941 The product creates a communication channel to initiate an outgoing request to an actor, but it does not correctly specify the intended destination for that actor.

Attack-Flow Graph

AI Quick Actions

Instant insights powered by AI
Executive Summary

This vulnerability affects Guzzle, a PHP HTTP client. It occurs when the library processes URIs with encoded hostnames like 127.0.0.%31. While PHP's filter_var() rejects such hosts as invalid, libcurl decodes them to valid IPs like 127.0.0.1, bypassing intended security checks. Attackers can exploit this to access restricted hosts by manipulating URIs.

Detection Guidance

This vulnerability can be detected by checking the version of Guzzle in use. If your application uses Guzzle versions prior to 7.15.2 or 8.0.1, it is vulnerable. Run 'composer show guzzlehttp/guzzle' to check the installed version.

Impact Analysis

If you use an affected Guzzle version in an application that builds URIs from untrusted input, attackers could bypass host restrictions and access internal services or sensitive data. This could lead to unauthorized data exposure or server access, depending on the targeted host.

Compliance Impact

This vulnerability could potentially affect compliance with GDPR and HIPAA by allowing unauthorized access to sensitive data. If an attacker exploits this flaw to reach a host the application's checks excluded, they may read data the host exposes, which could include personal or protected health information. This unauthorized access violates data protection principles required by GDPR and HIPAA.

Mitigation Strategies

Immediately update Guzzle to version 7.15.2 or 8.0.1 or later. If updating is not possible, review all code that constructs URIs from untrusted input and ensure proper validation and sanitization are applied before passing URIs to Guzzle.

Chat Assistant

Ask questions about this CVE
Hi! I’m here to help you understand CVE-2026-69246. Ask me anything about the vulnerability, its impact, or mitigation strategies.
0/70

EPSS Chart