Miglioramento dell'exploit pubblico di CVE-2022-24834
Autore
Conviso Research Team
Descrizione
Il team di Ricerca Security (@RicercaSec) ha scoperto e sfruttato con successo una vulnerabilità interessante (CVE-2022-24834) nell'interprete Lua incluso in Redis. Questa vulnerabilità è un heap overflow nella libreria cjson, e un'analisi dettagliata può essere trovata qui.
Abbiamo notato alcuni offset hardcoded [2] [3], che potrebbero rappresentare un inconveniente per coloro che desiderano testarlo, quindi abbiamo deciso di rimuoverli. L'obiettivo principale era renderlo più generico e imparare qualcosa sulle componenti interne di Lua.
Modifiche che abbiamo apportato
- Abbiamo usato una stringa enorme per poter leggere indirizzi di memoria arbitrari più facilmente;
- Abbiamo usato la coroutine di Lua per far trapelare gli indirizzi dello stack e di libc; questa tecnica è documentata da Saelo (@5aelo);
- Abbiamo incluso una funzione di risoluzione dei simboli (
local system_addr = resolve_symbol_gnu(libc_leak, "system"))
- Abbiamo incluso un trovatore automatico di gadget;
- Abbiamo modificato l'exploit.py originale per usare pwntools
- Abbiamo aggiunto un handler per reverse shell a exploit.py
Test
- Redis 7.0.11 su Ubuntu 20.04 (tramite compilazione propria) - SUCCESSO
- Redis 7.0.11 su Ubuntu 20.04 (tramite apt usando il repository ufficiale di Redis) - SUCCESSO
- Redis 7.0.11 su Ubuntu 20.04 (tramite immagine docker redis:7.0.11) - SUCCESSO
- Redis 6.2.12 su Ubuntu 20.04 (tramite immagine docker redis:6.2.12) - SUCCESSO
- Redis 7.0.11 su Debian 11 (tramite apt usando il repository ufficiale di Redis) - SUCCESSO
- Redis 5.0.7 su Ubuntu 20.04 (tramite apt) - CRASH
Crediti
- @RicercaSec - per la vulnerabilità, l'ottimo writeup e l'exploit iniziale;
- @5aelo - per la tecnica della coroutine.
Demo
Versione 6.2.12

Versione 7.0.11

Riferimenti
[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