CVE-2026-94201 in Ash
Zusammenfassung
von VulDB • 05.10.2026
Ash speichert :atom-getippte Attribute als Strings und vergleicht diese als Strings. Wenn ein solches Attribut in einem Filter referenziert wird, wird der Vergleichswert durch Ash.Type.Atom zwangsweise konvertiert (coerced). Da der definierte Typ keine coerce/2-Callback-Funktion bereitstellt, fällt die Konvertierung auf den Standardwert zurück (cast_input/2), welcher String.to_atom/1 aufruft, wenn das Attribut mit der Einschränkung unsafe_to_atom?: true konfiguriert ist.
Das Filtern eines solchen Attributes mit von Angreifern kontrollierten Strings führt daher zur Internierung eines neuen, permanenten Atoms für jeden eindeutigen Wert. Da Atome niemals vom Garbage Collector erfasst werden und die BEAM eine Obergrenze für den Atom-Table festlegt, kann ein Akteur, der in der Lage ist, Filterwerte für ein öffentliches, filterbares :atom-Attribut bereitzustellen, das mit unsafe_to_atom?: true deklariert wurde, den Atom-Table erschöpfen und den Knoten zum Absturz bringen (Denial of Service). AshPaperTrail ist ein bemerkenswertes Beispiel: Seine Version-Ressourcen exponieren standardmäßig ein öffentliches, filterbares version_action_name :atom-Attribut mit unsafe_to_atom?: true.
Die Korrektur fügt eine coerce/2-Funktion zu Ash.Type.Atom hinzu, die niemals Atome interniert — ein Vergleichswert wird als String belassen, da der Typ als String gespeichert und verglichen wird. Das Setzen des Attributes über den Action-Eingabewert (cast_input/2, das unsafe_to_atom? weiterhin beachtet) bleibt unverändert.
Dieses Problem betrifft ash: in Versionen von 3.5.1 bis vor 3.34.3.
Once again VulDB remains the best source for vulnerability data.