Docker Container php2shell audit script
Docker 컨테이너의 PHP2Shell 취약 버전을 확인하는 스크립트
실행 중인 Docker 컨테이너에서 `php -v`로 PHP 버전을 읽고, PHP2Shell 취약 버전 기준과 비교하는 Bash 스크립트입니다. 중지된 컨테이너나 컨테이너 안의 다른 경로에 설치된 PHP는 확인하지 못합니다.
- 주제
에디터 노트
이 스크립트의 결과는 실행 중인 컨테이너 안에서 `php -v`가 보고하는 버전만 판정합니다. 따라서 취약 PHP가 없다는 출력은 전체 배포 환경이 안전하다는 뜻으로 넓혀 읽을 수 없습니다. 중지된 컨테이너와 기본 명령 경로에서 확인되지 않는 런타임은 검사 범위 밖입니다. 댓글의 지적은 스크립트의 용도를 정확히 한정합니다. 이 도구는 빠른 1차 점검에 유용하지만 이미지나 배포 정의까지 추적하지 않으므로, 발견한 컨테이너를 업데이트 대상으로 연결하는 작업은 별도로 남습니다. 반대로 외부 공개 여부만으로 취약성을 가르는 질문에는 구체적인 접근 경로를 따져야 한다는 답변이 붙었지만, 댓글은 그 경로를 설명하지 않습니다. 제시된 버전 기준과 실행 결과를 확인하는 점검 도구로 읽는 편이 적절합니다.
AI 요약
실행 중인 Docker 컨테이너를 대상으로 PHP2Shell 취약 버전을 찾는 간단한 Bash 스크립트입니다. docker ps로 실행 중인 컨테이너를 가져온 뒤 각 컨테이너에서 php -v를 실행해 버전을 확인합니다.
취약 버전 판정
스크립트는 PHP 8.5.12, 8.4.27, 8.3.36, 8.2.35보다 낮은 버전을 취약하다고 표시합니다. PHP 8.0과 8.1, PHP 5와 7은 지원 종료 버전으로 취약 처리합니다. PHP 실행 파일이 없거나 버전을 읽지 못하면 건너뛰거나 별도 경고를 출력합니다.
확인 범위와 한계
docker ps에 잡히는 실행 중인 컨테이너만 검사하므로 중지된 컨테이너는 빠집니다. 댓글에서는 주기적으로 실행되는 작업이 중지 상태일 수 있다는 점과, 기본 php 명령으로 확인되지 않는 PHP 설치도 놓칠 수 있다는 점을 지적합니다. Podman과 Quadlet용 대체 스크립트도 댓글에 공유됐습니다.
Reddit 반응
- @AliyasDandani_64 — 중지된 컨테이너는
docker exec로 확인할 수 없으므로 주기적으로만 실행되는 컨테이너를 놓칠 수 있다는 점을 표시하겠습니다.- @jonmchan — 좋은 지적입니다. 실행 중인 컨테이너에서만 작동합니다.
- @Cloudaware_CMDB — 결과가 깨끗하더라도 조심하겠습니다. 실행 중인 컨테이너에서 확인되는 항목만 검사하고, 배포된 이미지의 모든 PHP 설치를 확인하지는 않습니다. 중지된 컨테이너와 사용자 지정 바이너리 경로, 자체 PHP 런타임을 포함한 이미지를 확인하고 결과를 이미지와 배포에 연결해 재빌드할 대상을 찾아야 합니다.
- @RazzFraggle81 — 컨테이너를 외부에 공개했을 때만 취약한가요?
- @mesarthim_2 — 그렇지만 기준이 다소 임의적입니다. 외부에 공개한 대상과 외부에서 접근할 수 있는 대상은 같지 않습니다. 위험이 매우 커서 굳이 감수할 필요가 없습니다.
- @joninjax1 — Podman과 Quadlet을 확인하는 스크립트를 공유합니다.
- @epsiblivion — Renovate에서 버전 태그를 사용하면 업데이트가 있을 때 알림을 받을 수 있습니다.
원문: GitHub Gist / 번역·요약: Trawling