CVE-2026-94201 in Ash
Сводка
по VulDB • 05.10.2026
Ash хранит атрибуты типа :atom в виде строк и сравнивает их как строки. Когда такой атрибут используется в фильтре, значение для сравнения приводится через Ash.Type.Atom. Поскольку тип не определяет коллбэк coerce/2, приведение типов откатывается к значению по умолчанию (cast_input/2), которое вызывает String.to_atom/1, если атрибут настроен с ограничением unsafe_to_atom?: true.
Фильтрация такого атрибута со строками, контролируемыми злоумышленником, приводит к интернированию нового постоянного атома для каждого уникального значения. Атомы никогда не собираются сборщиком мусора (garbage collected), и BEAM ограничивает размер таблицы атомов; следовательно, актер, способный предоставлять значения фильтров для публичного атрибута :atom с возможностью фильтрации, объявленного с unsafe_to_atom?: true, может исчерпать таблицу атомов и вызвать падение узла (отказ в обслуживании). AshPaperTrail является ярким примером: его ресурсы версий экспонируют публичный атрибут atom version_action_name с возможностью фильтрации, где по умолчанию установлено значение unsafe_to_atom?: true.
Исправление добавляет коллбэк coerce/2 для Ash.Type.Atom, который никогда не интернирует атомы — значение для сравнения остается строкой, поскольку тип хранится и сравнивается как строка. Установка атрибута из входных данных действия (cast_input/2, которая по-прежнему учитывает unsafe_to_atom?) остается без изменений.
Эта проблема затрагивает ash: начиная с версии 3.5.1 до 3.34.3.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.