🔍 CVE-2026-24895

0.0
CVSS Score
UNKNOWN
2026-02-12
2026-02-13 14:23
✅ 완료

🇰🇷 한글 설명

FrankenPHP는 PHP용 최신 애플리케이션 서버입니다. 1.11.2 버전 이전의 FrankenPHP에서 CGI 경로 분할 로직이 대소문자 변환 중 유니코드 문자를 제대로 처리하지 않습니다. 로직은 요청 경로의 소문자 복사본에서 분할 인덱스를 계산하지만 이를 원래 경로에 적용합니다. Go에서 strings.ToLower()는 특정 UTF-8 문자의 바이트 길이를 늘릴 수 있으므로(예: Ⱥ은 소문자로 변환될 때 확장됨) 계산된 인덱스는 원래 문자열의 올바른 위치와 일치하지 않을 수 있습니다. 이는 SCRIPT_NAME과 SCRIPT_FILENAME이 올바르지 않게 되어 FrankiePHP가 URI에서 의도한 파일이 아닌 다른 파일을 실행할 수 있습니다. 이 취약점은 1.11.2 버전에서 수정되었습니다.

💡 쉬운 설명

FrankenPHP의 CGI 경로 분할 로직에서 유니코드 문자 처리 오류로 인해 의도하지 않은 파일이 실행될 수 있습니다. 이는 1.11.2 버전 이전의 FrankenPHP에서 발생합니다. 이 취약점은 원격 코드 실행 등의 심각한 공격으로 이어질 수 있습니다.

🇺🇸 원문 (English)

FrankenPHP is a modern application server for PHP. Prior to 1.11.2, FrankenPHP’s CGI path splitting logic improperly handles Unicode characters during case conversion. The logic computes the split index (for finding .php) on a lowercased copy of the request path but applies that byte index to the original path. Because strings.ToLower() in Go can increase the byte length of certain UTF-8 characters (e.g., Ⱥ expands when lowercased), the computed index may not align with the correct position in the original string. This results in an incorrect SCRIPT_NAME and SCRIPT_FILENAME, potentially causing FrankenPHP to execute a file other than the one intended by the URI. This vulnerability is fixed in 1.11.2.

📍 영향받는 시스템

FrankenPHP 1.11.2 이전 버전

⚔️ 공격 벡터

공격자는 FrankenPHP의 취약한 CGI 경로 분할 로직을 악용하여 의도하지 않은 파일을 실행시킬 수 있습니다.

🛡️ 대응 방법

FrankenPHP를 1.11.2 버전 이상으로 업그레이드하세요.

🔧 검증 코드

이 코드는 로컬 시스템에서 FrankenPHP의 버전을 확인합니다. FrankenPHP가 설치되어 있지 않으면 코드를 실행하기 전에 설치해야 합니다. 코드는 FrankenPHP의 버전을 확인하여 취약점 여부를 판단합니다.

Shell / Script
import subprocess
result = subprocess.run(['frankenphp', '--version'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
version = result.stdout.decode('utf-8').strip()
if version < '1.11.2':
    print({"result": "취약", "reason": "FrankenPHP 버전이 1.11.2 미만"})
else:
    print({"result": "양호", "reason": "FrankenPHP 버전이 1.11.2 이상"})

💻 영향받는 소프트웨어

PHP