Biblioteka elixir-grpc deserializuje dane gRPC z użyciem niebezpiecznej funkcji :erlang.binary_to_term/1 bez opcji :safe, co pozwala nieuwierzytelnionemu atakującemu na zdalne wykonanie kodu lub crash serwera. Podatność jest krytyczna, ponieważ nie wymaga żadnego uwierzytelnienia ani interakcji użytkownika.
▸ Pokaż oryginał (EN)
Deserialization of Untrusted Data and Allocation of Resources Without Limits or Throttling vulnerabilities in elixir-grpc grpc allow unauthenticated attackers to crash the BEAM node via atom table exhaustion and, when a decoded term flows into a call site that invokes it, achieve remote code execution on the server. 'Elixir.GRPC.Codec.Erlpack':decode/2 (lib/grpc/codec/erlpack.ex) calls :erlang.binary_to_term/1 on the raw gRPC message body without the :safe option, no size bound, and no type guard. Any unauthenticated peer that sends a request with Content-Type: application/grpc+erlpack can send a crafted payload that mints arbitrary new atoms (which are never garbage-collected, exhausting the bounded atom table and crashing the VM) or that encodes a fun term which, if applied anywhere downstream, executes attacker-controlled code inside the server process. This issue affects grpc from 0.4.0 before 1.0.0.
Funkcja 'Elixir.GRPC.Codec.Erlpack':decode/2 wywołuje :erlang.binary_to_term/1 na surowej treści wiadomości gRPC bez opcji :safe, bez ograniczenia rozmiaru danych i bez weryfikacji typów. Dowolny klient wysyłający żądanie z nagłówkiem Content-Type: application/grpc+erlpack może dostarczyć spreparowany payload. Taki payload może tworzyć dowolne nowe atomy w maszynie wirtualnej BEAM — atomy nie są odśmiecane (garbage-collected), przez co ograniczona tabela atomów ulega wyczerpaniu i VM ulega crashowi (CWE-770). Jeśli natomiast payload zakoduje term typu fun i zostanie on wywołany gdziekolwiek dalej w kodzie serwera, dochodzi do zdalnego wykonania kodu (RCE) kontrolowanego przez atakującego (CWE-502).
Atakujący może spowodować crash całego węzła BEAM (denial of service przez wyczerpanie tabeli atomów) lub, w przypadku gdy zdekodowany term trafi do miejsca jego wywołania, wykonać dowolny kod po stronie serwera z uprawnieniami procesu serwerowego.
Należy zaktualizować bibliotekę elixir-grpc do wersji 1.0.0 lub nowszej. Patch dostępny jest w repozytorium projektu (commit 272a97a5ea1b46af1819f14a831fcf35fc91f992). Producent zaleca również weryfikację, czy w środowisku używany jest koder erlpack — jeśli nie jest wymagany, należy go wyłączyć. Szczegóły dostępne w security advisory GHSA-grp7-v8xh-rj7h.
Biblioteka elixir-grpc (grpc) w wersjach od 0.4.0 do wcześniejszych niż 1.0.0.
Podatność dotyczy wyłącznie środowisk korzystających z kodera erlpack (Content-Type: application/grpc+erlpack). Standardowe żądania gRPC używające protobuf nie są podatne. CNA zgłaszającym jest Erlang Ecosystem Foundation (erlef).
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X