PHP2Shell (CVE-2026-109618 & CVE-2026-109619) 취약점에 대한 시리즈 글 3번째입니다.
지금까지 알려진 바에 따르면, 이번 취약점은 이렇게 드라마틱하게 나올 물건이 아니었습니다. 그냥 평소처럼 보안패치를 릴리즈하고 유저들이 업데이트하는 동안 보안 전문가들이 취약점을 파악하는 순서로 갔다면 큰 문제 없이 마무리되었을 텐데, 양심에 털난 사람들이 취약점 정보를 유출시키는 바람에 릴리즈 과정에서 대혼란이 일어난 거죠.
대부분의 오픈소스 프로젝트에는 보안취약점 같이 민감한 정보를 공유하는 핵심 써클이 있습니다. 라이믹스에도 있어요. 누구인지 공개할 수는 없지만 (공개하면 그 분에게 공격이 집중될 테니...) 코어 개발에 관심이 많고, 보안취약점 처리 방법에 대해 조언을 해주실 수 있는 몇몇 분들께 미리 알려드리지요. 공개적으로 테스트할 수 없는 보안패치의 특성상, 그렇게라도 검토할 기회를 가져야 안심하고 릴리즈할 수 있거든요.
PHP처럼 전세계 인터넷 인프라에서 중요한 역할을 하는 소프트웨어라면, 보안패치를 공개하는 날짜와 시간에 대해서도 주요 리눅스 배포판, 주요 플랫폼 기업, 클플 같은 CDN이나 보안 기업들과 협의를 합니다. 다양한 환경에서 PHP를 사용하는 모든 유저들에게 동시에 패치를 제공할 수 있도록요. 이번 보안패치는 10월 22일에 공개하기로 약속이 되어 있었다고 해요.
그런데 취약점 정보를 공유받은 많은 사람들 중 누군가가 10월 20일에 정보를 유출시켰고, 해당 취약점 발견에 직접 기여했던 보안 기업은 한 술 더 떠서 그 취약점을 악용하는 시나리오를 담은 영상을 공개했습니다. 실수라고 말했지만, 취약점을 발견한 공을 OpenAI가 가로챌까 봐 선수를 쳤다는 의심이 드는 대목이죠. 영상 품질이 조악하고 애니 캐릭터(시구레 우이)로 여기저기 가려 놓았지만, AI로 분석하면 대충 어떤 원리로 해킹이 가능한지 알아내기에 충분한 단서였습니다.
이 때부터 어둠의 세계에서는 실제 해킹 방법이 돌아다니기 시작합니다. 엠바고를 지키기로 약속했던 또다른 보안 기업은 그 광경을 보고 패닉한 나머지, 10월 21일 아침부터 보안패치가 적용된 바이너리를 고객들에게 뿌려 버립니다. 고객들을 보호하려는 의도였을지도 모르지만, 이제 누군가가 그 바이너리를 분석해서 보안패치의 작동 원리를 정확하게 알아내는 것은 시간 문제가 되었습니다.
당황한 PHP 개발팀은 일정을 앞당겨 10월 21일 오후에 보안패치를 공개하기로 합니다. 우분투 PPA는 아직 준비가 되지 않았고, remi 저장소 운영자도 휴가에서 돌아오지 않았는데, 그나마 엠바고를 지키고 있던 나머지 기관들과 급하게 다시 협의한 것이죠. 그 후에 일어난 대혼란은 우리가 목격한 그대로입니다.
출처: PHP 개발팀 블로그 https://thephp.foundation/blog/2026/10/21/todays-php-security-release-and-how-were-strengthening-php-security/
1. 앞으로는 대기업이 아니라면 취약점 정보를 사전에 공유받지 못하게 될 가능성이 높아졌습니다.
한 번도 아니고 무려 세 차례에 걸쳐 엠바고 위반이 일어났다는 것이 충격적입니다. 시간 맞춰 준비하라고 배려해 주었더니, 홍보 효과를 선점하려고 배신을 했어요. 잃어버린 신뢰를 회복하려면 긴 시간이 걸릴 것입니다.
AI가 쉴새없이 보안취약점을 찾아대는 통에, 중소규모 보안 기업들이 정당한 실력만으로는 서비스를 차별화하기가 어려워졌다는 방증이기도 합니다. 예전에는 이런 정신나간 엠바고 위반이 흔치 않았거든요.
오픈소스 커뮤니티는 신뢰가 없으면 성립할 수 없습니다. 신뢰를 기반으로 이윤 추구도 허용하지만, 그 우선순위가 뒤집힌다면 우리가 종종 비판하던 상용 플랫폼보다도 더 비참한 모습으로 전락하고 맙니다.
2. 이 모든 인프라가 극소수의 자원봉사자들에게 얼마나 많이 의존하고 있는지 뼈저리게 느꼈습니다.
OS에서 제공하는 기본 버전이 아닌 자기가 원하는 버전을 선택해서 설치하는 사람이 굉장히 많거든요. 아니, 노드나 파이썬 같은 다른 언어에서는 자신이 원하는 버전을 설치하는 것을 너무나 당연하게 생각하니, PHP가 특별하다고 볼 것도 없습니다. 7.4를 쓰고 싶은 사람은 7.4를 쓰고, 8.4를 쓰고 싶은 사람은 8.4를 쓰면 되는 거예요.
그런데 우분투에서 자기가 원하는 버전을 설치하고 업데이트하려면 Ondřej Surý라는 한 사람이 운영하는 PPA 저장소를 사용하는 것이 정석이고, 데비안에서 쓰는 deb.sury.org도 같은 분이 운영하는 저장소입니다. 우분투에서 이 분에게 얼마나 자원을 안 주는지, 개인 저장소도 멀쩡하게 트래픽을 버티는데 우분투 PPA 서버는 밤새도록 상태가 메롱이었습니다.
록키 등 rpm 계열의 운영체제를 쓰는 사람들은 Remi Collet이라는 분이 1년에 꼴랑 600유로의 예산으로 운영하는 remi 저장소를 사용하여 PHP 버전을 선택합니다. 공식 dnf module은 보안패치를 제때 올려주지 않기 때문에 선택의 여지가 없어요. 이 분이 휴가를 가거나 사고라도 당하시면... 업데이트할 때마다 소스를 컴파일해야 하던 원시 시대로 돌아가는 것입니다.
우리가 당연하게 여기는 핵심 IT 인프라 가운데 이렇게 한두 명의 선의에 기대어 유지되는 것이 너무나 많습니다. 대부분 인터넷 초창기에 열정으로 시작하신 분들일 텐데, 이제 모두 나이들고 다른 일로 바빠서 크게 신경을 쓰지 못하고 있을 수도 있어요. 오픈소스 생태계는 한편으로는 무척 안정적인 것 같지만, 의외로 쉽게 부스러지곤 합니다. 잘못 업데이트한 라이브러리 하나가 전세계 모든 홈페이지의 몇 %를 망가뜨릴 수도 있어요.
적절한 xkcd: https://xkcd.com/2347/
3. 보안취약점에 대응해야 하는 이유와 시간표가 완전히 달라졌습니다.
예전에는 중요한 코어 보안패치를 몇 년씩 미뤄두어도 특별히 원수진 사람이 없다면 해킹당할 걱정은 하지 않고 살았습니다. 정치적으로 예민한 싸움에 말려들거나, 유저들끼리 다투기라고 하면 그제서야 디도스 걱정을 하곤 했죠. 지금도 그런 생각으로 커뮤니티를 운영하는 분들이 많이 남아 있습니다.
그런데 이제는 무슨 이유가 있어서 해킹을 하는 것이 아닙니다. AI 에이전트가 알아서 목표물을 찾아 다니고, 목표를 찾으면 지금까지 알려진 취약점을 자동으로 돌려가며 뚫릴 때까지 이것저것 시도해 봅니다. 뚫리면 자동으로 개인정보를 탈취하거나, 코인 채굴기 같은 악성 코드를 돌리거나, 그나마 착한(?) 녀석들은 스팸을 잔뜩 써갈겨 놓고 가죠.
PHP 생태계에는 예전부터 보안취약점이 많았습니다. 초보자들 투성이다 보니, 왕년에는 심각한 보안취약점이 사방에 널려 있었죠. 이번 사건이 큰 이슈가 된 것은 아마도 AI의 발전 이후 PHP 생태계에서 발견된 가장 큰 취약점이기 때문일 것입니다. 이미 랜덤으로 목표물을 찾아다니는 괴물이 저 밖에 있기 때문에 작은 틈이라도 무섭게 느껴지는 거예요.
멋진 신세계에 오신 것을 환영합니다. 이유 없이 해킹하고, 유저들을 지켜 주어야 할 전문가들이 제일 먼저 배신하고, 그나마 스스로를 지킬 수 있는 무기는 유럽 어딘가에서 중년의 아저씨가 운영하는 허름한 개인 서버에 처박혀 있습니다.
4. 그럼에도 불구하고, 이 시스템은 희한하게 잘 돌아갑니다.
밤 사이에 결국 패치 성공하셨잖아요.^^
평소에 쉽게 움직이지 않는 웹호스팅 업체들마저 이번에는 앞다투어 업데이트한다고 난리가 났습니다. 과장 조금 보태서, 오래 전 XE가 PHP 5.3 쓰라고 요구했을 때 이후 처음 보는 훈훈한 광경입니다. ㅋㅋㅋ
당장이라도 무너질 것 같은 시스템인데, 희한하게 잘 돌아갑니다. 여기저기 시체가 널브러져 있고 늑대가 도사리고 있다는 것을 아는데도, 살아남은 사람들은 또다시 컴퓨터를 열고 아무도 알아주지 않는 코드를 써 올립니다.
이게 오픈소스인가 봅니다. 커뮤니티인가 봅니다. 중독성 있습니다. 미쳤습니다.
댓글 5
술술 재미있게 읽혀내려가네요.
우려 섞여 있으면서도 한편으로는 도파민이 나오는 글인것같습니다.
진지하게 조금 읽다가
한눈에 쭈욱 훝어보다가
4번째 글만 눈에 잘 들어왔어요.
늑대가 도사리고 있다니...
라이믹스 사이트엔
늑대 아니고 곰이 도사리고 있지요.
곰은 여러분을 해치지 않아요. 🐻
라이믹스 사이트에 있는 곰은 착한 곰이예요.
그건 제가 잘 알아요.
웬지 재밌어요. 하하하~
혼동이 일어나고 혼란스러운 와중에도 누군가는 묵묵히 자리를 지켜가며 자신에게 맡겨진 일을 완수하죠.
그게 오픈소스의 묘미이자 이 사회가 작동하는 '신뢰'라는 단어의 증명이라 생각합니다.
휴가임에도 보안패치를 진행한 remi한테는 한없이 고맙네요.
이번 사건에서 '신뢰'와 반대되는 일들중에 제가 본것들은 특히 SNS였던것같습니다.
특히 X(구 트위터)의 일본쪽을 많이 눈여겨보는데, 프로그래밍도 모를만한 중고등학생들 혹은 프로그래밍과 전혀 관련없는 인물들이 "PHP같은 유물 버릴때 된거 아니야?", "이번 보안패치해도 소용없어", "이미 PHP2Shell 익스플로잇 킷이 돌아다니고 있어"같은 책임없는 말을 하는걸 보면 불 지피는 놈 따로 책임지는 사람들 따로구나 느꼈습니다.
그 와중에 유지보수 이야기도 들려오는거 보면 일본이나 한국이나 피차일반이구나 싶은것도 많았습니다 ㅡㅡㅋ