한 줄 요약
2026년 10월 21일 PHP 프로젝트가 인증 없이 원격 코드 실행으로 이어질 수 있는 본체 취약점 2건을 고친 PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35를 냈습니다. PHP로 웹 요청을 받는 서버라면 버전을 확인하고 업데이트한 뒤 모든 PHP 워커를 재시작하는 것이 가장 먼저 할 일입니다.
이번 달에는 PHP 쪽 소식이 한꺼번에 몰렸습니다. PHP 본체의 원격 코드 실행 취약점 2건(흔히 PHP2Shell로 부릅니다)에 이어, 10월 23일에는 아직 패치가 나오지 않은 세션 관련 후속 취약점의 임시 조치 안내가 나왔습니다. 프레임워크 쪽에서는 Laravel이 토큰 기반 API 가드의 인증 우회 취약점을 고쳤고, 워드프레스에서는 Bricksforge 플러그인의 파일 업로드 취약점이 공개 직전부터 공격 시도에 쓰였다는 보고가 있었습니다.
한국인터넷진흥원(KISA)은 보호나라에 PHP 보안 업데이트 권고와 기업 대응 수칙을 차례로 올렸고, 과학기술정보통신부는 10월 22일 민간 분야 사이버위기 경보를 '관심'에서 '주의'로 올렸습니다. 사이트를 PHP로 운영하거나 외주로 맡긴 빌더라면 이번 주 안에 한 번은 점검해 두실 만한 내용입니다.
아래에서는 건별로 무슨 일이 있었는지, 우리 서버가 해당되는지 읽기 전용으로 확인하는 법, 당장 할 일과 재발 방지 순서로 정리했습니다.
한눈에 보기
| 이슈 | 공개일 | 영향 범위 | 해결 버전 | 1차 출처 |
|---|---|---|---|---|
| PHP 본체 RCE 2건 (CVE-2026-109618, CVE-2026-109619) | 2026-10-21 | 8.2.35, 8.3.36, 8.4.27, 8.5.12 이전 버전. 8.1 이하는 공식 업데이트 없음 | 8.2.35 / 8.3.36 / 8.4.27 / 8.5.12 | php.net, KISA |
| PHP 세션 후속 취약점 (CVE-2026-115560) | 2026-10-23 | 특정 설정·코드 조합에서만 해당 | 미배포(차기 정기 릴리스 예정) | php.net, KISA |
| Laravel TokenGuard 인증 우회 (CVE-2026-114509) | 2026-10-19 | 12.68.0 미만, 13.0.0 이상 13.29.0 미만 | 12.68.0 / 13.29.0 | GHSA, KISA |
| 워드프레스 Bricksforge 파일 업로드 (CVE-2026-85097) | 2026-10-08 | 3.1.8.9 이하 | 3.1.8.10(3.x) / 4.0.0(4.x) | NVD, Bricksforge |
무슨 일이 있었나
1. PHP 본체 원격 코드 실행 2건 (PHP2Shell)
PHP 프로젝트는 10월 20일 다음 날 14:00 UTC에 치명적 보안 릴리스를 낸다고 미리 알렸고, 10월 21일 보안 공지와 함께 PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35를 배포했습니다. PHP Foundation 글에 따르면 원래 10월 22일 예정이던 릴리스를 정보 유출 뒤 하루 앞당겼습니다.
고친 취약점은 두 가지입니다.
- CVE-2026-109618 (GHSA-w8hw-w9fx-j79w): 메모리 부족(OOM) 처리 과정에서 요청 데이터가 덜 초기화된 상태로 남고, 이후 정리 단계가 이 데이터를 유효한 것처럼 다룰 수 있는 문제입니다.
- CVE-2026-109619 (GHSA-6wmf-4rv5-p3rp): 요청이 쓰던 내부 상태가 메모리 해제 뒤에도 남아, 같은 워커가 처리하는 다음 요청이 그 상태를 쓸 수 있는 문제입니다.
두 건 모두 CVSS v4.0 기준 9.2(Critical)입니다. GHSA는 각 브랜치에서 8.2.35, 8.3.36, 8.4.27, 8.5.12 이전 버전을 영향 대상으로 적고 있습니다. php.net 공지는 PHP-FPM, Apache mod_php, php-cgi, FrankenPHP, LiteSpeed를 포함해 웹 요청을 처리하는 모든 PHP 설치가 위험하다고 밝혔고, 그중 mod_php의 위험이 가장 크다고 봤습니다. 취약점이 언어 본체에 있어서 워드프레스든 Laravel이든 직접 만든 코드든 PHP 버전만 맞으면 해당됩니다.
PHP 8.1 이하는 PHP 프로젝트의 업데이트가 더 나오지 않습니다. 다만 사안이 심각해서 PHP 보안팀이 7.4, 8.0, 8.1용 최소 소스 백포트를 따로 제공했고, 일부 배포판과 LTS 업체도 백포트를 제공한다고 공지에 적었습니다. PHP 8.2도 지원 버전 표 기준으로 2026년 12월 31일에 보안 지원이 끝납니다.
국내에서는 KISA가 10월 21일 PHP 제품 보안 업데이트 권고를, 10월 22일 PHP2Shell 기업 보안 대응 수칙을 올렸습니다. 같은 날 과학기술정보통신부는 민간 분야 사이버위기 경보를 '주의'로 올리고 호스팅을 쓰는 소상공인은 호스팅 업체에 업데이트 적용 여부를 문의하라고 안내했습니다.
2. 아직 패치가 없는 세션 후속 취약점 (CVE-2026-115560)
10월 23일 php.net에 세션 업로드 진행률 관련 안내가 추가로 올라왔습니다. 아래 세 조건이 모두 맞을 때만 원격 코드 실행 경로가 생기는 취약점입니다.
- 설정에서
session.serialize_handler를php_binary또는php_serialize로 지정 - 애플리케이션이
session_start()전에ini_set()으로 그 값을php로 바꿈 - 세션 업로드 진행률(
session.upload_progress.enabled)이 켜져 있음(기본값)
PHP 프로젝트는 이 조합이 실제로는 드물다고 보고 다음 정기 릴리스에서 고치기로 했습니다. KISA 임시 조치 권고는 10월 21일 업데이트로는 해결되지 않는다는 점을 짚고, 그때까지 session.upload_progress.enabled=0을 적용하라고 권고합니다. PHP2Shell 임시 조치로 이 설정을 이미 넣었다면 그대로 두면 됩니다.
3. Laravel 토큰 기반 API 가드 인증 우회 (CVE-2026-114509)
Laravel은 10월 19일 GHSA-f9x3-7vq9-cph6를 공개했습니다. 표준 토큰 기반 API 가드로 설정한 TokenGuard가 문자열이 아닌 자격 증명 값을 거르지 못해, MySQL·MariaDB를 쓰는 일부 구성에서 인증 없이 다른 사용자 계정으로 로그인될 수 있는 문제입니다. CVSS v4.0 기준 9.2입니다. 해결 버전은 12.68.0과 13.29.0이며, KISA도 10월 23일 Laravel 제품 보안 업데이트 권고를 냈습니다. 권고문에는 별도 우회 설정이 없고 업그레이드만 해결책으로 제시돼 있습니다.
PHP2Shell과는 별개의 문제라서, PHP를 업데이트했더라도 Laravel 버전은 따로 확인해야 합니다.
4. 워드프레스 Bricksforge 플러그인 파일 업로드 (CVE-2026-85097)
NVD에 10월 8일 등록된 이 취약점은 Bricksforge 3.1.8.9 이하에서 인증 없이 임의 파일을 올릴 수 있는 문제입니다. Wordfence(CNA)는 CVSS 3.1 기준 9.8, Patchstack은 10.0으로 평가했습니다. Patchstack은 10월 8일 글에서 자사 텔레메트리가 10월 7일 21:47 UTC에 첫 공격 시도를 기록했다고 밝혔습니다.
Bricksforge 변경 이력에 따르면 이 취약점은 3.x에서 3.1.8.10, 4.x에서 4.0.0에 고쳐졌습니다. 이어서 10월 8일 4.0.1에서 Pro Forms 파일 업로드 보안 수정이, 10월 13일 4.0.2에서 REST 엔드포인트 강화가 나왔고, 4.0.2 변경 이력은 저장해 둔 API 키를 예방 차원에서 새로 발급하라고 권합니다. 지금 설치한다면 최신 4.x를 쓰는 편이 가장 단순합니다.
우리에게 해당되는지 확인하는 법
아래는 모두 읽기 전용 점검입니다. 설정이나 파일을 바꾸지 않습니다.
PHP 버전: CLI와 웹 서버가 다를 수 있습니다
php -v
php -v는 명령줄(CLI) PHP의 버전만 보여 줍니다. KISA 대응 수칙도 짚었듯이 서버에 PHP가 여러 개 깔려 있으면 웹 서비스가 실제로 쓰는 PHP-FPM이나 Apache 모듈은 다른 버전일 수 있습니다. 점검 기준은 다음과 같습니다.
- 웹 서비스가 실제로 쓰는 PHP(FPM 서비스, Apache 모듈, 컨테이너 안의 PHP)를 각각 확인합니다.
- 배포판 패키지는 버전 번호가 그대로인 채 패치가 백포트되기도 합니다. 패키지 변경 이력(changelog)에 CVE-2026-109618, CVE-2026-109619가 반영됐는지 확인합니다.
- Docker 이미지, 설치형 장비·솔루션에 들어 있는 PHP도 따로 봅니다. 네덜란드 NCSC가 PHP를 포함한 제품별 상태를 모아 둔 NCSC-NL/php2shell이 참고가 됩니다.
- 자산 목록이 아니라 지금 실제로 돌고 있는 서버를 기준으로 봅니다. 외주로 만든 사이트, 끝난 이벤트 페이지, 테스트 서버, 관리자 페이지가 자주 빠집니다.
- 호스팅을 쓰고 있다면 호스팅 업체에 적용 여부를 문의합니다.
판정 기준은 단순합니다. 8.2.35, 8.3.36, 8.4.27, 8.5.12 이상(또는 배포판 패치 반영)이면 PHP2Shell 2건은 해결된 상태이고, 8.1 이하라면 백포트 적용이나 지원 버전 전환이 필요합니다.
PHP 설정: 세션 업로드 진행률
session.upload_progress.enabled 값은 php.ini, PHP-FPM 풀 설정, 웹 서버 설정에서 확인합니다. CLI와 웹 서버가 서로 다른 php.ini를 읽는 경우가 많으니, 웹 서비스가 쓰는 설정 파일을 기준으로 봅니다. CVE-2026-115560 해당 여부는 애플리케이션 코드에서 ini_set()으로 session.serialize_handler를 바꾸는 곳이 있는지 검색해 보면 판단할 수 있습니다.
Composer 의존성: Laravel 등
composer show laravel/framework
composer audit --locked
composer show는 설치된 패키지의 버전을, composer audit는 설치된 패키지를 보안 공지 등 정책에 대조한 결과를 보여 줍니다. --locked를 붙이면 vendor 폴더가 아니라 composer.lock 기준으로 검사합니다. Laravel이 12.68.0 미만이거나 13.x에서 13.29.0 미만이면 업데이트 대상입니다.
워드프레스 플러그인
wp plugin list
WP-CLI의 wp plugin list는 설치된 플러그인의 이름·활성 상태·버전·업데이트 여부를 보여 줍니다. WP-CLI가 없으면 관리자 화면의 플러그인 목록에서 같은 정보를 볼 수 있습니다. Bricksforge가 3.1.8.9 이하라면 바로 업데이트 대상입니다. 비활성 플러그인도 파일은 서버에 남아 있으니 함께 봅니다.
당장 할 일
1. 업데이트하고, 반드시 재시작
PHP를 8.2.35, 8.3.36, 8.4.27, 8.5.12 이상으로 올리거나 배포판 보안 패키지를 적용합니다. 인터넷에 공개된 서버부터 합니다. KISA 대응 수칙의 핵심 문장은 "재시작하지 않으면 이전 버전이 메모리에서 계속 동작한다"는 것입니다. PHP-FPM, Apache, php-cgi, FrankenPHP, LiteSpeed 등 PHP를 돌리는 서비스를 모두 재시작하고, 컨테이너는 새 이미지로 다시 배포합니다. 그다음 웹 서비스가 쓰는 PHP 버전이 실제로 바뀌었는지 다시 확인합니다.
Laravel은 12.68.0 또는 13.29.0 이상으로, Bricksforge는 최신 버전으로 올립니다.
2. 바로 못 올리면 임시 조치
php.net과 KISA가 제시한 임시 조치는 아래와 같습니다. 둘 다 임시 조치로는 완전히 막을 수 없고 업데이트만이 완전한 해결이라고 분명히 적고 있습니다.
session.upload_progress.enabled=0적용 후 모든 워커 재시작. php.ini, FPM 풀, 서버 설정처럼 요청 처리 전에 적용되는 곳에 넣고,ini_set()이나.user.ini에 기대지 않습니다.memory_limit=-1을 애플리케이션이 덮어쓸 수 없는 방식(예: FPM 풀의php_admin_value)으로 지정합니다.post_max_size를 낮춥니다. 업로드가 필요 없으면 8M, 필요하면 32M 수준으로 두고upload_max_filesize는 그보다 작게 유지합니다.- PHP 8.5라면
fatal_error_backtraces=0을 추가합니다. - 웹 방화벽·웹 서버·프록시에서 요청 크기를 제한하고, 업로드가 필요 없는 서비스는 multipart 요청을 막습니다. 웹 방화벽을 쓴다면 최신 차단 규칙이 들어갔는지 확인합니다.
php.net은 RLIMIT_AS, RLIMIT_DATA로 메모리를 제한하는 방식은 오히려 취약한 경로를 일으킬 수 있으니 대신 쓰지 말라고 적었습니다. 적용할 패치도 임시 조치도 어렵다면 KISA는 외부 접속 차단이나 서비스 일시 중단을 검토하라고 권고합니다.
3. 로그와 파일 점검
KISA는 취약점 정보가 유출된 10월 20일 이후 기록을 전부 보고, 가능하면 그 이전 기록도 보라고 권고합니다. 주요 점검 항목은 다음과 같습니다.
- PHP 페이지에 들어온 비정상적으로 큰 요청과 그 뒤의 HTTP 500 오류
- 원인 모를 PHP 재시작, 비정상 종료(segfault), 메모리 부족 오류
- 웹 서버 계정이 셸이나 파일 다운로드 도구를 실행한 흔적
- 웹·업로드·임시 폴더에 새로 생기거나 바뀐 PHP 파일(웹셸)
- 홈페이지나 결제 페이지에 끼어든 외부 스크립트
- 웹 서버가 모르는 외부 주소로 연결한 흔적
Bricksforge를 썼다면 Patchstack이 안내한 대로 업로드 폴더(특히 wp-content/uploads/bricksforge/tmp/)에 예상하지 못한 PHP 파일이 있는지 봅니다.
4. 인증 정보 교체
KISA 대응 수칙은 이번 취약점이 서버 메모리에 있던 비밀번호·접속 토큰·API 키를 유출할 수 있다고 봅니다. 업데이트 전에 인터넷에 노출됐던 서버라면 DB 비밀번호, 외부 연동 API 키, 관리자 비밀번호를 교체하고, 침해 흔적이 나온 서버는 반드시 교체합니다. 기록상 이상이 없어도 안전이 보장되지는 않는다는 점도 함께 적혀 있습니다.
5. 침해가 의심되면 순서대로
KISA가 안내한 순서는 격리 → 신고 → 증거 확보 → 조치입니다. 서버를 끄거나 재시작하지 말고 외부 접속만 막은 상태에서 보호나라에 신고하고, 로그·실행 중인 프로세스·네트워크 연결 정보를 먼저 보존한 뒤 업데이트·웹셸 제거·인증 정보 교체를 진행합니다. 재시작을 먼저 하면 메모리에 남은 흔적이 사라집니다.
하지 말아야 할 것: 출처 모를 PoC 실행
KISA와 과기정통부 모두 인터넷에 도는 공격 검증 코드(PoC)를 내려받아 실행하지 말라고 당부했습니다. 악성코드가 숨어 있는 경우가 많습니다. 취약 여부는 PoC가 아니라 버전 확인과 로그 점검으로 판단합니다.
재발 방지
이번처럼 큰 공지가 한 주에 몰려도 덜 흔들리려면 평소 구조가 중요합니다.
- 버전 목록을 살아 있게 유지합니다. 운영 중인 사이트마다 PHP 버전, 프레임워크·CMS 버전, 설치 플러그인, 담당자를 한 표로 관리하면 다음 공지가 나왔을 때 대상 서버를 바로 고를 수 있습니다. 외주 사이트와 오래된 이벤트 페이지를 꼭 포함합니다.
- 의존성 검사를 자동화합니다. CI에
composer audit를 넣거나 GitHub의 Dependabot처럼 Composer를 지원하는 알림을 켜 두면, 사람이 공지를 찾아보기 전에 경고를 받을 수 있습니다. - 지원 종료 일정을 미리 잡습니다. PHP 8.2는 2026년 12월 31일에 보안 지원이 끝납니다. KISA도 8.3 이상 전환을 권장했습니다. 지원 종료 버전에서는 이번 같은 패치를 공식적으로 받을 수 없습니다.
- 웹 서버 권한을 줄입니다. 웹 서버 계정이 코드 폴더에 쓰지 못하게 하고, 업로드 폴더에서는 PHP가 실행되지 않게 막아 두면 파일 업로드 취약점이 뚫려도 피해 범위가 줄어듭니다. Bricksforge도 4.0.2에서 임시 업로드 폴더가 항상 코드 실행을 막도록 바꿨습니다.
- WAF와 가상 패치를 보조 수단으로 둡니다. 업데이트까지 걸리는 시간을 버는 데 쓰고, 업데이트를 대신하지는 않습니다.
- 안 쓰는 것은 지웁니다. 비활성 플러그인, 끝난 캠페인 사이트, 쓰지 않는 PHP 기능은 그 자체로 점검 대상을 늘립니다.
AI 에이전트로 점검을 돕는 방법
여러 저장소와 서버를 운영한다면 코딩 에이전트에게 읽기 전용 점검을 맡기는 것도 방법입니다. 예를 들어 저장소마다 composer.lock, Dockerfile의 베이스 이미지, 워드프레스 플러그인 목록을 모아 위 표의 해결 버전과 대조한 목록을 만들고, 업데이트가 필요한 곳에는 버전을 올리는 PR 초안을 쓰게 할 수 있습니다.
이때 지킬 선은 분명히 해 둡니다. 운영 서버 쓰기 권한과 비밀 값은 에이전트에게 주지 않고, 판정 근거는 공식 공지 링크로 남기게 하며, 공격 코드는 찾거나 실행하지 않게 합니다. 업데이트 적용과 재시작은 사람이 확인하고 진행합니다.
참고 자료
- PHP: 보안 공지(2026-10-21) · 세션 업로드 진행률 안내(2026-10-23) · 지원 버전 표 · PHP Foundation 글
- GitHub 보안 권고: GHSA-w8hw-w9fx-j79w · GHSA-6wmf-4rv5-p3rp · Laravel GHSA-f9x3-7vq9-cph6
- NVD: CVE-2026-109618 · CVE-2026-109619 · CVE-2026-114509 · CVE-2026-85097
- KISA 보호나라: PHP 제품 보안 업데이트 권고 · PHP2Shell 기업 보안 대응 수칙 · CVE-2026-115560 임시 조치 권고 · Laravel 제품 보안 업데이트 권고
- 정부 안내: 과학기술정보통신부 사이버위기 경보 상향
- 워드프레스: Bricksforge 변경 이력 · Patchstack 분석
- 점검 도구 문서: PHP CLI 옵션 · Composer CLI · WP-CLI plugin list · NCSC-NL/php2shell
마치며
하이프마크 빌더 커뮤니티는 앞으로도 빌더가 바로 확인하고 대응할 수 있는 보안 소식을 공식 공지 기준으로 정리해 공유하려고 합니다. 빌더 여러분께 도움이 될 좋은 자료들을 계속 모아 나누겠습니다.