Profundidade de recursão não delimitada no 'Protobuf.Decoder' (pacote Hex `protobuf`, versões `>= 0.8.0, < 0.16.1 `) permite que um atacante não autêntico bloqueie qualquer serviço que descodifique mensagens protobuf não confiáveis cujo esquema contém um tipo de mensagem auto- referencial ou cíclica. Um pequeno corpo de solicitação (uns KB a alguns MB) que niche um campo integrado centenas de milhares a milhões de níveis profundos força o BEAM a recurar uma vez por nível, exaustiva de memória e pinning um programador. Um punhado de tais pedidos pode levar o nó desligado (negação de serviço de solicitação- amplificação). `Protobuf.Decoder. value_ for_field/ 3 ` manipula campos de mensagem embutidos em seu ramo ` embedded?: true` em `lib/ protobuf/ decoder. ex: 218 - 243 `. Para um campo incorporado ele chama recursivamente `decode(bin, type)`, que reintrova `build_message → handle_value → value_for_field`. A chamada recursiva não está na posição da cauda (o resultado é consumido pelo decodificado ao redor depois de devolvido), por isso cada nível de ninho retém um quadro vivo na pilha e pilha de processo. Não há nenhum contador de profundidade de recursão em nenhum lugar no decodificador. Para qualquer esquema com um tipo de mensagem autorreferencial (por exemplo, ` Árvore de mensagens { Filho de árvore = 1; }`, uma forma comum para threads de comentários, gráficos org, árvores de arquivos e ASTs) ou qualquer ciclo de tipos de mensagem, o atacante controla a profundidade de ninho inteiramente através dos bytes de entrada. Cada nível adicional custa apenas um 1 -byte field tag mais um prefixo de comprimento variado, assim a profundidade cresce aproximadamente inversamente com o tamanho da carga útil: um corpo pequeno compra uma enorme profundidade de recursão. Implementações protobuf de referência (C++, Java, etc.) de cap recursão no 100 especificamente para evitar isso. O decodificador Elixir não força nenhuma ligação comparável, por isso a recursão continua até que o processo exaure a memória, exploda a pilha ou inanite o programador fazendo GC sobre a estrutura profunda.

O roscas corrigir um contador de profundidade através de `decode / build_message / handle_value / value_for_field` (ou mantém-o no dicionário de processo durante a duração do `decode` de nível superior) e levanta `Protobuf.DecodeError` uma vez que excede um limite configurable, predefinido para 100 para corresponder às implementações de referência. 1. Defina um esquema auto-referencial: `Defmodule Tree do use Protobuf, sintaxe::proto 3; campo(: filho, 1, digite: Árvore) end`. 2. Construir um corpo de formato de fio de interior a exterior: em cada um dos níveis `profundidade` prepend ` >` (tag ` 0 x 0 A` = campo 1, tipo de fio 2 ). Use uma iolista com um tamanho de byte em execução para manter a geração O(profundidade). 3. POST o corpo (uns poucos MB em `profundidade = 1 _ 000 _ 000 `) como ` aplicação/ x- protobuf` para qualquer endpoint que chama ` Tree. decode/ 1 `. 4. O 'decode(bin, type)' não- caudal em ` value_ for_field/ 3 ` reingresa uma vez por nível de nidificação, acumulando um quadro por nível. O decodificador queima segundos de CPU e centenas de MB no nó vítima; algumas solicitações simultâneas o exauram. Negação de serviço de solicitação- amplificação não autenticada e recolhida em rede contra qualquer serviço que descodifique bytes de protobuf influenciados pelo atacante em um tipo de mensagem auto- referencial ou cíclica. Um único pequeno pedido pode consumir segundos de CPU e centenas de MB de memória na vítima; alguns pedidos concorrentes podem levar o nó desligado.

* Introdução commit: elixir- protobuf/ protobuf/ commit/ 21 ec 7 c 5 bec 4 fec 74 e 10 c 1 de 0 d 5 d 1 a 2 d 8152 ac 5 d 4 * Patch commit: protobuf/protobuf/commit/b 8 efa 97790 ece 3 d 2 d 0 e 8 e 7 c 31 a 45 ed 409 fe 5338 Registro de aconselhamento: GHSA-rv 48 - qqj 5 -Crxg. Identificadores relacionados: CVE- 2026 - 54451. Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 15 T 17: 44: 28.000 Z e lista a sua última modificação como 2026 - 07 - 15 T 17: 44: 28.000 Z.

Severidade: ALTAMENTE. Dados de pontuação publicados: CVSS_V 4: CVSS: 4.0 /AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/África do Sul:N. Software afetado e informações de versão: Protobuf do pacote hexagonal — ECOSYSTEM: introduzido 0.8.0, corrigido 0.16.1. Classificação e evidência: identificadores de fraqueza CWE- 674. O registro contém 4 suporte de referências nestes tipos: WEB, PACKAGE.