CVE-2026-82730
WysokieCVSS 8.2Streszczenie
Podatność na nieprawidłową autoryzację w ash_typescript pozwala nieautoryzowanemu wywołującemu RPC na odczytanie wartości atrybutów, które zostały zablokowane przez polityki pól Ash. Gdy polityka pól blokuje atrybut, Ash podstawia %Ash.ForbiddenField{}, który zachowuje prawdziwą wartość w original_value, a AshTypescript.Rpc.ResultProcessor nie obsługuje tego znacznika w normalize_primitive/1, co prowadzi do serializacji oryginalnej wartości. Problem dotyczy wersji od 0.11.0 przed 0.18.0.
Ocena ryzyka
Nieautoryzowany użytkownik może uzyskać dostęp do danych, które powinny być ukryte, co może prowadzić do wycieku poufnych informacji.
Rekomendacja
Zaktualizuj ash_typescript do wersji 0.18.0 lub nowszej. Ogranicz dostęp do RPC i regularnie audytuj polityki pól.
Inne podatności w ash_typescript
Zobacz wszystkie- CVE-2026-82733Średnie
Podatność na generowanie komunikatów błędów zawierających wrażliwe informacje w ash_typescript pozwala nieuwierzytelnionemu atakującemu odczytać wewnętrzne dane aplikacji z treści odpowiedzi HTTP 500. Gdy handler trasy zwraca wartość inną niż %Plug.Conn{}, funkcja unexpected_return/2 interpoluje pełną reprezentację wartości (w tym hasła, tokeny, identyfikatory) do komunikatu błędu.
- CVE-2026-82732Średnie
Podatność na nieprawidłową walidację danych wejściowych w ash_typescript pozwala zdalnemu atakującemu przesyłać wartości argumentów spoza zadeklarowanej listy dozwolonych lub ograniczeń na trasach kontrolera typowanego. Funkcja Ash.Type.cast_input/3 traktowana jest jako pełna walidacja, ale nie wywołuje Ash.Type.apply_constraints/3, przez co ograniczenia takie jak one_of, max_length, min, max i match są ignorowane.
- CVE-2026-82731Niskie
Podatność w bibliotece ash_typescript umożliwia atakującemu kontrolującemu wartość parametru ścieżki przekierowanie żądania wygenerowanego klienta, wraz z dołączonymi poświadczeniami, do nieoczekiwanej trasy lub zewnętrznego źródła.
- CVE-2026-77950Średnie
Podatność na generowanie komunikatów błędów zawierających wrażliwe informacje w ash_typescript pozwala nieuwierzytelnionemu atakującemu otrzymać nieocenzurowane wewnętrzne dane błędów, wywołując kształt błędu, którego nie obsługuje skonfigurowany handler błędów. Funkcja apply_error_handler/3 w przypadku niepasującego wzorca podnosi wyjątek FunctionClauseError i zwraca oryginalną mapę błędu, zawierającą wrażliwe dane.
- CVE-2026-77856Wysokie
Podatność na nieograniczone przydzielanie zasobów w ash_typescript pozwala nieuwierzytelnionemu atakującemu na wyczerpanie tablicy atomów BEAM i przerwanie działania węzła przez dostarczone przez klienta nazwy pól typowanych struktur. Funkcja resolve_typed_struct_field/2 używa String.to_atom/1 dla nierozpoznanych nazw, co tworzy trwałe atomy, które nigdy nie są usuwane, prowadząc do przekroczenia limitu i awarii. Problem dotyczy wersji od 0.11.0 przed 0.18.0.
- CVE-2026-74837Wysokie
Podatność na nieograniczone przydzielanie zasobów w ash_typescript pozwala nieuwierzytelnionemu atakującemu na wyczerpanie tablicy atomów BEAM i przerwanie działania węzła przez dostarczone przez klienta nazwy pól RPC. Funkcja convert_to_field_atom/2 używa String.to_atom/1 dla nierozpoznanych nazw, tworząc trwałe atomy, które nigdy nie są usuwane, prowadząc do przekroczenia limitu i awarii. Dodatkowo nazwy pól dłuższe niż 255 znaków powodują nieobsłużony błąd SystemLimitError. Problem dotyczy wersji od 0.1.0 przed 0.18.0.
Oryginalny opis (angielski, źródło NVD)
Incorrect Authorization vulnerability in ash-project ash_typescript allows an unauthorized RPC caller to read attribute values that Ash field policies denied. When a field policy denies an attribute, Ash substitutes %Ash.ForbiddenField{}, which retains the real value in original_value because embedded resources must remain writable, and hides it from Inspect rather than removing it. AshTypescript.Rpc.ResultProcessor strips these markers to nil on its template-driven paths, but normalize_primitive/1 in lib/ash_typescript/rpc/result_processor.ex had no such clause, so a marker fell through to the generic struct branch which calls Map.from_struct/1 and serializes every key, original_value included. The denied value is returned to the caller inside the marker that represents its own denial. The simplest trigger is an action returning an embedded resource as a map, which routes through normalize_resource_struct/2 with an empty template. normalize_value_for_json/1 is a public, unguarded entry point to the same path. This issue affects ash_typescript: from 0.11.0 before 0.18.0.

