CVE-2026-94201 in Ashinformação

Sumário

de VulDB • 06/10/2026

Ash armazena atributos do tipo :atom como strings e os compara como strings. Quando um desses atributos é referenciado em um filtro, o valor de comparação é coercido por meio de Ash.Type.Atom. Como o tipo definido não possui a callback coerce/2, a coerção recua para o padrão (cast_input/2), que chama String.to_atom/1 quando o atributo está configurado com a restrição unsafe_to_atom?: true.

Filtrar tal atributo com strings controladas pelo atacante, portanto, internava um novo átomo permanente para cada valor distinto. Átomos nunca são coletados como lixo e a BEAM limita a tabela de átomos; assim, um ator que possa fornecer valores de filtro para um atributo :atom público e filtrável declarado com unsafe_to_atom?: true pode esgotar a tabela de átomos e travar o nó (negação de serviço). AshPaperTrail é um exemplo notório: seus recursos de versão expõem um atributo atom version_action_name, público e filtrável, com unsafe_to_atom?: true por padrão.

A correção adiciona uma coerce/2 em Ash.Type.Atom que nunca interner átomos — o valor de comparação permanece como string, já que o tipo é armazenado e comparado como string. Definir o atributo a partir da entrada da ação (cast_input/2, que ainda respeita unsafe_to_atom?) permanece inalterada.

Este problema afeta ash: das versões 3.5.1 até antes de 3.34.3.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

Responsável

EEF

Reservar

24/09/2026

Divulgação

06/10/2026

Moderação

aceite

Entrada

VDB-413780

EPSS

0.00000

KEV

não

Atividades

muito baixo

Fontes

Do you want to use VulDB in your project?

Use the official API to access entries easily!