CVE-2023-24329 en Python: URLs manipuladas y controles de seguridad que fallan

Publicado el 2026-10-27 por frfrand

Una vulnerabilidad de urllib.parse explicada sin tecnicismos: detección, posibles abusos, versiones corregidas y buenas prácticas.

CVE-2023-24329 en Python: URLs manipuladas y controles de seguridad que fallan

¿Cómo puede ser peligroso interpretar una URL?

Supongamos que programás un backend en Python y permitís consultar direcciones web, pero bloqueás ciertos destinos. Si tu código y otra herramienta interpretan una misma URL de formas distintas, podés terminar validando una dirección y enviando la petición a otra. CVE-2023-24329 trata de una diferencia de interpretación en el módulo estándar urllib.parse.

¿Qué fallaba concretamente?

En versiones históricas de Python, funciones como urlsplit() no eliminaban correctamente algunos espacios y caracteres de control situados al comienzo de una URL. El comportamiento podía diferir del que esperan aplicaciones y navegadores que siguen el estándar WHATWG. Una comprobación de seguridad basada en esa interpretación podía tomar decisiones equivocadas.

¿Quién lo descubrió y cómo se solucionó?

El caso quedó registrado en el proyecto CPython; la corrección está asociada al trabajo técnico identificado como gh-102153. El equipo de Python incorporó cambios para que urlsplit() descarte los caracteres de control iniciales contemplados por el estándar. Es un ejemplo de hallazgo mediante revisión de límites entre bibliotecas, formatos y validaciones, no de «Python permite hackear cualquier servidor».

¿Cómo podría aprovecharse un atacante?

La explotación depende del código de la aplicación. El atacante necesitaría introducir una URL especialmente formada en una función que toma decisiones de seguridad: listas de hosts autorizados, redirecciones, validaciones de enlaces o descargas remotas. Si otra parte del sistema entiende esa misma URL de otra manera, podría eludirse un control. No se obtiene ejecución remota automáticamente por instalar Python.

¿Es lo mismo que SSRF?

No. Una petición falsificada del lado del servidor (SSRF) puede ser una consecuencia en algunas aplicaciones mal diseñadas, pero esta CVE describe un problema de análisis de URL. Para evaluar riesgo necesitás ver si tu aplicación acepta URLs externas y qué hace con ellas después de analizarlas.

¿Qué versiones se corrigieron?

Python documentó la corrección en publicaciones de junio de 2023, incluyendo 3.11.4, 3.10.12, 3.9.17 y 3.8.17, entre otras ramas. Esas versiones son referencias históricas del parche, no una invitación a instalar ramas que ya finalizaron su soporte. En producción elegí una versión de Python mantenida y verificá el paquete real de tu distribución.

¿Cómo reviso una aplicación propia?

Buscá entradas que vengan de usuarios y terminen en urlparse, urlsplit, clientes HTTP, callbacks o funciones que resuelven direcciones. Preguntate: ¿validamos únicamente el texto o también el destino final? ¿Resolvemos redirecciones? ¿Bloqueamos destinos privados cuando es necesario? ¿Los componentes usan el mismo criterio de interpretación? Probá con casos límite de forma local y autorizada, sin lanzar solicitudes contra sistemas de terceros.

¿Cómo se corrige y qué más conviene hacer?

Actualizá Python y dependencias, centralizá la validación de URLs, verificá esquema y host permitidos, considerá direcciones IP resultantes y redirecciones, y añadí tests. Aun con el intérprete corregido, una validación casera incompleta puede seguir siendo vulnerable.

Preguntas frecuentes

¿Afecta a Django o FastAPI automáticamente? No. Depende del camino de código que procese URLs no confiables.

¿Un simple pip install -U arregla el problema? No necesariamente: esta falla está en la biblioteca estándar del intérprete.

¿Qué hago primero? Identificá la versión de Python y las rutas donde procesás URLs de usuarios.

Fuentes: Boletín Python 2023 · Publicación de Python 3.10.12 · Registro CVE.

¿Dónde seguir las alertas y pedir soporte?

En ArduMaker explicamos nuevas vulnerabilidades y compartimos orientación sobre revisión de versiones, actualizaciones y medidas de contención. Podés consultar la página de CVE y soporte de ArduMaker. Si tu sistema no usa WordPress, indicá igualmente la tecnología, versión y configuración al describir el caso para evaluar qué corresponde revisar. Una alerta publicada no significa que todos los servidores de esa tecnología estén afectados, ni que una actualización pendiente implique una intrusión confirmada.

Actualización editorial: octubre de 2026. Revisá siempre el aviso oficial por posibles cambios de versiones y mitigaciones.

Ejemplo práctico: validación de direcciones en una API Python

Situación: una API acepta un enlace de imagen y comprueba que su host pertenezca a una lista autorizada. Si dos componentes interpretan de manera distinta caracteres iniciales de una URL, una validación puede ser insuficiente.

En un entorno de desarrollo, observá cómo responde la biblioteca estándar a un ejemplo inocuo:

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)

La diferencia puede depender de la versión de Python. Esto no demuestra explotación, pero permite entender por qué normalizar, validar y usar el destino efectivo son pasos diferentes.

Antes: if "ejemplo.com" in url: aceptaba coincidencias engañosas. Después: compará scheme y hostname con una lista exacta de valores permitidos, controlá redirecciones y bloqueá destinos internos cuando la aplicación no deba acceder a ellos. Actualizá también el propio intérprete.

CVE-2023-24329 en Python: URLs manipuladas y controles de seguridad que fallan
  • Python
  • CVE-2023-24329
  • urllib
  • Seguridad API
  • Ciberseguridad

Seguir leyendo

Todos los artículos · Planes de VPS