
PoC para CVE-2026-65650 - DoS por subida de avatar en Elgg
Denegación de servicio autenticada en la función de subida de avatares de Elgg mediante dimensiones de imagen sin límites, lo que provoca el agotamiento de la memoria de GD.
< 6.3.5 (línea 6.x), y 7.0.0-rc.1 – < 7.0.0 (candidatos a versión 7.0)6.3.5, 7.0.0actions/avatar/upload.php pasa las imágenes subidas directamente a saveIconFromUploadedFile() sin comprobación de dimensiones, tamaño ni memoria:
$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 biblioteca GD de PHP asigna memoria basándose en las dimensiones de píxeles decodificadas de una imagen, no en su tamaño en disco. Por lo tanto, un archivo pequeño con dimensiones extremas fuerza una asignación enorme en el momento en que GD lo procesa.
Paso 1 — python3 CVE-2026-65650.py
Paso 2 — Inicie sesión como cualquier usuario registrado.
Paso 3 — Navegue a Perfil > Editar avatar y suba CVE-2026-65650.png.
Al ejecutar el PoC, se obliga a GD a asignar ~286 MB para decodificar la imagen y ~572 MB más para redimensionarla, a pesar de que el archivo en sí ocupa ~308 KB en disco. En un equipo de prueba con 14 GB y sin swap, una sola subida redujo la memoria disponible a ~1.3 GB. En despliegues con memoria limitada, esto es suficiente para provocar que el kernel mate por OOM a los trabajadores de PHP-FPM, derribando el sitio sin autorrecuperación.
Una única petición de una única cuenta con privilegios bajos es suficiente para impulsar este consumo. Las peticiones repetidas o concurrentes de múltiples cuentas agravan el efecto y aumentan la probabilidad de alcanzar el OOM.
Corregido en Elgg 7.0.0 y retroportado a 6.3.5.