php7403-u20-fpm-userini 서버의 실제 서빙 경로(웹서버 → SAPI/FPM pool → PHP 빌드)와 실효 설정을 읽어 두 취약점의 성립 조건을 판정하고, 관리자가 적용할 조치를 파일·줄 단위로 제시합니다. 점검은 비파괴로 수행됐습니다.
01 Executive Summary
서빙 경로 1개 · 판정 2건
| 도달가능 | 이 서버의 SAPI·실효 설정에서 문서가 확인한 공격 경로의 전제조건이 성립합니다. |
| 완화됨(임시) | 문서의 임시 완화 설정이 요청 파싱 전 단계에 적용돼 있습니다. 업그레이드 전까지의 조치입니다. |
| 판정보류 | 근거가 부족하거나 설정을 읽지 못해 단정하지 않습니다. 도달불가가 아닙니다. |
| 패치됨 | 수정 버전 이상이거나 패키지 changelog에 백포트 기록이 있습니다. |
02 Scope
웹서버 → SAPI/FPM pool → PHP 빌드 단위로 판정합니다
| ID | 대상 | 버전 판정 | 실행 | 웹서버 |
|---|---|---|---|---|
| U01 | PHP 7.4 FPM pool [www] 7.4.3-4ubuntu2.29 | PHP 7.4는 공식 수정 릴리스가 없고 소스 백포트만 있습니다(PHP_취약점_동향_2026-10.md:69). changelog(/usr/share/doc/php7.4-fpm/changelog.Debian.gz)에 CVE 백포트 기록 없음. | 실행 중 2026-10-23 21:50:31 | nginx lab-php7.4.localhost |
03 Findings
CVSS v4.0 9.2 · 두 CVE × 서빙 경로
| CVE | 대상 | 판정 | 신뢰도 | 수정버전 | 근거 |
|---|---|---|---|---|---|
| CVE-2026-109618 | U01 | 판정보류 | medium | 없음(EOL) | FPM은 startup 실패 시 워커를 종료해 이 경로가 차단되지만, startup 이후 취약할 수 있다는 분석이 있어 도달불가로 단정할 수 없습니다(DOC:44). |
| CVE-2026-109619 | U01 | 도달가능 | high | 없음(EOL) | session.upload_progress가 활성(PHP 기본값)이라 session_start() 없이도 세션 라이프사이클 경로가 성립합니다. mod_php·FPM 모두 해당(DOC:54). |
SAPI=fpm, memory_limit=128M (/etc/php/7.4/fpm/php.ini:409)
SAPI=fpm, session.upload_progress.enabled=1 (PHP 기본값)
04 Remediation
우선순위 순 · 파일·줄 단위
패키지 공급원의 보안 업데이트를 확인하고, 없으면 지원 브랜치로 이전합니다.
zcat /usr/share/doc/php7.4-fpm/changelog.Debian.gz | grep -E 'CVE-2026-109618|CVE-2026-109619'
/etc/php/7.4/fpm/pool.d/www.conf 의 [www] 섹션에 추가: php_admin_value[session.upload_progress.enabled] = 0 ※ ini_set()·.user.ini로는 효과 없음
sudo systemctl restart php7.4-fpm sudo python3 php2shell_host.py # 재점검으로 판정 변화 확인
/etc/php/7.4/fpm/pool.d/www.conf 의 [www] 섹션에 추가: php_admin_value[memory_limit] = -1 memory_limit=-1은 요청별 상한을 없애므로 서비스 단위 메모리 상한을 함께 둡니다: sudo systemctl edit php7.4-fpm [Service] MemoryMax=<서버 메모리에 맞는 값> (RLIMIT_AS/RLIMIT_DATA는 사용하지 않습니다)
sudo systemctl restart php7.4-fpm sudo python3 php2shell_host.py # 재점검으로 판정 변화 확인
해당 줄을 제거하고 pool/php.ini 수준 설정으로 옮깁니다.
sudo python3 php2shell_host.py # 재점검으로 판정 변화 확인
/etc/php/7.4/fpm/php.ini:379: expose_php = Off
sudo systemctl restart php7.4-fpm curl -sI https://<호스트>/ | grep -i x-powered-by # 출력이 없어야 함
05 Compromise & Appendix
판정이 아닌 확인 항목 · 점검 방식 공개
배포에 의한 정상 변경일 수 있습니다. 배포 이력과 대조해 설명되지 않는 파일을 확인합니다.
1개 2026-10-23 01:52 /var/www/html/index.php
find /var/www/html -name '*.php' -newermt 2026-10-17 -ls
| 비파괴 | 실행한 명령 0건 · 네트워크 요청 0건 · 쓰기는 보고서 디렉터리(/tmp/php2shell_report)만 |
| 읽은 파일 | 40개 (전체 목록은 report.json) |
| 읽지 못한 파일 | 0개 |
| 한계 | 설정 파일 기준 실효값이며 재시작 반영은 파일 수정 시각으로 추정합니다. Apache php_* 지시자는 전역으로 취급합니다. RHEL 계열 패키지 버전, php-cgi·LiteSpeed·FrankenPHP, 익스플로잇 성공 조건(AC:H/AT:P)은 판정하지 않습니다. |
06 Operating Guidance
오늘 · 이번 주 · 업그레이드 경로 · 불가능할 때
업그레이드가 답이라는 것은 대개 이미 알고 있습니다. 문제는 운영 중인 서버를 그때까지 어떻게 다루느냐입니다.