
CVE-2026-35330: strongSwan EAP-SIM/AKA heap overflow PoC
Parser de atributos EAP-SIM / EAP-AKA do strongSwan: estouro de heap pré-autenticação via underflow de inteiro.
parse_attributes() em src/libsimaka/simaka_message.c:419 lê cabeçalhos TLV cujo byte length conta palavras de 4 bytes. Para a ramificação AT_RAND / AT_ENCR_DATA:
if (hdr->length * 4 > in.len || in.len < 4)
return invalid_length(hdr->type);
data = chunk_create(in.ptr + 4, hdr->length * 4 - 4);
Quando hdr->length == 0, hdr->length * 4 - 4 sofre underflow para (size_t)0xFFFFFFFFFFFFFFFC. A subsequente chamada a add_attribute(), com malloc(sizeof(attr_t) + len) e memcpy(..., data.ptr, len), usa esse comprimento próximo a SIZE_MAX — o ASan interrompe o memcpy fora dos limites dentro de libsimaka.so (negative-size-param).
A falha é alcançada a partir de simaka_message_create_from_payload(...) seguida por msg->parse(msg). Nenhuma autenticação é necessária; o dispatcher EAP-SIM/AKA analisa a carga útil antes de qualquer verificação de credenciais do par.
Afetados: strongSwan <= 5.9.13. Corrigido no commit aa5aaebc33 do branch principal (2026-04-21).
gcc -fsanitize=address -g -O0 poc.c -lsimaka -lstrongswan -o poc
./poc
O PoC faz ligação com as bibliotecas libsimaka.so e libstrongswan.so instaladas e chama a API pública diretamente. São necessários cabeçalhos do pacote de desenvolvimento do strongSwan (geralmente -I/usr/include é suficiente quando libstrongswan-dev está instalado).
libsimaka.so <= 5.9.13 (compilado a partir do tarball oficial; algumas distribuições aplicam backports de correções)gcc com suporte a AddressSanitizerEste projeto é distribuído sob a GNU GPLv3.
Ele é fornecido para pesquisa de segurança defensiva, educação e testes autorizados. Não utilize este código contra sistemas ou serviços sem permissão explícita do proprietário.
O uso não autorizado pode violar a lei aplicável. Os autores não concedem permissão para testar sistemas de terceiros e não são responsáveis pelo uso indevido.
Consulte o arquivo LICENSE para termos de garantia e responsabilidade.