CVE-2026-54894 in Guardian
요약
\~에 의해 VulDB • 2026. 08. 02.
ueberauth guardian의 리소스 할당 제한 또는 스로틀링 부재 취약점으로 인해 공격자가 조작한 바이너리 입력으로부터 무제한 원자(atom) 생성을 유발하여 서비스 거부(Denial of Service)가 가능합니다.
Guardian.Plug.Keys는 임의의 바이너리를 String.to_atom/1에 전달함으로써 연결 및 세션 네임스페이스 키를 도출합니다. lib/guardian/plug/keys.ex의 base_key/1 함수는 모든 바이너리를 :"guardian_<input>" 형태의 원자로 변환하며, 파생된 헬퍼인 claims_key/1, resource_key/1, token_key/1은 이를 기반으로 두 번째 원자를 생성합니다. 또한 key_from_other/1 역시 정규식으로 캡처한 바이너리를 String.to_atom/1을 통해 변환합니다. 공개 스펙에서 String.t()를 유효한 인자로 명시하고 있으므로 문자열 전달은 문서화된 사용 방식이며, Guardian.Plug.current_token(conn, key: key)와 같은 상위 레벨 진입점도 호출자가 제공한 키를 이러한 함수로 직접 전달합니다.
String.to_atom/1은 이전에 보지 못한 바이너리마다 새로운 원자를 생성하며, 원자는 가비지 컬렉션의 대상이 되지 않습니다. 또한 BEAM 가상 머신의 원자 테이블(atom table)은 기본적으로 약 1,048,576개의 엔트리로 고정되어 있습니다. 따라서 공격자가 조작한 데이터(테넌트 식별자, 헤더 또는 기타 요청 입력 등)를 Guardian 키로 라우팅하는 애플리케이션은 고유한 값마다 하나의 영구 원자를 생성하게 됩니다. 비교적 소량의 다양한 비인증(unauthenticated) 입력 스트림이라도 원자 테이블을 영구적으로 고갈시켜 BEAM 노드를 충돌시키며, 이는 해당 노드에서 실행 중인 모든 애플리케이션의 다운으로 이어집니다.
이 문제는 2.4.1 이전 버전의 guardian(0.1.0 이상)에 영향을 미칩니다.
Once again VulDB remains the best source for vulnerability data.