O que é Server-Side Request Forgery (SSRF)
Server-Side Request Forgery (SSRF) e uma classe de vulnerabilidade em que um atacante consegue fazer com que o servidor da aplicação realize requisições HTTP para destinos arbitrarios, escolhidos pelo próprio atacante. Em vez de o servidor só acessar os recursos que foram previstos pelos desenvolvedores, ele passa a ser usado como um proxy interno capaz de alcançar sistemas na rede local, metadados de nuvem (como o endpoint AWS IMDSv1 em 169.254.169.254), bancos de dados, APIs internas e até outros servidores na mesma VPC.
Dois novos registros de CVE publicados em setembro de 2026 mostram que SSRF continua afetando aplicações modernas escritas em TypeScript/JavaScript: CVE-2026-94039 e CVE-2026-94038, ambos com CVSS 7.3 (severidade Alta), afetam respectivamente o TaxHacker (até versão 0.8.5) e o dim-sum-app. As falhas seguem o padrão clássico de SSRF: um parâmetro controlado pelo usuário e passado diretamente para uma função que realiza requisições de rede sem validação de destino.
Como funciona o ataque SSRF
O mecanismo básico de um ataque SSRF segue estas etapas:
- Parâmetro controlavel: a aplicação expoe um campo (URL, endpoint, base URL, path de imagem) que é repassado internamente para uma chamada HTTP do lado do servidor.
- Ausencia de validação: o servidor não verifica se o destino e permitido (lista de permissões, resolução DNS, esquema de URL).
- Requisição interna: o atacante substitui o valor esperado por um IP/host interno (ex.:
http://127.0.0.1:8080/admin,http://169.254.169.254/latest/meta-data/) e o servidor realiza a requisição como se fosse legítima. - Exfiltração: a resposta do recurso interno e retornada ao atacante, diretamente no corpo da resposta ou de forma cega (blind SSRF) inferida por tempo de resposta ou erro HTTP.
No caso do CVE-2026-94039, a função vulnerável e generateInvoicePDF no arquivo /apps/invoices/actions.ts do TaxHacker. O parâmetro businessLogo (URL do logotipo da empresa no PDF) e passado sem sanitização para um renderizador que busca a imagem via HTTP. Um atacante autenticado pode substituir a URL do logo por um endpoint interno e fazer o servidor buscar conteúdo de sistemas não expostos publicamente.
No CVE-2026-94038, a vulnerabilidade está na função textSearchV2Handler do arquivo deno/main.tsx do dim-sum-app. O argumento supabase_url e injetado diretamente em uma chamada remota, permitindo que o servidor Deno seja usado para requisitar qualquer URL acessível a partir de seu ambiente de execução.
Quem foi afetado
As versões afetadas são:
- TaxHacker até 0.8.5: aplicativo de gestão fiscal com renderização de PDFs. O CVE-2026-94039 e o CVE-2026-94040 (SSRF no settings via LLM provider/apiKey) afetam o mesmo projeto, indicando que multiplos parâmetros de URL não foram validados ao longo do desenvolvimento.
- dim-sum-app (NonceGeek): aplicação com backend Deno que integra Supabase. O CVE-2026-94038 mostra que a URL do Supabase configurada dinamicamente não passa por nenhum gate de validação antes de ser usada em chamadas de rede.
Embora esses projetos sejam de nicho, o padrão de vulnerabilidade e extremamente comum em qualquer sistema que:
- Gera PDFs com imagens/recursos buscados via URL fornecida pelo usuário.
- Integra provedores externos (LLMs, armazenamento em nuvem, APIs de terceiros) cujos endpoints são configurados pelo usuário final.
- Implementa funcionalidades de webhook, preview de URL ou scraping de conteúdo.
- Usa bibliotecas como Puppeteer, Playwright, wkhtmltopdf ou headless Chrome com URLs de entrada do usuário.
Como identificar SSRF na sua aplicação
A detecção de SSRF pode ser feita em tres frentes: revisao de código, testes dinâmicos e monitoramento de logs.
Revisao de código: procure por padrões onde variaveis de entrada do usuário chegam a chamadas como fetch(url), axios.get(url), http.get(url), curl(url) ou equivalentes sem passar por validação de schema, hostname ou lista de permissões. Em TypeScript/JavaScript, new URL(input) constroi o objeto mas não válida o destino.
Testes dinâmicos: ferramentas como OWASP ZAP, Burp Suite Pro (com a extensão SSRF Collaborator) e o serviço Interactsh (da ProjectDiscovery) permitem inserir URLs de callback para detectar SSRF cego. O fluxo básico e: injetar http://SEU_OAST_SERVER/ssrf-test nos campos suspeitos e monitorar se o servidor de destino recebe a requisição.
Logs e rede: em produção, monitorar requisições HTTP originadas pelo processo da aplicação (via tcpdump, eBPF ou firewall de saida com logging) para destinos não previstos, especialmente 169.254.169.254 (metadados AWS/GCP/Azure), 192.168.x.x, 10.x.x.x e 172.16-31.x.x.
Como se proteger e mitigar
A mitigação de SSRF deve ser aplicada em camadas:
1. Validação de URL no servidor (obrigatória): antes de realizar qualquer requisição com URL fornecida pelo usuário, valide:
- O schema deve ser explicitamente
https://(ouhttp://se necessário, mas nuncafile://,dict://,gopher://). - O hostname deve estar em uma lista de permissões (allowlist). Rejeite IPs privados, loopback e link-local.
- Resolva o DNS do hostname e confirme que o IP resolvido não e privado (proteção contra DNS rebinding).
2. Lista de bloqueio de IPs (complementar, não suficiente sozinha): bloquear requisições para ranges RFC1918 (10/8, 172.16/12, 192.168/16), loopback (127/8, ::1), link-local (169.254/16, fe80::/10) e metadados de cloud (169.254.169.254). Importante: listas de bloqueio por si só são contornáveis via DNS rebinding; use junto com allowlist.
3. Isolar o serviço que faz requisições externas: se sua aplicação precisa buscar recursos externos (ex.: renderizador de PDF), execute esse serviço em um container ou VM sem acesso a rede interna. Aplicar políticas de egress restritivas via firewall (iptables, nftables, Network Policy no Kubernetes).
4. Desabilitar redirecionamentos automáticos: muitas bibliotecas HTTP seguem redirecionamentos automaticamente; um atacante pode apontar para um servidor externo que redireciona para um IP interno. Configure redirect: 'manual' (fetch API), maxRedirects: 0 (axios) ou followRedirect: false (got).
5. Atualizar as dependências afetadas: para TaxHacker, verifique a versão mais recente após 0.8.5 nos releases do repositório. Para dim-sum-app, acompanhe os commits do NonceGeek e aplique o patch assim que disponível.
Comparação com casos anteriores de SSRF
SSRF não e uma vulnerabilidade nova. Em 2019, a violação de dados da Capital One nos EUA foi viabilizada por uma instância EC2 com SSRF que permitiu buscar credenciais temporarias no endpoint de metadados da AWS (169.254.169.254), resultando na exposição de dados de mais de 100 milhoes de clientes. O caso estabeleceu o SSRF como uma das vulnerabilidades mais críticas em ambientes de nuvem.
Em 2021, o GitLab corrigiu CVE-2021-22214, um SSRF em webhooks que permitia escanear portas internas e acessar recursos da rede interna do GitLab.com. A correção incluiu a implementação de um DNS resolver interno que bloqueava resoluções para IPs privados.
Os CVEs de 2026 seguem o mesmo padrão: parâmetros de URL de usuário chegam a chamadas HTTP sem sanitização. A diferença e que agora as aplicações são escritas em TypeScript moderno com Deno e Next.js, mostrando que a linguagem e o runtime não eliminam a classe de vulnerabilidade.
Análise técnica dos CVEs
CVE-2026-94039 (TaxHacker - Invoice PDF Renderer):
- CVSS Base Score: 7.3 (Alta)
- Vetor: Rede / Sem privilegios especiais / Sem interação do usuário
- Componente afetado:
generateInvoicePDFem/apps/invoices/actions.ts - Parâmetro vulnerável:
businessLogo(URL da imagem do logo no PDF) - Tipo: SSRF (CWE-918)
- Versões afetadas: TaxHacker até 0.8.5
CVE-2026-94038 (dim-sum-app - Deno Backend):
- CVSS Base Score: 7.3 (Alta)
- Vetor: Rede / Sem privilegios especiais / Sem interação do usuário / Ataque remoto
- Componente afetado:
textSearchV2Handleremdeno/main.tsx - Parâmetro vulnerável:
supabase_url - Tipo: SSRF (CWE-918)
Ambos os CVEs tem exploração possível remotamente sem autenticação especial, o que eleva o risco em instâncias publicamente expostas. Em ambientes de cloud (AWS, GCP, Azure), o impacto pode ser crítico se o endpoint de metadados estiver acessível a partir do processo da aplicação.
Impacto e consequencias
O impacto de um SSRF bem-sucedido depende do ambiente de execução da aplicação:
Em cloud (AWS, GCP, Azure): o atacante pode buscar credenciais temporarias IAM via 169.254.169.254/latest/meta-data/iam/security-credentials/, assumir roles com permissões elevadas e comprometer toda a conta cloud. Este e o cenário de maior impacto.
Em redes corporativas: o servidor vulnerável torna-se um proxy para escanear portas internas, acessar paineis administrativos (Kibana, Grafana, Jenkins, Redis) não expostos publicamente e exfiltrar dados de serviços sem autenticação na rede interna.
Em servidores standalone: acesso a http://127.0.0.1:PORT pode revelar serviços locais como bancos de dados (MongoDB, Redis, Elasticsearch) que escutam em loopback sem autenticação, partindo do principio de que nunca seriam acessados externamente.
Além do impacto técnico, h ha consequencias legais relevantes no Brasil: a LGPD (Lei 13.709/2018) exige notificação de incidentes que resultem em acesso não autorizado a dados pessoais em até 72 horas para a ANPD. Uma exploração bem-sucedida de SSRF que leve a exfiltração de dados pessoais configura incidente de segurança com obrigação de notificação.
Dicas práticas e boas práticas
Para desenvolvedores e times de segurança:
- Auditoria de código: busque por
fetch(,axios.get(,http.get(,request(,curl(e verifique se a URL vem de entrada do usuário. Use ferramentas de SAST (Semgrep, CodeQL) com regras específicas para SSRF. - Biblioteca de validação: use pacotes como
ssrf-filter(npm) ou implemente validação própria com resolução DNS antes da requisição. - Política de egress: em Kubernetes, use Network Policies para bloquear egress de pods que não precisam de acesso externo. Em VMs, use iptables/nftables.
- IMDSv2 obrigatório na AWS: habilite IMDSv2 (token obrigatório) em todas as instâncias EC2 para dificultar exfiltração de metadados via SSRF.
- Monitoramento continuo: ferramentas como o TrustSiteMonitor detectam exposição de endpoints e configurações indevidas que podem indicar a presença de SSRF na sua aplicação, alertando antes que o atacante explore a vulnerabilidade.
Conclusao: o que fazer agora
Se você mantiver ou usar aplicações TaxHacker até a versão 0.8.5 ou dim-sum-app com Deno backend, a ação imediata e verificar se ha atualização disponível nos repositórios oficiais e aplicar o patch. Se não houver patch, isole a aplicação de redes internas sensiveis até que a correção seja lancada.
Para desenvolvedores em geral: SSRF e um item obrigatório no modelo de ameacas de qualquer aplicação que realize requisições HTTP com entrada de usuário. Inclua testes de SSRF no pipeline de CI/CD usando ferramentas como Interactsh ou Burp Collaborator. O custo de prevenção e ordens de grandeza menor que o custo de resposta a um incidente de dados.
Por fim, mantenha o monitoramento continuo dos seus sites e APIs. Vulnerabilidades como SSRF muitas vezes não tem exploits públicos imediatamente, mas são catalogadas em bases como o NVD e tornam-se alvo de scanners automatizados em poucas horas após a publicação do CVE. A janela entre publicação e tentativa de exploração massiva e cada vez menor.
Comentários
Deixar um comentárioVocê precisa ter uma conta no CuritibaBlog para comentar.