🇰🇷 한글 설명
FrankenPHP 1.12.5 미만 버전의 워커 모드에서 PHP 세션 확장이 공유 모듈로 로드될 경우, 요청 간에 세션 상태가 유지되는 취약점이 존재합니다. 이로 인해 세션 ID가 요청 경계를 넘어 노출될 수 있으며, 결과적으로 다른 사용자의 세션 탈취나 세션 혼동 문제가 발생할 수 있습니다.
💡 쉬운 설명
웹 서버가 이전 사용자의 로그인 정보를 제대로 지우지 못해, 다음 사용자가 다른 사람의 계정으로 접속될 수 있는 문제입니다. 이로 인해 개인 정보가 유출되거나 로그아웃이 제대로 되지 않는 현상이 발생할 수 있습니다.
🇺🇸 원문 (English)
FrankenPHP is a modern application server for PHP. Prior to 1.12.5, FrankenPHP worker mode can retain PHP session state between requests when the session extension is loaded as a shared module and is unavailable through HAVE_PHP_SESSION at compile time. In this build configuration, frankenphp_reset_session_state() is compiled out, PS(id) can survive a request boundary, and a subsequent session_start() can ignore the new request's cookie because an identifier is already present. Under concurrent requests, session_id() can therefore return another client's identifier or a stale identifier from a previous request on the same worker thread, causing cross-user session exposure, possible session hijacking, and intermittent logout behavior. Builds with the session extension statically linked, including the official static binaries and Docker images, are not affected. This issue is fixed in version 1.12.5.
📍 영향받는 시스템
FrankenPHP 1.12.5 미만 버전 (단, 세션 확장이 정적으로 링크된 공식 바이너리 및 Docker 이미지는 제외)
⚔️ 공격 벡터
동시 요청이 발생하는 환경에서 워커 스레드에 남아있는 이전 세션 ID를 통해 타인의 세션에 접근
🛡️ 대응 방법
FrankenPHP를 최신 버전인 1.12.5 이상으로 업데이트하거나 세션 확장을 정적 링크 방식으로 빌드하여 사용
🔧 검증 코드
명령어 결과에 1.12.0부터 1.12.4 사이의 버전이 출력되면 취약한 버전이 설치된 상태입니다.
frankenphp version 2>/dev/null | grep -E '1\[.12\.[0-4]'