GHSA-vxrr-w42w-w76g

Suggest an improvement
Source
https://github.com/advisories/GHSA-vxrr-w42w-w76g
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-vxrr-w42w-w76g/GHSA-vxrr-w42w-w76g.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-vxrr-w42w-w76g
Aliases
  • CVE-2026-42551
Published
2026-05-06T21:38:16Z
Modified
2026-05-06T21:59:37.150665Z
Severity
  • 7.5 (High) CVSS_V3 - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N CVSS Calculator
Summary
Flight: HTTP method override enabled by default, facilitating CSRF escalation and middleware bypass
Details

Summary

Request::getMethod() unconditionally honors the X-HTTP-Method-Override header and the $_REQUEST['_method'] parameter on any HTTP verb (including safe verbs such as GET), with no opt-in and no whitelist of permitted target methods. A GET request can silently become a DELETE or PUT, enabling CSRF escalation against destructive endpoints, bypass of middleware gated on unsafe verbs, and cache poisoning between CDN and origin.

Affected code

flight/net/Request.php (≈ lines 281-292):

public static function getMethod(): string
{
    $method = self::getVar('REQUEST_METHOD', 'GET');
    if (self::getVar('HTTP_X_HTTP_METHOD_OVERRIDE') !== '') {
        $method = self::getVar('HTTP_X_HTTP_METHOD_OVERRIDE');
    } elseif (isset($_REQUEST['_method']) === true) {
        $method = $_REQUEST['_method'];
    }
    return strtoupper($method);
}

$_REQUEST aggregates $_GET and $_POST; on PHP runtimes with request_order=GPC it also includes $_COOKIE.

Proof of concept

GET /item/42?_method=DELETE        HTTP/1.1

is dispatched as DELETE /item/42.

GET /item/42                       HTTP/1.1
X-HTTP-Method-Override: DELETE

is also dispatched as DELETE /item/42.

Trivial CSRF vector (no JavaScript required):

<img src="https://victim.tld/item/42?_method=DELETE">

loaded on any attacker-controlled page triggers the destructive DELETE on page load, bypassing Same-Origin Policy (image loads are not blocked).

Reproduced against /poc4/item/42.

Impact

  • GET → DELETE / PUT CSRF on any route registered for unsafe verbs.
  • Bypass of authentication, CSRF token, or rate-limiting middleware that is gated only on POST/DELETE.
  • CDN cache poisoning: the CDN caches the GET response body while the origin executed a DELETE.

Patch (fixed in 3.18.1, commit b8dd23a)

A new flight.allow_method_override setting controls both override vectors. Operators can set it to false to disable X-HTTP-Method-Override and _method entirely.

Credit

Discovered by @Rootingg.

Database specific
{
    "github_reviewed": true,
    "github_reviewed_at": "2026-05-06T21:38:16Z",
    "cwe_ids": [
        "CWE-436"
    ],
    "severity": "HIGH",
    "nvd_published_at": null
}
References

Affected packages

Packagist / flightphp/core

Package

Name
flightphp/core
Purl
pkg:composer/flightphp/core

Affected ranges

Type
ECOSYSTEM
Events
Introduced
0Unknown introduced version / All previous versions are affected
Fixed
3.18.1

Affected versions

v1.*
v1.0
v1.1
v1.1.5
v1.1.10
v1.2
v1.2.13
v1.2.14
v1.2.15
v1.2.17
v1.2.18
v1.2.19
v1.2.20
v1.2.21
v1.2.22
v1.3.0
v1.3.1
v1.3.2
v1.3.3
v1.3.4
v1.3.5
v1.3.7
v1.3.8
v1.3.9
v2.*
v2.0.0
v2.0.1
v3.*
v3.0.0
v3.0.1
v3.0.2
v3.1.0
v3.1.1
v3.2.0
v3.3.0
v3.4.0
v3.4.1
v3.4.2
v3.5.0
v3.5.2
v3.5.3
v3.6.0
v3.6.1
v3.6.2
v3.7.0
v3.7.1
v3.7.2
v3.8.0
v3.8.1
v3.9.0
v3.10.0
v3.10.1
v3.11.0
v3.11.1
v3.12.0
v3.13.0
v3.13.1
v3.14.0
v3.15.0
v3.15.1
v3.15.2
v3.15.3
v3.16.0
v3.16.1
v3.17.0
v3.17.1
v3.17.2
v3.17.3
v3.17.4
v3.18.0

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/05/GHSA-vxrr-w42w-w76g/GHSA-vxrr-w42w-w76g.json"