
PoC for CVE-2026-65650 - Elgg avatar upload DoS
Negação de serviço autenticada no recurso de upload de avatar do Elgg através de dimensões de imagem ilimitadas, causando exaustão de memória GD.
< 6.3.5 (linha 6.x) e 7.0.0-rc.1 – < 7.0.0 (candidatos a lançamento 7.0)6.3.5, 7.0.0actions/avatar/upload.php passa imagens enviadas diretamente para saveIconFromUploadedFile() sem nenhuma verificação de dimensão, tamanho ou limite de memória:
$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'));
}
A biblioteca GD do PHP aloca memória com base nas dimensões de pixels decodificados de uma imagem, não no tamanho do arquivo em disco. Um arquivo pequeno com dimensões extremas, portanto, força uma alocação enorme no momento em que o GD o toca.
Passo 1 — python3 CVE-2026-65650.py
Passo 2 — Faça login como qualquer usuário registrado.
Passo 3 — Navegue até Perfil > Editar Avatar e carregue CVE-2026-65650.png.
Executar o PoC força o GD a alocar ~286 MB para decodificar a imagem e mais ~572 MB para redimensioná-la, apesar do arquivo em si ter ~308 KB no disco. Em uma máquina de teste com 14 GB / sem swap, um único upload reduziu a memória disponível para ~1,3 GB. Em implantações com recursos limitados de memória, isso é suficiente para acionar uma morte OOM do kernel em workers PHP-FPM, derrubando o site sem autorrecuperação.
Uma única solicitação de uma única conta com privilégios baixos é suficiente para gerar esse consumo. Solicitações repetidas ou concorrentes de várias contas agravam o efeito e aumentam a probabilidade de atingir OOM.
Corrigido no Elgg 7.0.0 e portado para 6.3.5.