PHP session.upload_progress의 힙 UAF(CVE-2026-109618 / -109619)

1 week ago 18

PHP 업로드 진행률 처리 중 메모리 부족으로 남은 직렬화 상태가 같은 프로세스의 다음 요청에서 재사용되며 힙 해제 후 사용(UAF)이 발생함 처음 제시한 캐시 포인터 공격 경로는 성립하지 않음. 참조 카운트 증가로 대상 배열이 살아 있어 해제 자체가 없으며, 해당 경로의 평가는 CVSS 0.0으로 정정됨 실제 결함은 ASAN으로 확인한 메모리 안전성 문제이며, 정정된 평가는 CVSS 5.3 Medium임. 원격 코드 실행(RCE)은 입증되지 않았으며, 정정 결과에 따르면 해당 경로로는 코드 실행이 불가능함 요청 시작 실패 후에도 프로세스가 살아남는 Apache prefork + mod_php 등의 실행 환경에서 다음 요청으로 이어짐. PHP-FPM, CGI, LiteSpeed LSAPI는 첫 요청 실패 시 종료하므로 이 교차 요청 경로에 도달하지 않음 패치 전 완화책은 session.upload_progress.enabled = Off 설정 후 PHP-FPM이나 웹 서버를 다시 로드하는 것임. 본문에는 정정 전 공격 성공 문구도 남아 있어, 확정된 UAF와 코드 실행 주장을 구분해야 함 요청 초기화보다 먼저 실행되는 업로드 처리 php_session_rfc1867_callback 은 php_hash_environment 안에서 실행되며, zend_activate_modules와 PHP_RINIT_FUNCTION(basic)보다 먼저 동작함 정상적인 모듈 요청 초기화에서는 basic_functions.c:393-395에서 BG(serialize)와 BG(unserialize)를 초기화함 두 전역 상태는 직렬화 계층의 { level, data }를 보관함 초기화 이전의 업로드 진행률 update() 가 세션을 디코딩하거나 인코딩하다 memory_limit 초과로 중단되면, level은 0보다 큰 상태로 남고 data는 해제된 메모리를 가리킬 수 있음 같은 프로세스가 다음 요청을 처리하면 php_var_serialize_init / php_var_unserialize_init 이 level != 0을 보고 기존 컨텍스트를 재사용하면서 UAF가 발생함 캐시 포인터 경로는 취약점이 아님 2026년 10월 21일 정정은 Bug S, 즉 CVE-2026-109618 분류명으로 다룬 캐시 포인터 경로를 철회함 Z_TRY_ADDREF(progress->data) 가 session.c:3213에서 zend_hash_upd...

Read Entire Article




피플앤툴즈 네트워크
🛍 샵