Peter Ullrich

#465de 53,634
369.2CVSS total
Vulnerabilidades · 52
Baixa
6
Média
13
Alta
32
Crítica
1
PT-2026-47333
2.1
2026-06-08
Req · Req · CVE-2026-49756
**Nome do Software Vulnerável e Versões Afetadas** wojtekmach Req versões 0.5.3 a 0.5.9 **Descrição** A Neutralização Imprópria de Sequências CRLF, também conhecida como CRLF Injection, permite o contrabando de parâmetros multipart via metadados de parte influenciados por um atacante. A função `encode form part/2` em `lib/req/utils.ex` constrói os cabeçalhos de cada parte interpolando os valores de `name`, `filename` e `content type` diretamente nas linhas de content-disposition e content-type, sem escape ou remoção de caracteres de Retorno de Carro (CR) e Alimentação de Linha (LF). Um valor contendo aspas, `r` ou ` ` pode fechar o valor entre aspas e iniciar uma nova linha de cabeçalho. Além disso, a adição de `r --<boundary>` pode encerrar a parte atual e prepender uma parte contrabandeada. Isso é especialmente acessível quando o valor é um `%File.Stream{}`, pois o `filename` assume por padrão o `Path.basename(stream.path)`, e nomes de arquivos POSIX podem conter `r` e ` `. Aplicações que encaminham nomes de arquivos, nomes de campos ou tipos MIME controlados pelo usuário através de `Req.post/2` com `form multipart:` permitem que atacantes injetem cabeçalhos arbitrários ou contrabandeiem campos e partes adicionais nas requisições enviadas para serviços downstream. **Recomendações** Atualizar para a versão 0.6.0. Sanitizar valores de `name`, `filename` e `content type` influenciados por atacantes antes de passá-los para `Req.post/2` com `form multipart:`, rejeitando ou removendo qualquer valor que contenha `r`, ` ` ou aspas. Ao encaminhar uploads, derive o `filename` de uma string normalizada em vez de usar `Path.basename/1` em um caminho controlado pelo usuário.
PT-2026-47332
8.2
2026-06-08
Req · Req · CVE-2026-49755
**Nome do Software Vulnerável e Versões Afetadas** wojtekmach Req versões 0.1.0 a 0.6.0 **Descrição** O manuseio inadequado de dados altamente compactados permite que servidores HTTP controlados por atacantes esgotem a memória de um cliente por meio de corpos de resposta do tipo bomba de descompressão. O pipeline de resposta padrão inclui as funções `decode body()` e `decompress body()`. A função `decode body()` processa o content-type fornecido pelo servidor e chama `:zip.extract(body, [:memory])` para application/zip, `:erl tar.extract({:binary, body}, [:memory])` para application/x-tar e `:erl tar.extract({:binary, body}, [:memory, :compressed])` para application/gzip ou .tgz. Essas operações retornam o conteúdo completo do arquivo descompactado na memória sem um limite de tamanho total. Além disso, `decompress body()` encadeia decodificadores `:zlib`, `:brotli` e `:ezstd` com base no cabeçalho content-encoding, permitindo que as respostas se expandam através de múltiplas camadas sem limite. Como essas etapas são habilitadas por padrão, uma resposta pequena pode expandir-se para vários gigabytes, travando o processo BEAM. **Recomendações** Atualize para a versão 0.6.1. Como solução temporária, desabilite a decodificação automática do corpo passando `decode body: false` para `Req.new()` ou `Req.get!()` em requisições que buscam URLs influenciadas por atacantes. Para ignorar o pipeline de descompressão de content-encoding, passe `raw: true` para garantir que o corpo da resposta permaneça como bytes brutos para verificação de tamanho antes da descompressão.