
Apache Airflow <1.10.11 のサンプル DAG における RCE 脆弱性の悪用方法の PoC
説明: この脆弱性は、AirflowのサンプルDAGが読み込まれた際にRCEを可能にします。CVE-2020-13927と併せて認証なしで悪用される可能性があります。
CVEクレジット: xuxiang of DtDream security
影響を受けるバージョン: <1.10.11
公開リンク: https://lists.apache.org/thread.html/r7255cf0be3566f23a768e2a04b40fb09e52fcd1872695428ba9afe91%40%3Cusers.airflow.apache.org%3E
NIST CVEリンク: https://nvd.nist.gov/vuln/detail/CVE-2020-11978
これは、コマンドインジェクションに対して脆弱なサンプルDAGを悪用し、デフォルトで公開されている実験的なREST API(Webインターフェースに認証が設定されていても)を利用します。
python CVE-2020-11978.py <url> <command>
example_trigger_target_dagが読み込まれておらず、トリガーしたい特定のDAGを知っている場合は、CVE-2020-11978-min.pyをテンプレートとして使用してそのDAGをトリガーできます。
設定でload_examples=Falseを設定してサンプルを無効にしている場合、脆弱性はありません。
>=1.10.11にアップデートするか、<1.10.11の場合は脆弱なDAGであるexample_trigger_target_dagを削除してください。
>=1.10.11を使用して新しいAirflowインスタンスを起動すると、airflow.cfgのauth_backendにはすでにデフォルトでdeny_allが設定されています。
[api]
auth_backend = airflow.api.auth.backend.deny_all
なお、airflow.api.auth.backend.defaultは>=1.10.11でもAPIへの認証なしリクエストを許可します。そのため、既存のAirflowインスタンスでauth_backend = airflow.api.auth.backend.defaultが設定されている場合、>=1.10.11にアップグレードしてもREST APIは公開されたままです。
>=2.0.0では、実験的APIは無効化されていますが、より強力な安定版APIが利用可能です。