← Back to CVE Explorer

CVE-2026-49214

Full vulnerability record from the local CVENow database.

Description

guzzlehttp/psr7 is a PSR-7 HTTP message library implementation in PHP. Versions prior to 2.10.2 did not reject ASCII control characters, whitespace, or DEL in first-party URI host components. A vulnerable flow is: First, an application accepts a user-controlled URL. Second, the URL is used to construct a PSR-7 `Uri` or `Request`. Third, the host component contains CRLF or another header-unsafe character. Fourth, the host is copied into the PSR-7 `Host` header when no explicit `Host` header is provided. Finally, the request is serialized or sent by an HTTP client that does not independently reject the malformed host. In that flow, an attacker can cause the serialized request to contain additional attacker-controlled header lines. For example, a host containing `"\r\nX-Injected: yes"` can cause the generated `Host` header to span multiple HTTP header lines. Applications are affected when they use user-controlled URLs for outbound HTTP requests, URL forwarding, proxying, crawling, webhook delivery, or similar request-dispatch flows. In deployments involving HTTP/1.1 connection reuse, proxies, gateways, or load balancers, this malformed request may also contribute to request smuggling or cache poisoning, depending on how downstream components parse the request. The issue is patched in `2.10.2` and later. `1.x` is end-of-life and will not receive a patch. As a workaround, validate and reject all untrusted URI strings before constructing PSR-7 `Uri` or `Request` instances. Reject input containing ASCII control characters, whitespace, or DEL, including CRLF, tab, space, NUL, or DEL characters. Applications that forward requests should also ensure the final HTTP client or serializer rejects invalid URI and header data before writing requests to the network.

Severity
MEDIUM
CVSS score
5.3 (v3.1)
Vulnerability status
Analyzed
Source identifier
Published
2026-06-11 13:16:33.300000
Last modified
2026-10-25 23:10:00.167000
View original CVE JSON
{
  "id": "CVE-2026-49214",
  "sourceIdentifier": "[email protected]",
  "published": "2026-06-11T13:16:33.300",
  "lastModified": "2026-10-25T23:10:00.167",
  "vulnStatus": "Analyzed",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "guzzlehttp/psr7 is a PSR-7 HTTP message library implementation in PHP. Versions prior to 2.10.2 did not reject ASCII control characters, whitespace, or DEL in first-party URI host components. A vulnerable flow is: First, an application accepts a user-controlled URL. Second, the URL is used to construct a PSR-7 `Uri` or `Request`. Third, the host component contains CRLF or another header-unsafe character. Fourth, the host is copied into the PSR-7 `Host` header when no explicit `Host` header is provided. Finally, the request is serialized or sent by an HTTP client that does not independently reject the malformed host. In that flow, an attacker can cause the serialized request to contain additional attacker-controlled header lines. For example, a host containing `\"\\r\\nX-Injected: yes\"` can cause the generated `Host` header to span multiple HTTP header lines. Applications are affected when they use user-controlled URLs for outbound HTTP requests, URL forwarding, proxying, crawling, webhook delivery, or similar request-dispatch flows. In deployments involving HTTP/1.1 connection reuse, proxies, gateways, or load balancers, this malformed request may also contribute to request smuggling or cache poisoning, depending on how downstream components parse the request. The issue is patched in `2.10.2` and later. `1.x` is end-of-life and will not receive a patch. As a workaround, validate and reject all untrusted URI strings before constructing PSR-7 `Uri` or `Request` instances. Reject input containing ASCII control characters, whitespace, or DEL, including CRLF, tab, space, NUL, or DEL characters. Applications that forward requests should also ensure the final HTTP client or serializer rejects invalid URI and header data before writing requests to the network."
    },
    {
      "lang": "es",
      "value": "guzzlehttp/psr7 es una implementación de la biblioteca de mensajes HTTP PSR-7 en PHP. Las versiones anteriores a la 2.10.2 no rechazaban caracteres de control ASCII, espacios en blanco o DEL en los componentes de host URI de origen. Un flujo vulnerable es: Primero, una aplicación acepta una URL controlada por el usuario. Segundo, la URL se utiliza para construir un ’Uri’ o ’Request’ PSR-7. Tercero, el componente de host contiene CRLF u otro carácter inseguro para encabezados. Cuarto, el host se copia en el encabezado ’Host’ PSR-7 cuando no se proporciona un encabezado ’Host’ explícito. Finalmente, la solicitud es serializada o enviada por un cliente HTTP que no rechaza de forma independiente el host malformado. En ese flujo, un atacante puede hacer que la solicitud serializada contenga líneas de encabezado adicionales controladas por el atacante. Por ejemplo, un host que contenga ’’\\r\\nX-Injected: yes’’ puede hacer que el encabezado ’Host’ generado abarque múltiples líneas de encabezado HTTP. Las aplicaciones se ven afectadas cuando utilizan URLs controladas por el usuario para solicitudes HTTP salientes, reenvío de URLs, proxying, rastreo, entrega de webhooks o flujos de despacho de solicitudes similares. En implementaciones que involucran la reutilización de conexiones HTTP/1.1, proxies, gateways o balanceadores de carga, esta solicitud malformada también puede contribuir al contrabando de solicitudes o al envenenamiento de caché, dependiendo de cómo los componentes posteriores analicen la solicitud. El problema está parcheado en la ’2.10.2’ y versiones posteriores. ’1.x’ ha llegado al fin de su vida útil y no recibirá un parche. Como solución alternativa, valide y rechace todas las cadenas URI no confiables antes de construir instancias de ’Uri’ o ’Request’ PSR-7. Rechace la entrada que contenga caracteres de control ASCII, espacios en blanco o DEL, incluyendo caracteres CRLF, tab, espacio, NUL o DEL. Las aplicaciones que reenvían solicitudes también deben asegurarse de que el cliente HTTP o serializador final rechace los datos URI y de encabezado no válidos antes de escribir las solicitudes en la red."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "guzzle",
          "product": "psr7",
          "versions": [
            {
              "version": "< 2.10.2",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N",
          "baseScore": 5.3,
          "baseSeverity": "MEDIUM",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "NONE",
          "integrityImpact": "LOW",
          "availabilityImpact": "NONE"
        },
        "exploitabilityScore": 3.9,
        "impactScore": 1.4
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-06-11T12:47:38.984022Z",
          "id": "CVE-2026-49214",
          "options": [
            {
              "exploitation": "none"
            },
            {
              "automatable": "yes"
            },
            {
              "technicalImpact": "partial"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-20"
        },
        {
          "lang": "en",
          "value": "CWE-93"
        },
        {
          "lang": "en",
          "value": "CWE-113"
        }
      ]
    }
  ],
  "configurations": [
    {
      "nodes": [
        {
          "operator": "OR",
          "negate": false,
          "cpeMatch": [
            {
              "vulnerable": true,
              "criteria": "cpe:2.3:a:guzzlephp:psr-7:*:*:*:*:*:*:*:*",
              "versionEndExcluding": "2.10.2",
              "matchCriteriaId": "5190DD04-7580-4B6E-BA5A-6B89E0A95A05"
            }
          ]
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/guzzle/psr7/security/advisories/GHSA-hq7v-mx3g-29hw",
      "source": "[email protected]",
      "tags": [
        "Mitigation",
        "Vendor Advisory"
      ]
    }
  ]
}