GHSA-4m4j-hmqq-3gxm

Suggest an improvement
Source
https://github.com/advisories/GHSA-4m4j-hmqq-3gxm
Import Source
https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/06/GHSA-4m4j-hmqq-3gxm/GHSA-4m4j-hmqq-3gxm.json
JSON Data
https://api.osv.dev/v1/vulns/GHSA-4m4j-hmqq-3gxm
Aliases
Published
2026-06-19T19:35:01Z
Modified
2026-09-10T03:51:07Z
Severity
  • 2.1 (Low) CVSS_V4 - CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:A/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N CVSS Calculator
Summary
symfony/ux-live-component: CSRF Protection Bypass — Accept Header is CORS-Safelisted
Details

Description

When using symfony/ux-live-component, methods annotated with #[LiveAction] are invokable from the browser and mutate server-side state via AJAX. Symfony\UX\LiveComponent\EventListener\LiveComponentSubscriber::isLiveComponentRequest() gated these invocations on the presence of Accept: application/vnd.live-component+html, with a code comment stating that this acted as a CSRF protection.

The Accept header is a CORS-safelisted request header, so a cross-origin fetch() can set it without triggering a preflight. The header therefore provided no CSRF protection. Any #[LiveAction] could be forged cross-origin against a victim's session.

In practice the attack is mitigated by SameSite=Lax session cookies (Symfony's default), but applications using SameSite=None, credentials: 'include' with a permissive cookie policy, or that have been pivoted from another same-origin vector remained exposed.

Resolution

isLiveComponentRequest() now additionally requires the request header X-Requested-With: XMLHttpRequest. This header is not CORS-safelisted, so the browser issues a preflight OPTIONS request for any cross-origin attempt; Symfony does not advertise CORS for LiveComponent endpoints, the preflight fails, and the real request is blocked before it reaches the application. The bundled Stimulus client already sends X-Requested-With on every LiveComponent request (RequestBuilder.ts), so standard usage is unaffected. Cross-origin callers must add X-Requested-With to their CORS Access-Control-Allow-Headers allow-list.

The patch for this issue is available here for branch 2.x (and forward-ported to 3.x).

Credits

Symfony would like to thank Anthropic (via Project Glasswing) for reporting the issue and Hugo Alliaume for providing the fix.

Database specific
{
    "cwe_ids":  [
        "CWE-352"
    ],
    "github_reviewed":  true,
    "github_reviewed_at":  "2026-06-19T19:35:01Z",
    "nvd_published_at":  null,
    "severity":  "LOW"
}
References

Affected packages

Packagist / symfony/ux-live-component

Package

Name
symfony/ux-live-component
Purl
pkg:composer/symfony/ux-live-component

Affected ranges

Type
ECOSYSTEM
Events
Introduced
2.22.0
Fixed
2.36.0

Affected versions

v2.*
v2.22.0
v2.22.1
v2.23.0
v2.24.0
v2.25.0
v2.25.1
v2.25.2
v2.26.0
v2.26.1
v2.27.0
v2.28.0
v2.28.1
v2.28.2
v2.29.0
v2.29.1
v2.29.2
v2.30.0
v2.31.0
v2.32.0
v2.33.0
v2.34.0
v2.35.0

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/06/GHSA-4m4j-hmqq-3gxm/GHSA-4m4j-hmqq-3gxm.json"

Packagist / symfony/ux-live-component

Package

Name
symfony/ux-live-component
Purl
pkg:composer/symfony/ux-live-component

Affected ranges

Type
ECOSYSTEM
Events
Introduced
3.0.0
Fixed
3.1.0

Affected versions

v3.*
v3.0.0

Database specific

source
"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/06/GHSA-4m4j-hmqq-3gxm/GHSA-4m4j-hmqq-3gxm.json"