
PoC educativo para CVE-2026-8838, una vulnerabilidad crítica de RCE en Amazon Redshift Python Driver mediante eval() inseguro en vector_in(). Incluye análisis técnico, vector de ataque y guía de mitigación.
eval()
Proyecto de investigación y demostración en ciberseguridad ofensiva realizado exclusivamente con fines pedagógicos y de sensibilización.
Cualquier uso en sistemas sin autorización explícita es ilegal.
Este repositorio debe utilizarse únicamente en:
The vulnerability scenario presented here is intended for educational demonstration purposes only.
CVE-2026-8838 es una vulnerabilidad crítica de inyección de código (Remote Code Execution) descubierta en el conector oficial Python de Amazon Redshift (amazon-redshift-python-driver).
La falla proviene del uso no seguro de la función nativa de Python eval() sobre datos recibidos directamente desde el servidor, en la función vector_in(). Un servidor malicioso o un atacante posicionado en Man-in-the-Middle (MitM) puede enviar un payload especialmente diseñado que será evaluado y ejecutado del lado del cliente sin ninguna validación.
| Campo | Valor |
|---|---|
| CVE ID | CVE-2026-8838 |
| CVSS Score | 9.8 (Critical) |
| CWE | CWE-94 — Improper Control of Generation of Code |
| Vector CVSS | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| Componente vulnerable | amazon-redshift-python-driver < 2.1.14 |
| Función vulnerable | vector_in() |
| Tipo de ataque | Rogue server / Man-in-the-Middle |
| Autenticación requerida | No |
| Interacción del usuario | No |
La función vector_in() se encarga de deserializar los datos de tipo vectorial recibidos desde el servidor Redshift. En las versiones vulnerables, usa eval() directamente sobre el contenido bruto devuelto por el servidor:
# 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 servidor malicioso puede devolver cualquier expresión Python válida en lugar de un vector legítimo. Python la evaluará entonces como código nativo.
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 |
Vea
poc_server.pypara el servidor simulado ypoc/poc_client.pypara el cliente de demostración.
El PoC simula un servidor Redshift que devuelve una respuesta falsificada. Solo con fines de demostración, el payload utilizado es inofensivo (whoami).
Ejecución:
# Terminal 1 — démarrer le faux serveur
python poc/poc_server.py
# Terminal 2 — simuler le client vulnérable
python poc/poc_client.py
La explotación exitosa permite a un atacante:
| Paquete | Versión vulnerable | Versión corregida |
|---|---|---|
amazon-redshift-python-driver | < 2.1.14 | ≥ 2.1.14 |
Verifique su versión instalada:
pip show amazon-redshift-python-driver
pip install --upgrade amazon-redshift-python-driver
# Verificación
pip show amazon-redshift-python-driver | grep Version
# Esperado: Version: 2.1.14 o superior
Vea el archivo MITIGATION.md para las recomendaciones detalladas:
Maxime288 — github.com/Maxime288
Investigación realizada con fines educativos en el marco del estudio de la seguridad ofensiva.