O Diário do Analista
Vol. 2  |  N. 5  |  Pp. 172–174  |  2026  |  ISSN xxxx-xxxx

Alerta: Sistemas Baseados em FastAPI Podem Estar Inseguros (CVE-2026-48710)

FastAPI é uma ferramenta diariamente utilizada por desenvolvedores Python para a criação rápida e eficiente de APIs. Essa biblioteca poderosa permite criar desde pequenas APIs para sistemas simples, até sistemas altamente complexos e industriais. A vulnerabilidade CVE-2026-48710 [1] afeta uma das bibliotecas utilizadas na criação do FastAPI: A Starlette. 


Como a Vulnerabilidade é Explorada e Sua Origem

Starlette é um framework/toolkit  de ASGI (Asynchronous Server Gateway Interface) leve ideal para a construção de serviços assíncronos web em Python, justamente a necessidade da biblioteca FastAPI.

Antes da versão 1.0.1, o cabeçalho HTTP  Host¹ não era validado antes de ser utilizado na reconstrução de URL da requisição. Como o algoritmo de roteamento depende do caminho bruto da requisição HTTP, enquanto a requisição URL  é reconstruída a partir do cabeçalho de Host, um header malformado poderia fazer com que o caminho de requisição URL fosse diferente do caminho realmente requisitado.

Isso significa que middlewares e endpoints que aplicam restrições de segurança com base na URL de requisição poderiam ser contornados. Em outras palavras, um atacante poderia manipular o header Host para burlar controles de acesso ou validações de rota.

A vulnerabilidade foi descoberta pela empresa X41 D-Sec utilizando o sistema autônomo Nemesis, e, publicada no dia 26 de maio de 2026. Sua PoC pode ser encontrada em badhost.org ou github.com.

¹ enviado quando se realiza uma requisição HTTP. Contém informações sobre o host de destino, o caminho solicitado e a versão do HTTP.


Versões Afetadas e Sua Mitigação

Versões do framework Starlette anteriores à 1.0.1 são afetadas por essa vulnerabilidade. Além disso, para projetos utilizando FastAPI é necessário verificar manualmente a versão do Starlette utilizada. Visto que versões atuais do FastAPI (eg. 0.136.3) utilizam versões do Starlette superior a 1.1.0, não sendo mais vulneráveis.

Para mitigar [3] a vulnerabilidade é sugerido:

  • Atualizar o FastAPI e o Starlette para versões que utilizem o Starlette 1.0.1 ou superior

  • Evitar autenticação baseada em caminho (request.url.path)

    • Middlewares que decidem autenticação por esse meio são inerentemente frágeis. A autenticação deve ser atrelada ao endpoint em si e não ao caminho utilizado para alcançá-lo. Use requires() (Starlette) ou Depends() / Security() (FastAPI), que aplicam controle de acesso no nível do endpoint.
  • Implementar um reverse proxy na frente do ASGI

    • Ferramentas como Nginx, Caddy, Traefik ou HAProxy validam e normalizam o header Host, bloqueando entradas maliciosas antes que chegem à aplicação.

  • Usar scope["path"] em vez de request.url.path (se usar middleware)

    • O valor de scope["path"] vem da linha da requisição HTTP e não pode ser manipulado via header Host.


Detalhes Técnicos

Quando um cliente faz uma requisição para, por exemplo, http://example.com/foo, ele envia:

  • GET /foo HTTP/1.1
  • Host: example.com

Em versões vulneráveis do Starlette a reconstrução do URL é feita  concatenando http://{host}{path} e depois reprocessando esse valor. Mas é nesse momento que surge o problema, o header Host deveria conter apenas um formato válido de host (com possível porta), conforme definido nos RFCs 9112 e 3986

Quando o Host contém caracteres inválidos, como /? ou #, esses caracteres acabam alterando a interpretação da URL durante o parsing, mudando os limites entre caminho, query e fragmento. 

Exemplo de Exploração

Considere a seguinte requisição manipulada:

  • GET /foo HTTP/1.1

  • Host: example.com/abc?bar=

O Starlette reconstruía isso como:

  • http://example.com/abc?bar=/foo

Ao reprocessar essa URL:

  • O caminho interpretado passa a ser /abc.

  • Contudo, o servidor originalmente recebeu /foo.

O roteamento continua funcionando corretamente com base no caminho real (/foo), e o endpoint correspondente a /foo é executado normalmente. Porém, qualquer middleware ou lógica que utilize request.url.path verá /abc. Assim, o sistema executa um endpoint protegido (/foo), mas valida as permissões com base em um caminho diferente (/abc).

Na prática, isso permite contornar controles de acesso baseados em caminho (path-based authorization), abrindo espaço para bypass de autenticação ou autorização [2].


Referências

[1] MITRE. CVE-2026-48710. Disponível em: <https://www.cve.org/CVERecord?id=CVE-2026-48710>. Acesso em: 28 maio. 2026.

[2] KLUDEX. Missing Host header validation poisons request.url.path, bypassing path-based security checks. Disponível em: <https://github.com/Kludex/starlette/security/advisories/GHSA-86qp-5c8j-p5mr>. Acesso em: 28 maio. 2026.

[3] X41 D-SEC GMBH; BREACH, N. BadHost Scanner – CVE-2026-48710. Disponível em: <https://badhost.org/>. Acesso em: 28 maio. 2026.

 

Tags: , , , , .

Categorias: Ataques, CVE, PyPI, Python, Supply Chain.