본문 바로가기

보안/침해사고 분석

PHPUnit eval-stdin.php RCE 취약점 (CVE-2017-9841)

[PHPUnit eval-stdin.php RCE  취약점 공격]

 

해당 공격은 PHPUnit eval-stdin.php RCE  취약점을 이용하여 원격 코드를 실행시킬 수 있는 공격입니다. 

 

공격자가 PHPUnit에 있는 원격 코드 실행 취약점을 악용하여 임의의 PHP 코드를 실행합니다. 

해당 취약점은 eval-stdin.php 페이지를 요청할 때 적절한 인증이 존재하지 않아 발생합니다. 

 

Util/PHP/eval-stdin.php를 사용하면 공격에서 입증된 것처럼 원격 공격자가 "<?php" 하위 문자열로 시작하는 HTTP POST 데이터를 통해 임의의 PHP 코드를 실행할 수 있습니다.

 

해당 취약점은 /vendor 폴더가 노출된 사이트 즉 /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php URI에 대한 외부 접근이 가능한 사이트에서 존재합니다.

 

PHPUnit란

 

 - PHPUnit은 PHP 프로그래밍 언어를 위한 유닛 테스트 프레임워크입니다. SUnit과 함께 기원한 유닛 테스트 프레임워크를 위한 XUnit 아키텍처의 인스턴스이며, JUnit과 함께 대중화되었습니다. PHPUnit은 Sebastian Bergmann 이 개발하였으며, 개발 자체는 깃허브에서 호스팅 되고 있습니다. 

 

Vendor 폴더란

 - 패키지가 저장되는 폴더이며 composer를 통해 설치되는 패키지들을 저장합니다.

 

Composer란

 - PHP의 의존성 관리 도구

 

위험요소 

  • 대상 웹사이트의 민감한 콘텐츠(파일, 데이터베이스 자격 증명, 데이터베이스 콘텐츠 등)에 접근
  • 파일 내용 변경
  • 스팸 보내기
  • 멀웨어 설치

 

[Payload]

실제 PHPUnit eval-stdin.php RCE 취약점 공격이 발생한 패킷을 확인해보면 POST 방식으로 /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php 을 요청하며, Body 부분에는 <?php 이후에 php 코드를 삽입하여 명령어를 실행시키는 방식으로 공격을 시도합니다. 

 

공격 영향

 

삽입된 코드는 

 <?php print str_rot13('V pna erzbgryl rkrphgr CUC pbqr ba lbhe freire'); 

  • str_rot13() 함수 : 문자열에 ROT13 인코딩 수행 

[그림 1] ROT13 Decoding 수행

rot13로 인코딩 된 문자열을 디코딩 한 결과 "I can remotely execute PHP code on your server" 라는 문자를 확인할 수 있습니다. 따라서 해당 패킷은 해당 취약점이 존재하는지 스캔하는 스캔성 공격으로 판단됩니다. 

 

추가적으로 die 함수를 사용하여 에러 없이 메시지 출력 후 종료를 시도하는 경우가 많습니다. 

해결방안

 

- 벤더사가 제공하는 최신의 펌웨어를 설치한다.

- 보안 솔루션 장비를 도입하여 시그니처 기반으로 해당 취약점 공격을 방어한다.

 

 

 

참고 자료 

https://github.com/vulhub/vulhub/blob/master/phpunit/CVE-2017-9841/README.md

 

GitHub - vulhub/vulhub: Pre-Built Vulnerable Environments Based on Docker-Compose

Pre-Built Vulnerable Environments Based on Docker-Compose - GitHub - vulhub/vulhub: Pre-Built Vulnerable Environments Based on Docker-Compose

github.com

https://ko.wikipedia.org/wiki/PHPUnit

'보안 > 침해사고 분석' 카테고리의 다른 글

Directory Traversal Attack (CVE 2021-42013, CVE 2021-41773)  (0) 2022.05.27
Log4j 취약점  (0) 2022.05.26