본문 바로가기
개발/php

PHP 보안 업데이트: 8.2~8.5 수정 버전과 구버전 대응

by 향유 2026. 10. 27.

핵심 정리: 이슈 → 문제 → 해결책

이슈: 2026년 10월 21일 PHP 원격 코드 실행 취약점 두 건의 긴급 수정본이 나왔습니다. 23일에는 세션 설정 추가 안내, 26일에는 Windows 패키지 재배포가 이어졌습니다.

핵심 문제: 취약한 PHP로 웹 요청을 처리하면 로그인하지 않은 공격자가 서버에서 코드를 실행할 수 있습니다. 앱만 고치거나 오류 표시를 끄는 것으로 해결되지 않으며, 명령창 PHP와 실제 웹서버 PHP가 다를 수도 있습니다.

해결책: 실제 웹서버가 쓰는 PHP를 확인하고 8.2는 8.2.35, 8.3은 8.3.36, 8.4는 8.4.27, 8.5는 8.5.12 이상 해당 계열 수정 패키지를 적용합니다. Windows 공식 패키지는 -1 재배포본까지 확인하세요. 8.1 이하는 공급자 보안 패치 또는 지원 버전 이전을 확인하고, 세션 추가 조치는 아래 안내대로 별도로 점검합니다.

기준: 2026년 10월 27일 공식 공지. 호스팅 이용자는 업체의 적용 완료 여부를 확인하세요. 직접 시험은 Windows 8.5.12-1의 명령창 실행·격리 설정값 확인이며 운영 서버 패치·공격 재현 시험은 하지 않았습니다.

PHP 보안 업데이트를 나타내는 코끼리와 방패 개념 그림
AI로 만든 개념 이미지

지금 내 버전에서는 무엇을 해야 하나

다음은 CVE-2026-109618·CVE-2026-109619의 최소 수정 버전입니다. 해당 계열에서 더 최신의 정식 보안 패키지가 나오면 공급자 공지를 확인해 적용하세요. CVE는 취약점을 구분하는 공개 식별 번호입니다.

사용 중인 계열PHP 소스 수정 버전Windows 공식 재배포
8.58.5.128.5.12-1
8.48.4.278.4.27-1
8.38.3.368.3.36-1
8.28.2.358.2.35-1

8.1 이하: PHP 프로젝트의 정규 지원은 끝났습니다. 배포판·호스팅·장기지원 업체의 보안 수정 제공 여부를 확인하거나 지원 중인 버전으로 이전해야 합니다. PHP 팀은 이번 두 문제에 대해 7.4·8.0·8.1용 최소 소스 백포트도 제공했지만, 이는 정규 지원 재개나 이후 보안 수정 보장이 아닙니다. 백포트는 구버전에 수정 사항만 옮겨 적용한 패치입니다.

8.2: 이번 패치를 적용하더라도 보안 지원은 2026년 12월 31일 종료됩니다. 당장 최신 8.2 수정본을 적용하는 일과 이후 계열 이전 계획을 따로 잡으세요. 8.3·8.4·8.5의 보안 지원 종료 예정은 각각 2027·2028·2029년 말입니다. 8.6 RC 같은 시험판은 운영 서버의 업데이트 대안으로 선택하지 마세요.

이번 문제와 추가 공지를 구분하기

CVE-2026-109618은 메모리 부족을 처리하는 과정의 문제, CVE-2026-109619는 요청이 끝난 뒤 남은 내부 상태를 다음 요청이 잘못 다루는 문제입니다. 웹 요청을 처리하는 PHP-FPM·Apache mod_php 등 여러 실행 방식이 대상입니다. ‘FPM이라 괜찮다’거나 오류 표시를 껐으니 안전하다고 판단하면 안 됩니다.

10월 23일에는 특정 세션 처리 조합에 관한 추가 안내(CVE-2026-115560)가 나왔습니다. 위 두 취약점의 수정 버전만 보고 모든 추가 문제가 끝났다고 해석하지 마세요. 10월 26일 Windows 재배포는 별도의 Brotli 압축 해제 라이브러리 문제(CVE-2026-111497)를 반영한 것입니다.

1. 호스팅·웹서버가 실제로 쓰는 PHP부터 확인하기

일반 웹호스팅 이용자는 관리 화면의 PHP 버전과 업체 보안 공지를 확인합니다. 문의할 때에는 ‘PHP2Shell 두 CVE의 패치가 웹 요청 처리 프로세스에 적용됐는지, 구버전이라면 어떤 공급자 수정 패키지를 쓰는지’를 물으면 됩니다. 문의를 보냈다는 사실과 적용 완료 답변은 구분해 두세요.

서버 관리자라면 터미널 또는 PowerShell에서 다음 두 줄을 실행할 수 있습니다. 이미 PHP 실행 경로가 설정된 환경의 읽기 전용 점검입니다. 명령을 찾을 수 없다는 오류는 PHP가 안전하다는 뜻이 아니라 경로 확인이 필요하다는 뜻입니다.

php -v
php --ini

첫 명령은 명령창 PHP 버전을, 두 번째는 설정 파일 위치를 보여줍니다. 웹서버가 다른 PHP-FPM 풀이나 Apache 모듈을 쓰면 이 결과와 다를 수 있습니다. 웹호스팅 관리 화면 또는 서버 설정에서 웹 요청을 처리하는 버전·설정 파일·실행 방식을 별도로 대조하세요. 설정과 환경 정보가 많이 나오는 phpinfo 페이지를 공개 인터넷에 올려 확인하는 방법은 이 글에서 사용하지 않았습니다.

