
Laravel-RCE: CVE-2017-9841
Laravel-RCE: CVE-2017-9841
CVE-2017-9841은 PHP 자동화 테스트에 널리 사용되는 PHPUnit 라이브러리에 영향을 미치는 치명적인 원격 코드 실행(RCE) 취약점입니다. 이 결함으로 인해 공격자가 공개적으로 노출된 특정 PHPUnit 파일에 접근할 수 있으면 서버에서 임의의 명령을 실행할 수 있습니다.
📌 주요 세부 사항 식별자: CVE-2017-9841 Google Dork "inurl:"/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php" 영향받는 제품: PHPUnit (phpunit/phpunit 컴포넌트)
취약한 버전: 5.6.3 미만 및 4.8.28 미만
취약점 유형: 원격 코드 실행(RCE)
영향: 심각 – 공격자가 서버에서 임의의 PHP 코드를 실행할 수 있음.
🔍 취약점 작동 방식 문제는 다음 위치에 있는 eval-stdin.php 파일에 있습니다:
text /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php (또는 프로젝트 구조에 따라 유사한 경로)
이 파일은 PHPUnit 내부용으로 설계되었지만 많은 설치에서 공개적으로 접근 가능한 상태로 남아 있습니다. 이 파일의 코드는 단순히 표준 입력(php://input)에서 데이터를 읽어 eval() 함수로 직접 실행합니다. 즉, 이 엔드포인트로 전송된 모든 POST 요청은 PHP 코드로 평가됩니다.
악용 예시 공격자는 취약한 파일에 다음과 같은 HTTP POST 요청을 보낼 수 있습니다:
http POST /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1
Host: target.com
Content-Type: application/x-www-form-urlencoded
Payload 🛡️ " "
서버는 코드를 실행하고 출력을 반환하여 실행을 확인합니다.
이를 통해 공격자는 역방향 셸을 얻거나, 민감한 파일을 읽거나, 데이터를 수정하는 등 공격을 확장할 수 있습니다.
🛡️ 완화 방법 PHPUnit을 패치된 버전(≥ 5.6.3 또는 ≥ 4.8.28)으로 업데이트합니다.
프로덕션 환경에서 vendor/phpunit/ 디렉터리에 대한 접근을 제거하거나 제한합니다. 테스트 라이브러리는 공개적으로 접근 가능해서는 안 됩니다.
eval-stdin.php와 같은 일반적인 테스트 파일에 대한 요청을 차단하도록 서버를 구성합니다.
웹 애플리케이션 방화벽(WAF)을 사용하여 악용 시도를 탐지하고 차단합니다.
📚 추가 컨텍스트 이 취약점은 많은 프로젝트가 실수로 vendor 디렉터리를 공개적으로 접근 가능하게 두기 때문에 널리 알려졌습니다. PHPUnit은 PHP 프로젝트(특히 Laravel, Symfony 등 프레임워크)에서 흔한 종속성이므로 우발적인 노출이 빈번합니다. 따라서 자동화된 보안 스캔에서 가장 먼저 테스트되는 벡터 중 하나입니다.
개발자 또는 시스템 관리자라면 프로덕션 사이트에 외부에서 접근 가능한 eval-stdin.php 파일이 없는지 확인하십시오.