CVE-2026-54894 in Guardian
Сводка
по VulDB • 02.08.2026
Неограниченное выделение ресурсов (Allocation of Resources Without Limits or Throttling) в ueberauth guardian позволяет осуществить отказ в обслуживании (DoS) за счет создания неограниченного количества атомов на основе бинарных данных, находящихся под влиянием злоумышленника.
Модуль Guardian.Plug.Keys выводит ключи пространства имен соединения и сессии путем передачи произвольных двоичных данных функции String.to_atom/1. Функция base_key/1 в файле lib/guardian/plug/keys.ex преобразует любые бинарные данные в атом вида :"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 создает совершенно новый атом для каждого ранее не встречавшегося бинарного значения; атомы никогда не собираются сборщиком мусора (garbage collected), а таблица атомов BEAM по умолчанию ограничена примерно 1 048 576 записями. Приложение, маршрутизирующее данные под влиянием злоумышленника (идентификатор арендатора, заголовок или другие входные параметры запроса) в ключ Guardian, тем самым создает один постоянный атом для каждого уникального значения. Небольшой поток разнообразных неавторизованных данных приводит к необратимому заполнению таблицы атомов и падению узла BEAM, что выводит из строя все приложения, работающие на нем.
Эта проблема затрагивает пакет guardian: начиная с версии 0.1.0 до (не включая) 2.4.1.
If you want to get best quality of vulnerability data, you may have to visit VulDB.