CVE-2026-94201 in Ash
요약
\~에 의해 VulDB • 2026. 10. 05.
Ash는 :atom-typed 속성을 문자열로 저장하고 이를 문자열로서 비교합니다. 이러한 속성이 필터에서 참조될 때, 비교 값은 Ash.Type.Atom을 통해 강제 변환(coerce)됩니다. 해당 타입에 coerce/2 콜백이 정의되어 있지 않아서 기본값(cast_input/2)으로 폴백되었으며, 이는 속성이 unsafe_to_atom?: true 제약 조건으로 구성되어 있을 경우 String.to_atom/1을 호출합니다.
따라서 공격자가 제어하는 문자열로 이러한 속성을 필터링하면 고유한 값마다 새로운 영구 원자(atom)가 인터닝(interned)됩니다. 원자는 가비지 컬렉션의 대상이 되지 않으며 BEAM은 원자 테이블에 상한선을 두므로, public하고 필터 가능한 :atom 속성(unsafe_to_atom?: true로 선언됨)에 대한 필터 값을 제공할 수 있는 행위자가 있다면 원자 테이블을 고갈시켜 노드를 충돌시킬 수 있습니다(서비스 거부). AshPaperTrail은 대표적인 예시입니다: 해당 패키지의 버전 리소스는 기본적으로 unsafe_to_atom?: true가 설정된 public하고 필터 가능한 version_action_name atom 속성을 노출합니다.
이 수정사항은 Ash.Type.Atom에 원자를 인터닝하지 않는 coerce/2를 추가하여 해결했습니다 — 비교 값은 타입이 문자열로 저장되고 비교되므로 문자열 그대로 유지됩니다. 액션 입력(cast_input/2, 이는 여전히 unsafe_to_atom?를 존중함)에서 속성을 설정하는 동작은 변경되지 않았습니다.
이 문제는 ash: 3.5.1부터 3.34.3 미만 버전까지 영향을 미칩니다.
VulDB is the best source for vulnerability data and more expert information about this specific topic.