2. Windows와 리눅스의 패치 확인 기준 나누기

Windows 공식 패키지: PHP 8.5.12-1을 실제로 내려받아 배포 페이지의 SHA256과 일치하는지 확인했습니다. 실행 결과 첫 줄은 다음과 같았습니다.

PHP 8.5.12 (cli) (built: Oct 26 2026 09:51:07) (NTS Visual C++ 2022 x64)

이것은 실제 실행 출력 원문이며 화면 캡처는 아닙니다. 패키지 이름의 -1이 런타임 버전에 붙지 않았습니다. 따라서 php -v의 숫자만으로 Windows 재배포 적용 여부를 판정하지 말고, 다운로드한 패키지·해시·공급자 설치 기록도 확인하세요. 이번 분리 실행에서 cURL이 보고한 Brotli는 brotli/1.2.1이었습니다.

리눅스 배포판 패키지: 표시된 PHP 버전이 표보다 낮아도 공급자가 보안 수정만 가져와 적용했을 수 있습니다. 반대로 오래된 숫자라는 이유만으로 패치됐다고 가정할 수도 없습니다. 해당 배포판의 CVE 공지에서 설치된 패키지의 전체 릴리스 번호를 대조하세요. 이 글에서는 Ubuntu·Debian·RHEL 각각의 패키지 업데이트를 실제 실행하지 않았으므로 공통 설치 명령 하나로 완료된다고 안내하지 않습니다.

3. 세션 설정은 패치 대체가 아닌 추가 조치

PHP 공식 안내는 다음 정기 버그 수정 전까지 업로드 진행 상태 기능을 끄는 방안을 제시합니다. 아래 한 줄은 웹 요청 시작 전에 적용되는 php.ini 또는 관리자 설정에 넣을 값입니다. 기존 설정을 백업하고 같은 항목이 다른 곳에서 덮어쓰이지 않는지 확인한 뒤 담당 관리자가 적용해야 합니다.

session.upload_progress.enabled=0

이는 파일 업로드 전체를 끄는 값이 아니라 PHP의 세션 기반 업로드 진행 상태 기능을 끄는 값입니다. 해당 기능에 의존한 진행률 표시에는 영향이 있을 수 있습니다. 설정 후 관련 작업 프로세스를 모두 재시작하고 실제 웹 환경의 적용값을 확인해야 합니다. PHP 코드 안의 ini_set()이나 FPM .user.ini에만 넣어 요청 시작 전 보호가 됐다고 생각하면 안 됩니다.

PHP 8.5에서는 추가로 fatal_error_backtraces=0도 공식 완화책에 포함됩니다. 이는 확인된 특정 경로의 위험을 줄이는 조치이며 모든 변형을 막는 해결책은 아닙니다. 오류 메시지 숨기기나 WAF 규칙만으로 패치를 대체하지 마세요.

격리한 8.5.12 CLI에서 두 설정의 초기값은 각각 1이었고, 별도 시험용 설정 파일을 지정한 뒤에는 둘 다 0으로 읽혔습니다. 웹서버에 실제 반영됐다는 시험은 아닙니다. 관리자 권한으로 재시작하기 전에는 영향 범위와 점검 시간을 정해야 합니다.

4. 적용 후 서비스와 패치 근거를 함께 남기기

변경 전 설정·패키지 목록·복구 가능한 백업을 남기고 호환성을 시험한 뒤 업데이트합니다. 적용 후에는 모든 관련 PHP 프로세스가 새 바이너리를 쓰는지 확인하고 로그인·세션·업로드·예약 작업과 오류 로그를 점검하세요. 단순히 메인 화면이 열린다는 사실만으로 전체 점검을 끝내지 마세요. 지금까지의 흐름은 운영 점검 권고이며 이 글에서 독자의 서버에 실행한 작업은 아닙니다.

즉시 수정할 수 없는 서버는 공식 보안 지침에 따라 외부 노출 중단을 포함한 임시 대응을 검토해야 합니다. 메모리 한도 해제 같은 고급 완화 설정을 서버 자원 제한과 함께 설계하지 않고 그대로 복사하면 가용성 문제가 생길 수 있어 여기서는 일괄 적용 예제로 제공하지 않습니다.

이미 이상 파일·수상한 계정·변조가 발견됐다면 패치 적용만으로 침해가 제거됐다고 볼 수 없습니다. 로그와 증거를 보존하고 별도의 사고 대응을 진행하세요.

PHP 접속 IP·국가 구분은 별도의 접근 제어 문제입니다. 해외 IP 차단을 해 두었더라도 이번 PHP 런타임 패치를 대신하지는 못합니다.

출처와 확인 범위

확인일: 2026년 10월 27일. 직접 시험: Windows x64 NTS PHP 8.5.12-1, 배포 ZIP SHA256 일치, php -v·php --ini·격리 ini_get/cURL 버전 출력. 8.2·8.3·8.4 실행, 운영 웹서버 재시작·취약점 재현·방어 효과 검증은 하지 않았습니다. 이후 공지가 나오면 이 글의 기준 버전과 임시 조치도 다시 대조해야 합니다.

댓글