
CVE-2026-35330: strongSwan EAP-SIM/AKA heap overflow PoC
strongSwan EAP-SIM / EAP-AKA Attribut-Parser Pre-Auth Heap Buffer Overflow via Integer Underflow.
parse_attributes() in src/libsimaka/simaka_message.c:419 liest TLV-Header, deren length-Byte 4-Byte-Wörter zählt. Für den AT_RAND / AT_ENCR_DATA-Zweig:
if (hdr->length * 4 > in.len || in.len < 4)
return invalid_length(hdr->type);
data = chunk_create(in.ptr + 4, hdr->length * 4 - 4);
Wenn hdr->length == 0, unterläuft hdr->length * 4 - 4 zu (size_t)0xFFFFFFFFFFFFFFFC. Der anschließende add_attribute()-Aufruf ruft malloc(sizeof(attr_t) + len) und memcpy(..., data.ptr, len) mit dieser nahezu SIZE_MAX-Länge auf — ASan stoppt das OOB-memcpy innerhalb von libsimaka.so (negative-size-param).
Der Absturz wird von simaka_message_create_from_payload(...) gefolgt von msg->parse(msg) erreicht. Es ist keine Authentifizierung erforderlich; der EAP-SIM/AKA-Dispatcher parst die Nutzlast vor jeder Peer-Credential-Überprüfung.
Betroffen: strongSwan <= 5.9.13. Behoben im Upstream-Master-Commit aa5aaebc33 (2026-04-21).
gcc -fsanitize=address -g -O0 poc.c -lsimaka -lstrongswan -o poc
./poc
Der PoC linkt gegen die installierte libsimaka.so und libstrongswan.so und ruft direkt die öffentliche API auf. Header aus dem strongSwan-Entwicklungspaket sind erforderlich (-I/usr/include ist normalerweise ausreichend, wenn libstrongswan-dev installiert ist).
libsimaka.so <= 5.9.13 (aus Upstream-Tarball erstellt; einige Distributionen portieren Fixes zurück)gcc mit AddressSanitizer-UnterstützungDieses Projekt wird unter der GNU GPLv3 veröffentlicht.
Es wird für defensive Sicherheitsforschung, Bildung und autorisierte Tests bereitgestellt. Verwenden Sie diesen Code nicht gegen Systeme oder Dienste ohne ausdrückliche Genehmigung des Eigentümers.
Unbefugte Nutzung kann geltendes Recht verletzen. Die Autoren erteilen keine Erlaubnis zum Testen von Drittsystemen und sind nicht für Missbrauch verantwortlich.
Siehe die LICENSE-Datei für Gewährleistungs- und Haftungsbedingungen.