
CVE-2026-35330: strongSwan EAP-SIM/AKA heap overflow PoC
strongSwan: преждевременное переполнение кучи в парсере атрибутов EAP-SIM / EAP-AKA через целочисленное исчерпание
parse_attributes() в src/libsimaka/simaka_message.c:419 читает заголовки TLV, у которых байт length подсчитывает 4-байтовые слова. Для ветви 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);
Когда hdr->length == 0, hdr->length * 4 - 4 приводит к целочисленному исчерпанию до (size_t)0xFFFFFFFFFFFFFFFC. Последующий вызов add_attribute() вызывает malloc(sizeof(attr_t) + len) и memcpy(..., data.ptr, len) с этой длиной, близкой к SIZE_MAX — ASan останавливает внеграничный memcpy внутри libsimaka.so (negative-size-param).
Сбой достигается из simaka_message_create_from_payload(...) с последующим msg->parse(msg). Аутентификация не требуется; диспетчер EAP-SIM/AKA разбирает полезную нагрузку до какой-либо проверки учётных данных однорангового узла.
Затрагивает: strongSwan <= 5.9.13. Исправлено в коммите aa5aaebc33 в основной ветке (2026-04-21).
gcc -fsanitize=address -g -O0 poc.c -lsimaka -lstrongswan -o poc
./poc
PoC компонуется с установленными libsimaka.so и libstrongswan.so и напрямую вызывает публичный API. Требуются заголовки из пакета разработки strongSwan (-I/usr/include обычно достаточно, если установлен libstrongswan-dev).
libsimaka.so <= 5.9.13 (собран из исходного кода; некоторые дистрибутивы переносят исправления обратно)gcc с поддержкой AddressSanitizerЭтот проект выпущен под лицензией GNU GPLv3.
Он предоставлен для оборонительных исследований безопасности, обучения и авторизованного тестирования. Не используйте этот код против систем или сервисов без явного разрешения владельца.
Несанкционированное использование может нарушать применимое законодательство. Авторы не дают разрешения на тестирование сторонних систем и не несут ответственности за неправомерное использование.
См. файл LICENSE для условий гарантии и ответственности.