Skip to main content

guzzlehttp/psr7 EUVDEUVD-2026-36239

| CVE-2026-48998 MEDIUM
Improper Input Validation (CWE-20)
2026-06-11 GitHub_M GHSA-34xg-wgjx-8xph
5.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Send HTTP request with crafted Host header containing '@'
  2. Delivery
    psr7 passes raw Host value to URI parser without validation
  3. Exploit
    RFC 3986 parser reinterprets '@' as userinfo delimiter
  4. Execution
    PSR-7 URI getHost() resolves to attacker-controlled domain
  5. Persist
    Application uses parsed URI host for allow-list or routing check
  6. Impact
    Request and credentials forwarded to unintended host

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V2 - Validation and Business Logic Input validation, allowlisting
Exploitation Conditions

Exploitation requires all of the following conditions to be true simultaneously: (1) the application calls one of the affected inbound-parsing functions - GuzzleHttp\Psr7\Message::parseRequest(), the legacy GuzzleHttp\Psr7\parse_request(), GuzzleHttp\Psr7\ServerRequest::fromGlobals(), or GuzzleHttp\Psr7\ServerRequest::getUriFromGlobals() - on attacker-supplied HTTP data or server variables; AND (2) the application subsequently uses the resulting PSR-7 URI getHost() value for routing, allow-list enforcement, credential selection, or request forwarding decisions. Applications using guzzlehttp/psr7 only through the standard Guzzle outbound HTTP client API are explicitly confirmed not vulnerable by the vendor advisory. No attacker authentication is required, but exploitation is structurally limited to forwarding proxies, API gateways, or server-side request routing middleware. Standard PHP applications that receive requests via a web server and use psr7 solely for outbound calls are not in scope.

Impact

The NVD-assigned CVSS 3.1 score is 5.3 Medium (AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N). The network attack vector and absence of required privileges are consistent with the description - the attack is delivered via a standard HTTP request with no authentication. However, the practical exploitation space is narrower than the raw vector implies: only applications in specific inbound-parsing-plus-forwarding configurations are vulnerable; applications using guzzlehttp/psr7 exclusively through the Guzzle outbound client are explicitly confirmed not affected by the vendor advisory. No EPSS score was included in the source data, no CISA KEV listing exists, and no proof-of-concept exploit has been identified, all of which reduce urgency relative to the CVSS score alone. The assigned C:L/I:N metrics arguably understate the forwarding scenario - credential disclosure to an attacker-controlled host and request misdirection both carry integrity implications - but the scope is ungranged (S:U). Real-world priority is elevated specifically for API gateways, reverse proxies, or multi-tenant request routing middleware built on psr7's server request functions; for applications using only the outbound Guzzle client the effective risk is negligible.

Exploit ScenarioDerived

An attacker targets a PHP application built on guzzlehttp/psr7 that acts as an API gateway or forwarding proxy. The attacker sends an HTTP request with Host: internal-api.corp@attacker.example; the psr7 library constructs a URI with getHost() returning attacker.example, which passes an allow-list check that only examines the parsed URI host. The gateway then forwards the request - including Authorization headers or session tokens - to the attacker-controlled host instead of the intended internal service.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
Patch available 0.0% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Jun 11, 2026

Host confusion in guzzlehttp/psr7 (all versions prior to 2.10.2) allows unauthenticated network attackers to supply a malformed Host header - such as trusted.example@evil.example - causing the library's URI construction logic to reinterpret the value as URI userinfo and a different host, silently replacing the parsed URI host with the attacker-controlled domain. Applications that rely on the resulting PSR-7 URI host for routing, allow-list enforcement, or forwarding decisions are at risk of sending requests and credentials to unintended destinations. No public exploit has been identified at time of analysis and no CISA KEV listing exists, but the conditional impact on forwarding gateways and API proxies built on psr7's server-request parsing functions is concrete.

RemediationAI

