· 2026-10-22 전체

전문가들이 20년 넘게 못 뚫은 PHP 결함, AI와 함께 뚫렸다 — 유럽 정부 사이트가 스스로 문 닫은 72시간

2004년에 처음 지적된 PHP 결함을 20년 넘게 아무도 실제 공격으로 잇지 못했다. 올여름 한 연구자가 첫 번째 구멍을 찾아 AI에 넘기자, AI가 몇 시간 만에 두 번째와 세 번째를 찾았다. 로그인 없이 HTTP 요청 하나로 서버를 넘겨받는 취약점이다.

10월 21일 패치가 나오자 네덜란드 정부 포털, 로테르담항, 덴마크 학교망, 핀란드 공공망, 프랑스 내무부 사이트가 스스로 문을 닫았다. 같은 날 GitLab에도 만점(10.0) 취약점이 터졌다. 레이펑왕 제목은 "PHP는 첫 총성일 뿐"이다.

출처: 레이펑왕 10/22

PHP2Shell

취약점 번호는 CVE-2026-109618과 109619, 심각도 9.2점이다. PHP 5.4 이후 12년치 버전이 모두 해당된다. 웹사이트 코드가 "Hello World" 한 줄이어도 PHP만 해당 버전이면 뚫린다. 인터넷 스캔 업체 Censys에 따르면 PHP 서버 260만 대 중 150만 대가 패치 전이었다. 패치는 8.2~8.5에만 나왔고, 지원이 끝난 8.1 이하는 앞으로도 패치가 없다.

PHP 팀은 10월 20일 "내일 14:00 UTC 보안 릴리스"를 미리 알렸다. 평소엔 패치와 공지를 함께 냈다. 아마존 보안팀은 공개 나흘 전인 10월 17일 미끼 서버에서 이 취약점을 노린 공격을 잡았다고 밝혔다. 위키백과와 인터넷 아카이브도 일부 시스템을 멈췄다.

원리

PHP가 메모리 부족으로 요청 처리를 멈출 때 뒷정리를 다 하지 않는다. 남은 찌꺼기 상태를 다음 요청이 그대로 써서 코드가 실행된다. PHP는 요청 크기를 8MB, 메모리를 128MB로 제한하는데, 중첩된 폼 필드를 잔뜩 넣으면 8MB가 안 되는 요청으로 128MB를 다 채울 수 있다.

같은 부류의 문제는 2004년 PHP 보안 연구자 Stefan Esser가 처음 지적했다. 2020년 버그 리포트, 2024년 OSTIF·Quarkslab 감사도 단서를 잡았지만 원격 실행까지는 증명하지 못했다. 버전·운영체제·설정마다 메모리 상태가 달라, 한 서버에서 되는 공격이 다른 서버에선 안 됐기 때문이다.

Calif Research의 Ryan Austin은 첫 번째 취약점을 찾은 뒤 그 코드 패턴을 검색 규칙으로 만들어 AI에 넘겼다. AI는 몇 시간 만에 두 번째와 세 번째를 찾았다. 그는 이 사슬로 WordPress, MediaWiki 등 PHP 앱 11개를 뚫는 데 성공했다. 구글 계열 Wiz와 OpenAI도 AI로 같은 취약점을 따로 찾았다. 레이펑왕은 "공격이 어려우면 사실상 안전하다는 보안 업계의 암묵적 규칙이 깨졌다"고 썼다.

GitLab 10.0

같은 날 GitLab은 심각도 10.0 취약점(CVE-2026-110264)을 고쳤다. Ruby 정규식 엔진 Onigmo의 정수 오버플로로, 공개 저장소에 악성 정규식이 든 Org 파일을 올리면 미리보기 화면을 그릴 때 서버가 넘어간다. 로그인이 필요 없고, 2014년 GitLab 7.0부터 있던 문제다. GitLab은 보통 최신 3개 버전만 고치는데 이번엔 7개 버전에 패치를 냈다. 같은 연구자가 한 달 사이 신고한 네 번째 GitLab 정규식 엔진 취약점이다.

GitLab이 뚫리면 소스 코드와 키를 빼 가는 데 그치지 않는다. 코드에 백도어를 심으면 정상 배포를 타고 고객사까지 퍼진다.

같은 72시간

출처