Mejora del exploit público de CVE-2022-24834
Autor
Conviso Research Team
Descripción
El equipo de Ricerca Security (@RicercaSec) descubrió y explotó con éxito una vulnerabilidad interesante (CVE-2022-24834) en el intérprete de Lua incluido con Redis. Esta vulnerabilidad es un desbordamiento de heap en la librería cjson, y un análisis detallado se puede encontrar aquí.
Notamos algunos offsets hardcodeados [2] [3], que podrían ser un inconveniente para quienes deseen probarlo, así que decidimos eliminarlos. El objetivo principal era hacerlo más genérico y aprender un poco sobre los internals de Lua.
Modificaciones que realizamos
- Usamos un string enorme para poder leer direcciones de memoria arbitrarias más fácilmente;
- Usamos coroutines de Lua para filtrar las direcciones de la pila y de libc; esta técnica está documentada por Saelo (@5aelo);
- Incluimos una función de resolución de símbolos (
local system_addr = resolve_symbol_gnu(libc_leak, "system"))
- Incluimos un buscador automático de gadgets;
- Modificamos el exploit.py original para usar pwntools
- Añadimos un manejador de reverse shell a exploit.py
Pruebas
- Redis 7.0.11 en Ubuntu 20.04 (compilación propia) - ÉXITO
- Redis 7.0.11 en Ubuntu 20.04 (vía apt usando el repositorio oficial de Redis) - ÉXITO
- Redis 7.0.11 en Ubuntu 20.04 (vía imagen docker redis:7.0.11) - ÉXITO
- Redis 6.2.12 en Ubuntu 20.04 (vía imagen docker redis:6.2.12) - ÉXITO
- Redis 7.0.11 en Debian 11 (vía apt usando el repositorio oficial de Redis) - ÉXITO
- Redis 5.0.7 en Ubuntu 20.04 (vía apt) - CRASH
Créditos
- @RicercaSec - por la vulnerabilidad, el excelente análisis y el exploit inicial;
- @5aelo - por la técnica de coroutines.
Demo
Versión 6.2.12

Versión 7.0.11

Referencias
[1] https://ricercasecurity.blogspot.com/2023/07/fuzzing-farm-4-hunting-and-exploiting-0.html
[2] https://github.com/RICSecLab/exploit-poc-public/blob/main/CVE-2022-24834/exploit.lua#L341
[3] https://github.com/RICSecLab/exploit-poc-public/blob/main/CVE-2022-24834/exploit.lua#L362-L365
[4] https://saelo.github.io/posts/pwning-lua-through-load.html