O arquivo de auto- decodificações e corpos comprimidos da resposta padrão do Req com base no `tipo de conteúdo' (ou extensão de URL) fornecido pelo servidor e materializa o conteúdo descomprimido completo na memória sem tampa de tamanho. Um atacante que controla (ou pode redirecionar uma vítima para) um objetivo HTTP atingido pelo ` Req.get!/ 1 ` pode devolver uma pequena "bomba de descompressão" que se expande para muitos gigabytes no cliente e exausta a memória do BEAM. ** 1. Arquivo decodificação automática.** `Req. Steps.decode_ body/ 1 ` em `lib/req/steps.ex` envia na resposta `content-type` (ou URL extension) e chama bibliotecas de arquivos do Erlang com `:memory`, retornando uma lista `[{nome, bytes}]` de cada entrada totalmente descomprimida em RAM: `application/zip` → `:zip.extract(body, [:memory])`, `application/x-tar` → `:erl_tar.extract({:binary, body}, [:memory])`, `application/gzip` / `.tgz` → `:erl_tar.extract({:binary, body}, [:memory,:comprimido])`. Nenhum cap de byte é forçado antes da decodificação e nenhum limite de tamanho por entrada é passado para `:zip` / `:erl_tar`.

** 2. encadeamento de codificação de conteúdo.** `Req. Steps.decompress_ body/ 1 ` caminha pelo cabeçalho `encoding de conteúdo` e cadeias `:zlib` / `:brotli` / `:ezstd` decodificadores, assim uma resposta publicitária `encodificação de conteúdo: gzip, gzip, gzip,...` infla através de várias camadas sem vínculo. ** 3. Descodificador padrão do atacante escolhido.** Ambos os passos fazem parte do tubo padrão do Req. O chamador não precisa optar por entrar, e o atacante escolhe qual descodificador dispara, configurando `tipo de conteúdo' e `codificação de conteúdo' no seu próprio servidor (ou em qualquer hospedeiro alcançado através do redirecionamento automático do Req a seguir).

1. Execute um servidor HTTP que responda 200 com `tipo de conteúdo: aplicativo/zip` e um corpo que é um arquivo zip cuja única entrada é ~ 400 MB de zero bytes (carga útil de fio compressa: algumas centenas de KB). 2. A partir do processo vítima, chame `Req.get!(url)` contra aquele servidor (sem opções especiais, sem opt- in para decodificação de arquivos). 3. ` decodificar o corpo/ 1 ` expedições no `tipo de conteúdo`, invoca `:zip.extract(body, [:memory]]`, e o corpo de resposta torna-se `[{~c"bomb.bin", >}]`. Um pedido de sub- MB produz centenas de memória residente de MB; camadando o gzip no caminho `codificação de conteúdo' ou aumentando arbitrariamente escalas de tamanho de entrada. Negação de exaustão de memória contra qualquer aplicativo Elixir que use o Req com o seu conduto de passo padrão para obter URLs influenciados por uma parte não confiável, incluindo transmissores webhook, visualizações de links, clientes de descoberta OAuth/ OIDC, espelhos de pacotes, proxies de imagem e qualquer `Req.get!/ 1 ` chamada que pode seguir redirecionamentos para host controlados pelo atacante. Não é necessária a autenticação; uma única resposta pode bloquear o BEAM e eliminar cargas de trabalho não relacionadas na mesma VM.

Registro de aconselhamento: GHSA- 655 f-mp 8 p-. 96 GV. Identificadores relacionados: CVE- 2026 - 49755. Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 29 T 15: 23: 16.000 Z e lista a sua última modificação como 2026 - 07 - 29 T 15: 23: 16.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: Req do pacote Hex — ECOSYSTEM: introduzido 0.1.0, corrigido 0.6.1.

Classificação e evidência: identificadores de fraqueza CWE- 409. O registro contém 6 suporte de referências nestes tipos: WEB, AVISO, EMBALAGAMENTO.