1. PHPUnit이란?

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

 

2. CVE-2017-9841

[캡쳐 1] https://nvd.nist.gov/vuln/detail/CVE-2017-9841 번역

- 해당 취약점은 /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php에 대한 적절한 인증과정이 없어 발생되는 취약점

 

3. 취약점 분석

- 4.8.28 이전의 버전 및 5.6.3 이전의 5.x PHPUnit에 공격이 가능하다.
- eval-stdin.php에 해당 코드에 의해 취약점이 발생한 것으로 판단된다. php://input 함수를 이용해 원시 데이터를 읽은 후 eval 함수로 해당 명령을 실행하기 때문이다.

[캡쳐 2] 취약점 유발 코드
[캡처 3] 취약점 테스트

- 공격자들은 [캡쳐 3]의 php 코드를 통하여 먼저 취약점이 존재하는지 테스트 후 [캡쳐 4] 방식 등으로 공격을 진행.

[캡쳐 4] RawData

4. 대응방안

1. 최신 버전의 패치를 적용.

[캡쳐 5] 취약점이 패치된 버전의 소스코드

2. 보안 장비에 해당 패턴을 등록하여 탐지 및 차단
( ex) /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php 경로로 요청을 탐지 및 차단 할 수 있도록 룰 설정)
3. .htaccess 파일을 /vendor 폴더에 위치 시킨 후 관련 설정을 등록.
* .htacccess 파일이란 "hypertext access"의 약자로 디렉토리에 대한 접근 허용 여부 등 설정 옵션을 제공한다.

<참고>

 

bWAPP PHP Code Injection

- 해당 페이지는 message를 클릭하면 test가 출력된다. - URL 확인 시 message 파라미터의 값을 출력하는 형식이며, 이를 통해 GET 메소드를 이용한 방식이란 것을 알 수 있다. - message 파라미터의 값을 다

ggonmerr.tistory.com

+ Recent posts