기술

PHP2Shell 악용에 2000달러 비트코인 미끼 서버가 19시간 만에 뚫렸다

Adrian Kessler
Google에서 추가하기

패치되지 않은 PHP를 실행하는 서버에 비트코인 지갑 키를 미끼로 넣어 온라인에 공개했더니, 하루도 채 버티지 못했다. 킬라보이(KillaBoi)라는 핸들을 사용하는 연구자가 웹의 상당 부분을 떠받치는 언어에서 발견된 두 가지 치명적 결함, PHP2Shell을 이용해 침입한 뒤 키를 빼냈다. 같은 주말, Perplexity의 보안 책임자가 운영하는 허니팟에서도 공격자가 실제 서버에 똑같은 수법을 쓰는 장면이 포착됐다. 이로써 해당 취약점은 사용하기 까다로워 누구도 악용하지 못할 것이라는 안일한 생각은 설 자리를 잃었다.

이는 웹사이트를 운영하는 사람뿐 아니라 그곳에 데이터가 저장된 사람 모두에게 중요한 문제다. PHP는 WordPress, Drupal, Joomla와 대부분의 공유 호스팅 서비스에서 기반 언어로 쓰이며, 이 취약점들을 이용하면 계정이 없는 사람도 서버에서 명령을 실행할 수 있다. 패치가 나온 뒤에도 업데이트를 미뤄도 된다는 주된 근거는 공개된 공격 시도가 계속 실패했다는 것이었다. 이번 두 사례는 그 주장을 무너뜨린다.

‘Steal My Bitcoin’이라는 이름의 이 도전은 별도 웹사이트에 게시됐고, 포럼 글을 통해 공지됐다. 클라우드랜즈데브(cloudlandsdev)라는 이름으로 글을 올린 제작자는 이렇게 썼다. “누군가 실제로 이 PHP RCE를 활용하는 방법을 알아냈는지 궁금해서 만들었습니다. 지난 며칠간 저희는 패닉에 빠져 있었죠. 재미있게 해보세요!” 상금은 약 502달러로 시작해 기부금이 더해지면서 0.02511679 BTC까지 늘었고, 회수 당시 가치는 2,021.22달러였다. Tom’s Hardware에 따르면 도전이 시작된 지 약 19시간 만에 상금이 회수됐다. 도전 참가자들이 몰리면서 서버가 트래픽을 감당하지 못했고, 저장 공간도 부족해 로그를 모두 보관하지 못했다.

이후 킬라보이는 GitHub에 개념 증명 코드를 공개했다. WordPress 보안 업체 Wordfence의 창업자 마크 마운더(Mark Maunder)는 이 설명을 두고 “#php2shell을 악용하기가 얼마나 어려운지 보여주는, 지금까지 보게 될 최고의 해설”이라고 평가하며 공격에 얼마나 정교한 작업이 필요한지 강조했다. 하지만 알고 보니 어렵다는 것이 느리다는 뜻은 아니었다.

더 우려스러운 결과는 도전과 무관한 곳에서 나왔다. Perplexity의 탐지·대응 책임자 아델 카리미(Adel Karimi)는 자신의 허니팟에서 PHP 8.4.26을 실행하는 Apache 서버를 겨냥한 원격 코드 실행 공격이 실제로 성공한 사실을 포착했다고 밝혔다. BleepingComputer가 보도한 바에 따르면 그는 “이제 사용 가능한 메모리 정보 노출을 동반한 원격 코드 실행이 확인됐다. 단순히 시스템이 충돌한 뒤 수상한 프로세스가 나타난 사례가 아니다”라고 썼다. 성공적인 공격 사례를 추적해 온 Expel의 위협 연구원 마커스 허친스(Marcus Hutchins)는 이를 “지금까지 확인한 실제 환경의 php2shell 악용 사례 가운데 단연 가장 신뢰도 높은 확인 사례”라고 평가했다. 그전까지 Cloudflare, watchTowr, Patchstack 등 보안 업체들은 실패한 시도만 기록했으며, Amazon의 위협 인텔리전스 팀은 패치가 배포되기 나흘 전부터 스캔이 시작된 사실을 확인했다.

두 사례가 확인됐다고 해서 패치되지 않은 모든 서버가 내일 당장 뚫린다는 뜻은 아니다. 킬라보이가 복구한 키는 사이트에 공개된 지갑 주소와 일치하지 않았다. Cointelegraph에 따르면 주최자는 이를 설정 실수라고 인정하고 자금을 옮기겠다고 밝혔으며, 보안 사이트 Cyberpress는 공개된 증거가 보여주는 것은 키를 가져온 사실이지 상금을 훔친 사실은 아니라고 지적했다. 공개된 익스플로잇 역시 특정 PHP 빌드에 맞춰져 있고 같은 버전의 다른 빌드에서는 작동하지 않아, 클릭 한 번으로 쓸 수 있는 도구는 아니다. 하지만 이제 누구도 성공시킨 적이 없다는 주장은 더는 통하지 않는다.

취약점 노출 범위는 전 세계에 걸쳐 있다. Cointelegraph 보도에 따르면 네덜란드, 호주, 일본, 핀란드의 정부 기관들은 패치가 마련되는 동안 주요 웹사이트를 오프라인으로 전환했다. 보안 업체 Mallory가 Shodan 데이터를 집계한 결과, 공식 수정 지원이 더는 제공되지 않는 PHP 버전을 표시하는 인터넷 노출 호스트는 약 88만 4,000개였다. Notebookcheck에 따르면 이는 버전을 공개하는 약 150만 개 호스트의 59%에 해당한다. 다만 이는 배너에 표시된 버전을 집계한 수치이지, 피해가 확인된 서버 수는 아니다. Linux 배포판은 버전 번호를 바꾸지 않은 채 오래된 패키지에 패치를 적용하는 경우가 많기 때문이다.

사이트 운영자가 해야 할 일은 달라지지 않았다. 패치 버전은 PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35이며, CVE-2026-109618과 CVE-2026-109619에 대응해 10월 21일 공개됐다. 두 취약점 모두 심각도 점수는 10점 만점에 9.2점이다. 공유 호스팅에서는 WordPress나 플러그인을 업데이트하는 것이 아니라 호스팅 업체가 PHP를 업데이트해야 한다. 따라서 업체에 문의할 때는 사이트가 어떤 PHP 빌드를 사용하고 있는지, 언제 패치했는지 확인하는 것이 중요하다. 미국 사이버보안 기관 CISA는 업데이트할 수 없거나 PHP 8.1 이하를 계속 사용하는 조직에 해당 시스템을 업데이트할 수 있을 때까지 오프라인으로 전환하라고 권고했다.

다음 문제도 이미 불거졌다. 금요일 PHP 팀은 세 번째 원격 코드 실행 취약점인 CVE-2026-115560에 대한 우회책을 공개했다. 아직 패치는 나오지 않았으며, “설정과 애플리케이션 코드가 이례적으로 조합된” 시스템에만 영향을 미친다. 수정판이 배포될 때까지 PHP 개발자들은 session.upload_progress 설정을 끄라고 권고하고 있다. 이는 PHP2Shell 패치가 나오기 전에도 권고했던 조치다. PHP 8.2의 보안 지원은 2026년 12월 31일 종료되며, 여전히 8.1을 사용하는 서버는 이미 지원 종료 시점이 지났다.

태그: , , , , ,

Google에서 추가하기

토론

댓글 0개가 있습니다.