
PoC exploit per la vulnerabilità di integer overflow in Nginx (CVE-2017-7529) che consente la lettura fuori dai limiti della cache. Include un ambiente di laboratorio basato su Docker e uno script Python per i test.
Riferimenti:
Quando Nginx viene utilizzato come reverse proxy per un sito, di solito mette in cache alcuni file, in particolare i file statici. La parte in cache è memorizzata in file; ogni file di cache include "file header" + "HTTP response header" + "HTTP response body". Se una seconda richiesta colpisce il file di cache, Nginx restituisce direttamente all'utente l'"HTTP response body" contenuto nel file.
Se la mia richiesta include l'header Range, Nginx restituirà il contenuto della lunghezza specificata in base alle posizioni start ed end che ho indicato. E se costruisco due posizioni negative, come (-600, -9223372036854774591), potrebbe essere possibile leggere dati in posizioni negative. Se questa richiesta colpisce anche il file di cache, potrebbe essere possibile leggere dal file di cache il "file header", l'"HTTP response header" e altri contenuti che precedono l'"HTTP response body".
Avvia l'ambiente di test:
docker-compose up -d
Visita http://your-ip:8080/ per visualizzare la pagina predefinita di Nginx; questa pagina è in realtà il contenuto della porta 8081 del reverse proxy.
Esegui python3 poc.py http://your-ip:8080/ per leggere il risultato restituito:

Si può vedere che la lettura fuori dai limiti ha permesso di accedere al "file header", all'"HTTP response header" e ad altri contenuti che precedono l'"HTTP response body".
Se la lettura non è corretta, regola l'indirizzo di offset (605) in poc.py.