
PoC pour CVE-2026-65650 - DoS de téléchargement d'avatar Elgg
Déni de service authentifié dans la fonctionnalité de téléversement d'avatar d'Elgg via des dimensions d'image non bornées, provoquant l'épuisement de la mémoire de GD.
< 6.3.5 (branche 6.x), et 7.0.0-rc.1 – < 7.0.0 (candidats de la version 7.0)6.3.5, 7.0.0actions/avatar/upload.php transmet directement les images téléversées à saveIconFromUploadedFile() sans garde-fou sur les dimensions, la taille ou la mémoire :
$avatar = elgg_get_uploaded_file('avatar', false);
// No dimension check.
// No size check.
// No ratio check.
if (!$owner->saveIconFromUploadedFile('avatar')) {
return elgg_error_response(elgg_echo('avatar:resize:fail'));
}
La bibliothèque GD de PHP alloue de la mémoire en fonction des dimensions en pixels décodés d'une image, et non de sa taille sur disque. Un petit fichier aux dimensions extrêmes force donc une énorme allocation dès que GD le traite.
Étape 1 — python3 CVE-2026-65650.py
Étape 2 — Connectez-vous en tant que tout utilisateur enregistré.
Étape 3 — Accédez à Profil > Modifier l'avatar et téléversez CVE-2026-65650.png.
L'exécution du PoC force GD à allouer environ 286 Mo pour décoder l'image et environ 572 Mo de plus pour la redimensionner, alors que le fichier lui-même ne pèse qu'environ 308 Ko sur le disque. Sur un serveur de test de 14 Go sans swap, un seul téléversement a fait chuter la mémoire disponible à environ 1,3 Go. Sur les déploiements à mémoire limitée, cela suffit à déclencher un kill OOM du noyau sur les workers PHP-FPM, entraînant une indisponibilité du site sans auto-récupération.
Une seule requête provenant d'un seul compte à faibles privilèges suffit à entraîner cette consommation. Des requêtes répétées ou concurrentes provenant de plusieurs comptes amplifient l'effet et augmentent la probabilité d'atteindre l'OOM.
Corrigé dans Elgg 7.0.0 et rétroporté dans 6.3.5.