PHP2Shell 공지를 보고 확인했더니 PHP가 하나도 없었다
10월 21일에 PHP와 Node.js가 같은 날 보안 패치를 냈다. PHP 쪽은 사람들이 PHP2Shell이라고 부르고 있고, Node 쪽은 Node2Shell이라는 이름이 붙었다. 이름부터가 좀 무섭다. 뒤에 Shell이 붙으면 대개 남의 서버에서 명령을 실행할 수 있다는 뜻이니까. 회사에서도 바로 지시가 내려왔다. 전 프로젝트 점검하고, 외부 IP 붙은 서버는 전수조사하라는 내용이었다. 회사 쪽 일은 회사 쪽대로 하고, 나는 퇴근하고 개인 프로젝트랑 예전에 알바로 했던 것들을 한번 열어 봤다. 그런데 열어 보고 나니 이번 글은 패치 이야기가 아니라 7년 전 이야기가 됐다. PHP2Shell과 Node2Shell, 둘은 위험한 정도가 다르다 찾아온 사람은 아마 이게 뭔지, 내 서버가 해당되는지부터 궁금할 테니 그것부터 적는다. PHP2Shell은 CVE 두 건이다. CVE-2026-109618 과 CVE-2026-109619이고, 둘 다 인증 없이 원격에서 코드를 실행할 수 있는 취약점이다. CVSS 4.0 기준 9.2점이다. 하나는 메모리가 부족할 때 PHP가 요청 데이터를 반쯤 만든 상태에서 멈추고, 정리 단계에서 그 망가진 데이터를 멀쩡한 걸로 취급하는 문제다. 다른 하나는 요청이 끝난 뒤에도 그 요청이 쓰던 상태가 남아 있다가 같은 워커가 받은 다음 요청에서 다시 쓰이는 문제다. PHP 공식 공지 기준으로 고쳐진 버전은 8.5.12, 8.4.27, 8.3.36, 8.2.35다. 그보다 낮은 버전은 전부 해당된다. 8.1 이하는 PHP 프로젝트가 더 이상 정규 릴리스를 내지 않는다. 대신 보안팀이 7.4, 8.0, 8.1용으로 최소한의 소스 백포트를 따로 공개해 뒀고, 배포판이나 LTS 벤더 중에도 백포트를 내는 곳이 있다고 한다. 직접 빌드하거나 벤더 패키지를 쓰는 게 아니면 버전을 올리는 수밖에 없다. 공지에도 설정을 바꾸는 건 부분적인 완화일 뿐이고 업데이트만이 완전한 해결이라고 적혀 있다. 실제 공격이 있었는지는 보도마다 말이 ...