CVE-2023-24329 em Python: URLs manipuladas e controles de segurança que falham

Publicado em 2026-10-27 por frfrand

Uma vulnerabilidade do urllib.parse explicada sem tecnicismos: detecção, possíveis abusos, versões corrigidas e boas práticas.

CVE-2023-24329 em Python: URLs manipuladas e controles de segurança que falham

Como interpretar uma URL pode ser perigoso?

Suponha que você programe um backend em Python e permita consultar endereços web, mas bloqueie certos destinos. Se o seu código e outra ferramenta interpretarem a mesma URL de formas diferentes, você pode acabar validando um endereço e enviando a requisição para outro. CVE-2023-24329 trata de uma diferença de interpretação no módulo padrão urllib.parse.

O que falhava concretamente?

Em versões históricas do Python, funções como urlsplit() não removiam corretamente alguns espaços e caracteres de controle localizados no início de uma URL. O comportamento podia diferir do esperado por aplicativos e navegadores que seguem o padrão WHATWG. Uma verificação de segurança baseada nessa interpretação poderia tomar decisões equivocadas.

Quem descobriu e como foi solucionado?

O caso foi registrado no projeto CPython; a correção está associada ao trabalho técnico identificado como gh-102153. A equipe do Python incorporou mudanças para que urlsplit() descarte os caracteres de controle iniciais contemplados pelo padrão. É um exemplo de descoberta por meio da revisão de limites entre bibliotecas, formatos e validações, não de «Python permite hackear qualquer servidor».

Como um atacante poderia explorar isso?

A exploração depende do código do aplicativo. O atacante precisaria injetar uma URL especialmente formulada em uma função que toma decisões de segurança: listas de hosts autorizados, redirecionamentos, validações de links ou downloads remotos. Se outra parte do sistema interpretar essa mesma URL de forma diferente, um controle poderia ser burlando. Não se obtém execução remota automaticamente por instalar Python.

É o mesmo que SSRF?

Não. Uma solicitação falsificada do lado do servidor (SSRF) pode ser uma consequência em alguns aplicativos mal projetados, mas esta CVE descreve um problema de análise de URL. Para avaliar o risco, você precisa verificar se seu aplicativo aceita URLs externas e o que faz com elas após analisá-las.

Quais versões foram corrigidas?

O Python documentou a correção em publicações de junho de 2023, incluindo 3.11.4, 3.10.12, 3.9.17 e 3.8.17, entre outros ramos. Essas versões são referências históricas do patch, não um convite para instalar ramos que já encerraram o suporte. Em produção, escolha uma versão do Python mantida e verifique o pacote real da sua distribuição.

Como reviso uma aplicação própria?

Busque entradas que venham de usuários e terminem em urlparse, urlsplit, clientes HTTP, callbacks ou funções que resolvem endereços. Pergunte-se: validamos apenas o texto ou também o destino final? Resolvemos redirecionamentos? Bloqueamos destinos privados quando necessário? Os componentes usam o mesmo critério de interpretação? Teste casos extremos localmente e com autorização, sem enviar solicitações contra sistemas de terceiros.

Como corrigir e o que mais convém fazer?

Atualize o Python e as dependências, centralize a validação de URLs, verifique o esquema e o host permitidos, considere endereços IP resultantes e redirecionamentos, e adicione testes. Mesmo com o interpretador corrigido, uma validação caseira incompleta pode continuar vulnerável.

Perguntas frequentes

Afecta o Django ou o FastAPI automaticamente? Não. Depende do caminho de código que processa URLs não confiáveis.

Um simples pip install -U resolve o problema? Não necessariamente: essa falha está na biblioteca padrão do interpretador.

O que faço primeiro? Identifique a versão do Python e os caminhos onde processa URLs de usuários.

Fontes: Boletim Python 2023 · Publicação do Python 3.10.12 · Registro CVE.

Onde acompanhar os alertas e solicitar suporte?

Na ArduMaker explicamos novas vulnerabilidades e compartilhamos orientações sobre revisão de versões, atualizações e medidas de contenção. Você pode consultar a página de CVE e suporte da ArduMaker. Se o seu sistema não usa WordPress, indique igualmente a tecnologia, versão e configuração ao descrever o caso para avaliar o que corresponde revisar. Um alerta publicado não significa que todos os servidores dessa tecnologia estejam afetados, nem que uma atualização pendente implique uma intrusão confirmada.

Atualização editorial: outubro de 2026. Verifique sempre o aviso oficial por possíveis mudanças de versões e mitigações.

Exemplo prático: validação de endereços em uma API Python

Situação: uma API aceita um link de imagem e verifica se o host pertence a uma lista autorizada. Se dois componentes interpretarem de forma diferente os caracteres iniciais de uma URL, uma validação pode ser insuficiente.

Em um ambiente de desenvolvimento, observe como a biblioteca padrão responde a um exemplo inofensivo:

from urllib.parse import urlsplit

direcciones = [
    "https://ejemplo.com/imagen.jpg",
    " https://ejemplo.com/imagen.jpg",
]
for direccion in direcciones:
    datos = urlsplit(direccion)
    print(repr(direccion), "=>", datos.scheme, datos.hostname)

A diferença pode depender da versão do Python. Isto não demonstra exploração, mas permite entender por que normalizar, validar e usar o destino efetivo são etapas diferentes.

Antes: if "ejemplo.com" in url: aceitava correspondências enganosas. Depois: compare scheme e hostname com uma lista exata de valores permitidos, controle redirecionamentos e bloqueie destinos internos quando o aplicativo não deve acessá-los. Atualize também o próprio interpretador.

CVE-2023-24329 em Python: URLs manipuladas e controles de segurança que falham
  • Python
  • CVE-2023-24329
  • urllib
  • Seguridad API
  • Ciberseguridad

Continuar lendo

Todos os artigos · Planos VPS