
Preuve de concept éducative pour CVE-2026-8838, une vulnérabilité RCE critique dans le pilote Python Amazon Redshift via l'utilisation non sécurisée de eval() dans vector_in(). Comprend une analyse technique, un vecteur d'attaque et des conseils d'atténuation.
eval()
Projet de recherche et de démonstration en cybersécurité offensive réalisé exclusivement à des fins pédagogiques et de sensibilisation.
Toute utilisation sur des systèmes sans autorisation explicite est illégale.
Ce dépôt doit être utilisé uniquement dans :
The vulnerability scenario presented here is intended for educational demonstration purposes only.
CVE-2026-8838 est une vulnérabilité critique d'injection de code (Remote Code Execution) découverte dans le connecteur officiel Python d'Amazon Redshift (amazon-redshift-python-driver).
La faille provient de l'utilisation non sécurisée de la fonction native Python eval() sur des données reçues directement depuis le serveur, dans la fonction vector_in(). Un serveur malveillant ou un attaquant positionné en Man-in-the-Middle (MitM) peut envoyer une payload spécialement forgée qui sera évaluée et exécutée côté client sans aucune validation.
| Champ | Valeur |
|---|---|
| CVE ID | CVE-2026-8838 |
| CVSS Score | 9.8 (Critical) |
| CWE | CWE-94 — Improper Control of Generation of Code |
| Vecteur CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Composant vulnérable | amazon-redshift-python-driver < 2.1.14 |
| Fonction vulnérable | vector_in() |
| Type d'attaque | Rogue server / Man-in-the-Middle |
| Authentification requise | Non |
| Interaction utilisateur | Non |
La fonction vector_in() est chargée de désérialiser les données de type vectoriel reçues depuis le serveur Redshift. Dans les versions vulnérables, elle utilise eval() directement sur le contenu brut retourné par le serveur :
# Code vulnérable (simplifié) — versions < 2.1.14
def vector_in(data, offset, length):
raw = data[offset:offset+length].decode("utf-8")
# FAILLE : eval() sur une donnée contrôlée par le serveur
return eval(raw)
Un serveur malveillant peut retourner n'importe quelle expression Python valide à la place d'un vecteur légitime. Python l'évaluera alors comme du code natif.
Client (victime) Serveur (malveillant / MitM)
| |
|---------- Connexion Redshift ----------->|
| |
|<--------- Réponse forgée ---------------|
| "[__import__('os').system('cmd')]" |
| |
| eval() exécute le payload côté client |
| => RCE sur la machine du client |
Voir
poc_server.pypour le serveur simulé etpoc/poc_client.pypour le client de démonstration.
Le PoC simule un serveur Redshift renvoyant une réponse forgée. À des fins de démonstration uniquement, la payload utilisée est inoffensive (whoami).
Exécution :
# Terminal 1 — démarrer le faux serveur
python poc/poc_server.py
# Terminal 2 — simuler le client vulnérable
python poc/poc_client.py
L'exploitation réussie permet à un attaquant de :
| Package | Version vulnérable | Version corrigée |
|---|---|---|
amazon-redshift-python-driver | < 2.1.14 | ≥ 2.1.14 |
Vérifier votre version installée :
pip show amazon-redshift-python-driver
pip install --upgrade amazon-redshift-python-driver
# Vérification
pip show amazon-redshift-python-driver | grep Version
# Attendu : Version: 2.1.14 ou supérieure
Voir le fichier MITIGATION.md pour les recommandations détaillées :
Maxime288 — github.com/Maxime288
Recherche réalisée à des fins éducatives dans le cadre de l'étude de la sécurité offensive.