
PoC für CVE-2026-65650 - Elgg Avatar-Upload DoS
Authentifizierter Denial-of-Service in der Avatar-Upload-Funktion von Elgg durch unbegrenzte Bildabmessungen, die zur Speichererschöpfung von GD führt.
< 6.3.5 (6.x-Linie) und 7.0.0-rc.1 – < 7.0.0 (7.0-Release-Kandidaten)6.3.5, 7.0.0actions/avatar/upload.php übergibt hochgeladene Bilder direkt an saveIconFromUploadedFile(), ohne Begrenzung von Abmessungen, Größe oder Speicher:
$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'));
}
Die GD-Bibliothek von PHP weist Speicher basierend auf den dekodierten Pixeldimensionen eines Bildes zu, nicht auf seiner Dateigröße auf der Festplatte. Eine kleine Datei mit extremen Abmessungen erzwingt daher eine enorme Speicherzuweisung, sobald GD sie anfasst.
Schritt 1 — python3 CVE-2026-65650.py
Schritt 2 — Melden Sie sich als beliebiger registrierter Benutzer an.
Schritt 3 — Navigieren Sie zu Profil > Avatar bearbeiten und laden Sie CVE-2026-65650.png hoch.
Das Ausführen des PoC zwingt GD, etwa 286 MB zu allokieren, um das Bild zu dekodieren, und weitere ~572 MB, um es zu skalieren, obwohl die Datei selbst nur etwa 308 KB auf der Festplatte groß ist. Auf einem Testsystem mit 14 GB RAM und ohne Swap reduzierte ein einzelner Upload den verfügbaren Speicher auf etwa 1,3 GB. Auf speicherbegrenzten Umgebungen reicht dies aus, um einen Kernel-OOM-Kill der PHP-FPM-Worker auszulösen, wodurch die Website ohne Selbstheilung ausfällt.
Eine einzelne Anfrage von einem einzigen Konto mit niedrigen Berechtigungen genügt, um diesen Verbrauch anzutreiben. Wiederholte oder gleichzeitige Anfragen von mehreren Konten verstärken den Effekt und erhöhen die Wahrscheinlichkeit, den OOM-Zustand zu erreichen.
Behoben in Elgg 7.0.0 und zurückportiert nach 6.3.5.