
PoC de la manière d'exploiter une vulnérabilité RCE des DAGs d'exemple dans Apache Airflow <1.10.11
Description : Cette vulnérabilité permet une RCE lorsque les DAGs d'exemple d'Airflow sont chargés, potentiellement sans authentification avec CVE-2020-13927
Crédit CVE : xuxiang de DtDream security
Versions concernées : <1.10.11
Lien de divulgation : https://lists.apache.org/thread.html/r7255cf0be3566f23a768e2a04b40fb09e52fcd1872695428ba9afe91%40%3Cusers.airflow.apache.org%3E
Lien CVE du NIST : https://nvd.nist.gov/vuln/detail/CVE-2020-11978
Cet exploit utilise le DAG d'exemple vulnérable à une injection de commande avec l'API REST expérimentale qui est publique par défaut, même si l'interface web dispose d'une authentification.
python CVE-2020-11978.py <url> <commande>
Si example_trigger_target_dag n'est pas chargé et que vous connaissez le DAG particulier que vous souhaitez déclencher, vous pouvez utiliser CVE-2020-11978-min.py comme modèle pour déclencher ce DAG spécifique.
Si vous avez déjà désactivé les exemples en définissant load_examples=False dans la configuration, vous n'êtes pas vulnérable.
Vous pouvez mettre à jour vers >=1.10.11 ou supprimer le DAG vulnérable example_trigger_target_dag pour <1.10.11.
Si vous démarrez une nouvelle instance Airflow avec >=1.10.11, alors deny_all est déjà défini pour auth_backend par défaut dans airflow.cfg.
[api]
auth_backend = airflow.api.auth.backend.deny_all
Notez que airflow.api.auth.backend.default permet toujours les requêtes non authentifiées à l'API même pour >=1.10.11. Donc si vous avez une instance Airflow existante avec auth_backend = airflow.api.auth.backend.default, même après la mise à jour vers >=1.10.11, l'API REST reste publique.
Pour >=2.0.0, l'API expérimentale est désactivée mais dispose d'une API stable plus puissante.