
PoC per CVE-2026-65650 - DoS sul caricamento dell'avatar di Elgg
Denial of service autenticato nella funzionalità di caricamento avatar di Elgg tramite dimensioni immagine illimitate, che causano l'esaurimento della memoria di GD.
< 6.3.5 (serie 6.x), e 7.0.0-rc.1 – < 7.0.0 (release candidate 7.0)6.3.5, 7.0.0actions/avatar/upload.php passa le immagini caricate direttamente a saveIconFromUploadedFile() senza alcun controllo su dimensioni, peso o memoria:
$avatar = elgg_get_uploaded_file('avatar', false);
// Nessun controllo sulle dimensioni.
// Nessun controllo sul peso.
// Nessun controllo sulle proporzioni.
if (!$owner->saveIconFromUploadedFile('avatar')) {
return elgg_error_response(elgg_echo('avatar:resize:fail'));
}
La libreria GD di PHP alloca memoria in base alle dimensioni in pixel decodificate dell'immagine, non alla dimensione del file su disco. Un file piccolo con dimensioni estreme forza quindi un'enorme allocazione nel momento in cui GD lo tocca.
Passaggio 1 — python3 CVE-2026-65650.py
Passaggio 2 — Accedi come qualsiasi utente registrato.
Passaggio 3 — Vai su Profilo > Modifica avatar e carica CVE-2026-65650.png.
Eseguire il PoC forza GD ad allocare circa 286 MB per decodificare l'immagine e altri ~572 MB per ridimensionarla, nonostante il file stesso sia di circa 308 KB su disco. Su un sistema di test con 14 GB di RAM e nessuna swap, un singolo caricamento ha ridotto la memoria disponibile a circa 1,3 GB. Su implementazioni con memoria limitata questo è sufficiente a innescare un OOM kill del kernel dei worker PHP-FPM, portando giù il sito senza alcun auto-recupero.
Una singola richiesta da un singolo account con privilegi bassi è sufficiente a determinare questo consumo. Richieste ripetute o concorrenti da più account amplificano l'effetto e aumentano la probabilità di raggiungere l'OOM.
Corretto in Elgg 7.0.0 e riportato nella 6.3.5.