A empresa Cloudflare anunciou a correção de três vulnerabilidades no framework Pingora, sendo duas delas classificadas como críticas (9,3 de 10). O framework Pingora é escrito na linguagem Rust e é destinado à criação de serviços de rede de alto desempenho e segurança. Construído com o Pingora, o proxy é usado na rede de entrega de conteúdo da Cloudflare e processa mais de 40 milhões de solicitações por segundo. As vulnerabilidades foram corrigidas na versão 0.8.0 do Pingora.
As duas vulnerabilidades mais perigosas permitem a realização de ataques da classe "HTTP Request Smuggling", que possibilitam contornar sistemas de controle de acesso e infiltrar-se no conteúdo de solicitações de outros usuários, processadas no mesmo fluxo entre o front-end e o back-end (por exemplo, para injetar código JavaScript malicioso na sessão de outro usuário com o site). Os problemas foram identificados por um participante do programa Bug Bounty, que prevê recompensas pela descoberta de vulnerabilidades.
No esquema com acesso ao back-end através de um proxy reverso, as solicitações dos clientes são recebidas por um nó adicional que estabelece uma conexão TCP de longa duração com o back-end, que realiza o processamento direto das solicitações. Através desta conexão comum, normalmente, as solicitações de diferentes usuários são transmitidas em uma sequência, uma após a outra, com separação por meio do protocolo HTTP. Ataques da classe HTTP Request Smuggling surgem devido à interpretação diferente dos cabeçalhos HTTP e das especificações do protocolo HTTP nos front-ends e back-ends, por exemplo, quando o front-end utiliza o cabeçalho HTTP "Content-Length" para determinar o tamanho da solicitação, enquanto o back-end utiliza "Transfer-Encoding: chunked".
A primeira vulnerabilidade CVE-2026-2835 está presente no código de análise de solicitações HTTP/1.0 e é causada pelo tratamento incorreto do cabeçalho "Transfer-Encoding" com múltiplos valores, bem como pela utilização do fechamento da conexão como um sinal de fim do corpo da solicitação (close-delimited). O Pingora verificava apenas a variante "Transfer-Encoding: chunked" e ignorava esse cabeçalho se ele indicava múltiplos valores. Nessa situação, o Pingora não considerava o tamanho no cabeçalho "Content-Length", mas contava como corpo da solicitação todos os dados recebidos até o fechamento da conexão.
Ao indicar vários valores no cabeçalho "Transfer-Encoding", o atacante poderia criar condições nas quais a solicitação seria redirecionada para o backend, cujo tamanho real não corresponderia ao tamanho da cadeia chunked, calculado com base no cabeçalho "Transfer-Encoding". O Pingora redirecionava todos os dados recebidos como uma única solicitação, enquanto o backend, por exemplo, Node.js, calculava a solicitação com base em "Transfer-Encoding: chunked" e o restante da cauda era tratado como o início de outra solicitação. GET / HTTP/1.0 Host: example.com Connection: keep-alive Transfer-Encoding: identity, chunked Content-Length: 29 0 GET /admin HTTP/1.1 X:

A segunda vulnerabilidade CVE-2026-2833 é causada pelo processamento incorreto do cabeçalho HTTP "Upgrade" em solicitações HTTP/1.1. Quando o cabeçalho "Upgrade" estava presente na solicitação, o proxy imediatamente passava para o backend e os demais dados da solicitação, seguintes ao cabeçalho "Upgrade", sem esperar pela resposta do backend com o código 101 (Switching Protocols). Isso causava a desincronização do fluxo entre o proxy e o backend, e o backend percebia os dados enviados após o cabeçalho "Upgrade" como uma solicitação separada, enviando o resultado da execução dessa solicitação em resposta à solicitação subsequente de outro usuário. GET / HTTP/1.1 Host: example.com Upgrade: foo GET /admin HTTP/1.1 Host: example.com


Os problemas se manifestam ao usar o Pingora na forma de um proxy reverso (ingress proxy), transmitindo solicitações de usuários para os backends usando os protocolos HTTP/1.0 ou HTTP/1.1. A configuração utilizada na rede de entrega de conteúdo Cloudflare do Pingora não permitia a exploração das vulnerabilidades, pois o Pingora na CDN não era usado como um ingress-proxy, redirecionava solicitações apenas usando o protocolo HTTP/1.1, bloqueava solicitações com valores incorretos de Content-Length, redirecionava apenas um valor do cabeçalho "Transfer-Encoding: chunked" e inseria em solicitações com o cabeçalho "Upgrade:" um cabeçalho adicional "Connection: close", que impedia a transmissão de solicitações adicionais na mesma conexão.
A terceira vulnerabilidade CVE-2026-2836 (nível de gravidade 8,4 em 10) resulta em envenenamento de cache (cache poisoning) devido à geração da chave de cache (CacheKey) apenas com base no caminho do URI, ignorando o conteúdo do cabeçalho "Host". Essa falha resulta na formação de chaves de cache idênticas para os mesmos caminhos HTTP em diferentes hosts. A vulnerabilidade pode ser explorada para substituir o conteúdo do cache ao usar o modo de cache para vários hosts. No Pingora, o cache é uma funcionalidade experimental, não recomendada para implementações em produção.
Fonte: opennet.ru
