strongSwan EAP-SIM / EAP-AKA 属性解析器存在通过整数下溢导致的预认证堆缓冲区溢出。
src/libsimaka/simaka_message.c:419 中的 parse_attributes() 读取 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() 以接近 SIZE_MAX 的长度调用 malloc(sizeof(attr_t) + len) 和 memcpy(..., data.ptr, len) —— ASan 在 libsimaka.so 内部阻止了越界 memcpy(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 开发包的头文件(安装 libstrongswan-dev 后,-I/usr/include 通常足够)。
libsimaka.so <= 5.9.13(从上游 tarball 构建;某些发行版可能反向移植修复)gcc本项目以 GNU GPLv3 发布。
仅用于防御性安全研究、教育和授权测试。未经所有者明确许可,请勿将此代码用于任何系统或服务。
未经授权使用可能违反适用法律。作者未授予对第三方系统进行测试的权限,且不对滥用行为负责。
有关保证和责任条款,请参阅 LICENSE 文件。