Vendor-released patch: 2.10.2. Upgrade via Composer to guzzlehttp/psr7 version 2.10.2 or later (composer require guzzlehttp/psr7:^2.10.2); the advisory is at https://github.com/guzzle/psr7/security/advisories/GHSA-34xg-wgjx-8xph. For applications that cannot upgrade immediately, validate Host header values before passing untrusted request data to Message::parseRequest(), parse_request(), ServerRequest::fromGlobals(), or ServerRequest::getUriFromGlobals(): accept only values matching uri-host [ ':' port ] and reject any value containing @, /, \, ?, #, whitespace, control characters, malformed IP literals, or invalid port syntax. Critically, do NOT validate Host by prepending http:// and calling parse_url(), as this reintroduces the exact same authority reinterpretation flaw. Applications pinned to the 1.x EOL branch have no vendor patch available and must either migrate to 2.x or implement Host header validation at the application or reverse-proxy layer as a compensating control.

Affected VersionsENISA

psr7 < 2.10.2

Affected Packages

composer guzzlehttp/psr7 fix: 2.10.2
euvd psr7 fix: 2.10.2

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 2 packages in composer, euvd

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

Technical ContextAI · show details

guzzlehttp/psr7 is a PHP implementation of the PSR-7 HTTP message interface, widely used both as a standalone library and as the transport layer of the Guzzle HTTP client. The vulnerability (CWE-20: Improper Input Validation) lies in the library's inbound request construction path: when building a URI from a Host header or $_SERVER variable, the library passes the raw Host value to its RFC 3986 URI parser without first validating it against the narrower RFC 7230 uri-host [ ':' port ] grammar. The RFC 3986 parser correctly interprets @ as the userinfo/host delimiter, so trusted.example@evil.example yields a URI whose getHost() returns evil.example - diverging from the original header value. Affected code paths include GuzzleHttp\Psr7\Message::parseRequest(), the legacy 1.x GuzzleHttp\Psr7\parse_request(), GuzzleHttp\Psr7\ServerRequest::fromGlobals(), and GuzzleHttp\Psr7\ServerRequest::getUriFromGlobals(). The outbound Guzzle HTTP client API is explicitly confirmed unaffected. The affected CPE is cpe:2.3:a:guzzle:psr7:*:*:*:*:*:*:*:* for all versions below 2.10.2.

Know when Psr7 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 5.3 MEDIUM
AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
vuln.today AI 6.5 MEDIUM

AV:N and PR:N confirmed by advisory; I:L added because misdirected request forwarding constitutes integrity impact beyond confidentiality alone.

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

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
Low
Integrity
None
Availability
None

Lifecycle Timeline

2
Patch available
Jun 11, 2026 - 14:01 EUVD
CVE Published
Jun 11, 2026 - 12:34 cve.org
MEDIUM 5.3

DescriptionCVE.org

guzzlehttp/psr7 is a PSR-7 HTTP message library implementation in PHP. Versions prior to 2.10.2 contain improper Host header validation when parsing raw HTTP request messages and when deriving a server request URI from server variables. An attacker can provide a malformed Host header containing URI authority delimiters, such as trusted.example@evil.example. When the Host value is used to construct a URI, the malformed value can be reinterpreted as URI userinfo and host. This can cause the PSR-7 request URI host to differ from the original Host header value. Applications are affected if they parse attacker-controlled raw HTTP requests with GuzzleHttp\Psr7\Message::parseRequest() or the legacy 1.x GuzzleHttp\Psr7\parse_request() function, or if they build server requests from attacker-controlled server variables, then rely on the resulting URI host for routing, allow-list checks, or forwarding decisions. In affected forwarding or gateway scenarios, this may cause requests or credentials to be sent to an unintended host. The issue is patched in 2.10.2. 1.x is end-of-life and will not receive a patch. Some workarounds are available. Validate the Host header as uri-host [ ":" port ] before calling Message::parseRequest() or legacy parse_request() on untrusted HTTP request data, or before deriving routing and forwarding decisions from a parsed request URI. Reject Host values containing userinfo, path, query, or fragment delimiters.

Threat Intelligence Overview

EPSS Score
0.0%
Top 87% exploitable
Threat Intel
1
1 sources
Social Media
1
Sightings
Data Quality
8 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment GHSA Vendor CIRCL GitHub VulDB

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 MEDIUM
CISA KEV No
Public POC No
EPSS 0.0%
Patch available Yes
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.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
None
System Exposure· derived
Open
Automatable
Yes
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

Vendor StatusVendor

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