🇰🇷 한글 설명
Symfony UX의 LiveComponent 패키지에서 LiveAction 호출 여부를 판단하는 isLiveComponentRequest() 메서드가 CORS 안전 목록에 포함된 Accept 헤더에만 의존하고 있습니다. 이로 인해 교차 출처 fetch() 요청이 프리플라이트 없이 LiveAction을 호출할 수 있으며, 2.22.0~2.36.0 및 3.1.0 이전 버전에 영향을 미칩니다. 2.36.0 및 3.1.0에서 수정되었습니다.
💡 쉬운 설명
다른 웹사이트가 사용자 몰래 이 웹 애플리케이션에 요청을 보내, 로그인된 사용자의 권한으로 동작을 수행하게 만들 수 있는 취약점입니다. 쿠키 정책이 느슨한 경우 특히 위험합니다.
🇺🇸 원문 (English)
Symfony UX is a JavaScript ecosystem for Symfony. From 2.22.0 until 2.36.0 and 3.1.0, Symfony\UX\LiveComponent\EventListener\LiveComponentSubscriber::isLiveComponentRequest() gates #[LiveAction] invocations on Accept: application/vnd.live-component+html, but the Accept header is CORS-safelisted and cross-origin fetch() can set it without preflight, allowing forged cross-origin #[LiveAction] requests against a victim session when applications use SameSite=None, credentials: 'include', a permissive cookie policy, or a same-origin pivot. This issue is fixed in versions 2.36.0 and 3.1.0.
📍 영향받는 시스템
Symfony UX LiveComponent 2.22.0 이상 2.36.0 미만 및 3.0.x 버전
⚔️ 공격 벡터
악성 웹페이지가 피해자 브라우저에서 Accept 헤더를 포함한 교차 출처 fetch 요청을 보내 세션 쿠키와 함께 LiveAction을 강제 호출
🛡️ 대응 방법
symfony/ux-live-component를 2.36.0 또는 3.1.0 이상으로 업데이트하고, 세션 쿠키에 SameSite=Lax 또는 Strict 설정을 적용
🔧 검증 코드
출력된 버전이 2.36.0 또는 3.1.0 이상이면 패치 적용된 상태이며, 그보다 낮은 2.22.0~2.35.x 또는 3.0.x이면 취약합니다.
composer show symfony/ux-live-component 2>/dev/null | grep -E '^versions'