Apache Airflow Security
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Apache Airflow は、データパイプラインやワークフローのオーケストレーションとスケジューリングのためのプラットフォームとして機能します。データパイプラインの文脈における「オーケストレーション」という用語は、さまざまなソースからの複雑なデータワークフローを整理、調整、管理するプロセスを指します。これらのオーケストレーションされたデータパイプラインの主な目的は、処理された消費可能なデータセットを提供することです。これらのデータセットは、ビジネスインテリジェンスツール、データサイエンス、機械学習モデルなど、さまざまなアプリケーションで広く利用されており、ビッグデータアプリケーションの機能にとって基盤となっています。
基本的に、Apache Airflowは、何か(イベント、cron)が発生したときにコードの実行をスケジュールすることを可能にします。
https://raw.githubusercontent.com/apache/airflow/main/docs/apache-airflow/start/docker-compose.yaml からのdocker-compose設定ファイルを使用して、完全なapache airflow docker環境を起動できます。(MacOSを使用している場合は、docker VMに少なくとも6GBのRAMを割り当てることを確認してください)。
apache airflowを実行する簡単な方法の一つは、minikubeで実行することです:
Airflowはその設定に機密情報を保存する可能性があり、または弱い設定が存在することがあります:
Airflowを攻撃する前に、権限の仕組みを理解する必要があります:
ウェブコンソールにアクセスできる場合、以下の情報の一部またはすべてにアクセスできる可能性があります:
変数(カスタムの機密情報がここに保存される可能性があります)
接続(カスタムの機密情報がここに保存される可能性があります)
http://<airflow>/connection/list/
でアクセス
設定(**secret_key
**やパスワードなどの機密情報がここに保存される可能性があります)
ユーザーと役割のリスト
各DAGのコード(興味深い情報が含まれている可能性があります)
変数はAirflowに保存され、DAGがその値にアクセスできるようになります。他のプラットフォームの秘密に似ています。十分な権限があれば、http://<airflow>/variable/list/
のGUIでアクセスできます。
AirflowはデフォルトでGUIに変数の値を表示しますが、これによると、値がアスタリスクとして表示される変数のリストを設定することが可能です。
しかし、これらの値はCLIを介して(DBアクセスが必要)、任意のDAGの実行、APIを介して変数エンドポイントにアクセスすること(APIを有効にする必要があります)、さらにはGUI自体からも取得できます! GUIからこれらの値にアクセスするには、アクセスしたい変数を選択し、アクション -> エクスポートをクリックします。 別の方法は、検索フィルタリングを使用して隠された値に対してブルートフォースを実行し、取得することです:
expose_config
設定がTrueに設定されている場合、ユーザー役割以上の権限を持つ者はウェブで設定を読むことができます。この設定には**secret_key
が含まれており、これにより有効なユーザーは他のユーザーアカウントを偽装するための独自の署名付きクッキーを作成**できます。
もし DAG が保存されている場所に書き込みアクセス がある場合、逆シェルを送信する DAG を作成する ことができます。 この逆シェルは airflow ワーカーコンテナ内 で実行されることに注意してください:
コードのルートで実行されるように設定した場合、執筆時点では、それはDAGのフォルダに配置してから数秒後にスケジューラによって実行されます。
もしDAGクラスター内のマシンを侵害することができれば、dags/
フォルダーに新しいDAGスクリプトを作成でき、それらはDAGクラスター内の他のマシンに複製されます。
GUIからDAGを実行すると、引数を渡すことができます。 したがって、DAGが適切にコーディングされていない場合、コマンドインジェクションに対して脆弱である可能性があります。 これがこのCVEで起こったことです: https://www.exploit-db.com/exploits/49927
DAG内のコマンドインジェクションを探し始めるために知っておくべきことは、パラメータが**dag_run.conf.get("param_name")
というコードでアクセスされる**ということです。
さらに、同じ脆弱性が変数にも発生する可能性があります(十分な権限があれば、GUIで変数の値を制御できることに注意してください)。変数は次のようにアクセスされます:
もしそれらが例えばbashコマンドの中で使用されると、コマンドインジェクションを実行することができます。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)