Zend Framework에서 원격 코드 실행 취약점 발견 침해사고분석팀 2021.01.05 |
|
Zend Framework에서 공개된 신뢰할 수 없는 역직렬화 취약점은 공격자가 PHP 사이트에서 원격 코드를 실행하기 위해 이용할 수 있다.
CVE-2021-3007 추적되는 이 취약점은Zend 뿐만 아니라 Laminas Project에도 영향을 미칠 수 있다.
Zend Framework는 5억 7천만 번 이상 설치된 PHP 패키지이다. 이 프레임워크는 개발자가 객체 지향 웹 애플리케이션을 구축하기 위해 사용한다.
신뢰할 수 없는 역직렬화 취약점은 응용프로그램에서 인코딩된 데이터가 사용자로부터 수신되거나 시스템이 응용프로그램에 의해 디코딩되기 전에 제대로 검증되지 않을 때 응용프로그램에서 발생한다.
취약한 응용 프로그램은 잘못된 형식으로 수신된 데이터를 역직렬화하고 처리할 수 있으며, 이로 인해 응용 프로그램 충돌(서비스 거부)에서 공격자에 이르기까지 응용 프로그램의 컨텍스트에서 임의 명령을 실행할 수 있다.
Zend Framework의 경우 Stream클래스의 소멸자에서 해당 취약점이 발생한다.
개체가 목적을 달성한 후 PHP 인터프리터는 개체의 소멸자를 호출하고 메모리를 정리해야만 합니다.
[그림 1. 정의된 소멸자]
그림 1 의 경우 문자열 데이터 타입의 파일 이름을 매개 변수로 예상하여 작성되었지만, 실제로 streamName 개체는 문자열 유형이 아닌 경우에도 애플리케이션 실행이 킅날 때까지 소멸자에게 전달된다. 이에 따라 소멸자는 __toString메서드를 호출하여 문자열 값을 얻으려 시도하지만 악의적으로 조작된 __toString 메서드에 의해 공격자가 원하는 값을 반환하도록 유도할 수 있다.
[그림 2. PoC 실행 결과]
그림 2 는 개념 증명(PoC)공격에서 Yizhou의 연구원이 시스템 명령어인 'whoami'를 서버에 전달해 얻은 출력을 나타내고 있다.
2020년 1월, Zend Framework는 Laminas Project로 이전되었으며, 상당한 양의 코드가 새로운 코드 베이스로 이전되었다.
PHP가 인터넷 사이트의 80%를 차지하고 있고, Zend Framework의 과거 인기를 감안하였을 때, 개발자들은 이러한 역직렬화 취약점에 대해 웹 애플리케이션을 철저하게 점검할 것이 권고된다.
출처 |