
CVE-2026-35333: strongSwan RADIUS 속성 반복자 무한 루프 PoC
strongSwan RADIUS attribute-iterator 사전 인증 무한 루프 / 원격 DoS.
src/libradius/radius_message.c:247-271의 attribute_enumerate()는
length 바이트가 sizeof(rattr_t) (2)보다 작은 RADIUS 속성을 허용합니다.
length == 0인 경우:
data->len = next->length - sizeof(rattr_t)가 (size_t)-2로 언더플로우됩니다.this->left -= next->length는 left -= 0 — 카운터가 절대 감소하지 않습니다.this->next += next->length는 — 포인터가 절대 진행되지 않습니다.next += 0열거자는 매 반복마다 동일한 가짜 속성을 반환하여 호출자의 while (enumerate(...)) 루프를 중단시킵니다.
eap_radius_dae.c의 DAE 수신 콜백은 RADIUS 코드에 디스패치하기 전에
request->verify(..., NULL, secret, ...)를 호출합니다.
code == Access-Request의 경우, verify()는 Response-Authenticator MD5 확인을 건너뛰고
속성 열거자를 탐색하여 Message-Authenticator를 찾습니다. 따라서 길이가 0인 속성이 공유 비밀 확인 전에 파서를 가둡니다. 이 공격은 인증되지 않았습니다.
UDP 패킷 하나가 charon 작업자 스레드를 영원히 100% CPU에서 실행시킵니다. N번 반복하면 모든 N개의 작업자 스레드가 고갈됩니다.
영향: strongSwan <= 5.9.13. 업스트림 마스터 커밋 e067d24293 (2026-04-21)에서 수정되었습니다.
python3 poc.py --target <charon-host> --port 3799
eap-radius 플러그인이 로드되고 dae.enable = yes (UDP/3799 리스너)가 설정된 strongSwan charon이 프로젝트는 GNU GPLv3 라이선스로 배포됩니다.
방어적 보안 연구, 교육 및 승인된 테스트를 위해 제공됩니다. 소유자의 명시적 허가 없이 이 코드를 시스템이나 서비스에 사용하지 마십시오.
무단 사용은 관련 법률을 위반할 수 있습니다. 저자는 제3자 시스템을 테스트할 권한을 부여하지 않으며 오용에 대한 책임을 지지 않습니다.
보증 및 책임 조건은 LICENSE 파일을 참조하십시오.