
#CVE-2022-31630 – Exploit Proof of Concept
Avvertenza: Questo codice è stato creato solo a scopo educativo e per test in un ambiente di laboratorio isolato. L'utilizzo su altri sistemi senza autorizzazione è illegale e irresponsabile.
📌 Descrizione
CVE-2022-31630 è una vulnerabilità di lettura Out-of-Bounds (OOB) nell'estensione GD di PHP, precisamente nella funzione imageloadfont(). Questa vulnerabilità consente a un attaccante che può controllare il file di font caricato da un'applicazione PHP di leggere dati oltre i limiti del buffer allocato. Possibili impatti:
· Denial of Service (crash) – l'applicazione smette di rispondere. · Information Disclosure – dati sensibili dalla memoria possono essere letti (ad esempio chiavi, token o altri frammenti di dati).
Versioni PHP interessate
· PHP 7.4.x precedenti alla 7.4.33 · PHP 8.0.x precedenti alla 8.0.25 · PHP 8.1.x precedenti alla 8.1.12
PHP 7.4.33 è la prima versione a ricevere la patch per questa CVE. Questo repository fornisce un Proof of Concept (PoC) per mostrare la differenza di comportamento tra la versione vulnerabile (≤ 7.4.32) e quella patchata (≥ 7.4.33).
🔍 Dettagli tecnici
La vulnerabilità risiede nella mancanza di validazione dell'input durante la lettura dei file di font GD (formato .gdf). Il file di font ha la seguente struttura header:
Byte offset Dimensione (byte) Descrizione 0 2 Magic number (0x01BE) 2 2 Numero di caratteri (nchars) 4 2 Larghezza del carattere (width) (in pixel) 6 2 Altezza del carattere (height) 8 2 Numero di byte per carattere (char_offset)
Se il valore di width viene impostato a un valore molto grande (ad esempio 65535), il calcolo della dimensione del buffer per memorizzare la bitmap dei caratteri risulta errato. Di conseguenza, il buffer allocato è troppo piccolo. Quando la funzione imagechar() successivamente legge i caratteri da quel font, accede a memoria oltre i limiti del buffer – questo è ciò che viene chiamato Out-of-Bounds Read.
🧪 Requisiti di test
· Docker (per eseguire un ambiente isolato) · PHP versione 7.4.32 o 7.4.33 (puoi usare le immagini Docker php:7.4.32-cli / php:7.4.33-cli) · Estensione GD (verrà installata all'interno del container)
🚀 Come usare il PoC
git clone https://github.com/sepkascurty-cpu/php-exploit_cve-2022-31630.git
cd exploit_cve-2022-31630
Per testare la versione vulnerabile (7.4.32):
docker run -it --rm -v $(pwd):/app php:7.4.32-cli bash
Per testare la versione patchata (7.4.33):
docker run -it --rm -v $(pwd):/app php:7.4.33-cli bash
cd /app
apt-get update
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev
docker-php-ext-configure gd --with-freetype --with-jpeg
docker-php-ext-install gd
php exploit_cve-2022-31630.php
📊 Esempio di output
Versione PHP Risultato atteso 7.4.32 (vulnerabile) Il programma va in crash con Segmentation Fault o si verifica una perdita di memoria (si vedono dati fittizi dalla memoria). 7.4.33 (patchata) L'esecuzione termina normalmente, il file immagine output.png viene salvato, nessun crash.
🛡️ Mitigazione
· Aggiorna PHP all'ultima versione che contiene la patch: · PHP 7.4.33 o successiva · PHP 8.0.25 o successiva · PHP 8.1.12 o successiva · Se non puoi aggiornare subito, disattiva l'estensione GD o la funzione imageloadfont() se non strettamente necessaria. · Applica il principio del minimo privilegio all'applicazione per minimizzare l'impatto in caso di perdita di memoria.
📚 Riferimenti
· CVE-2022-31630 su NVD · Commit della patch in php-src · Annunci di rilascio di PHP
⚠️ Disclaimer
Questo repository è fornito a scopo educativo e di ricerca sulla sicurezza. L'autore non è responsabile dell'uso improprio di questo codice. Assicurati di testare solo in ambienti di tua proprietà o per i quali hai ottenuto un'autorizzazione scritta.
Creato per la comunità di sicurezza informatica indonesiana.