Linux Adictos Darkcrizt  

Detectaron una vulnerabilidad en SSLSocket de Python

vulnerabilidad

Si se explotan, estas fallas pueden permitir a los atacantes obtener acceso no autorizado a información confidencial o, en general, causar problemas

Hace pocos días se dio a conocer la noticia de que se ha descubierto una vulnerabilidad de seguridad crítica en el módulo SSLSocket de Python, la vulnerabilidad (ya catalogada bajo CVE-2023-40217) permite a un atacante eludir el protocolo de enlace TLS e inyectar datos maliciosos en una conexión segura.

Se menciona que el problema en la clase SSLSocket que podría omitir durante la etapa de la negociación de conexión TLS y procesos relacionados, como la verificación de certificados. Un ataque exitoso puede hacer que los datos no cifrados se traten como si se hubieran transmitido mediante una conexión TLS válida.

Se menciona que las versiones afectadas de Python son:

  • Python 3.12.0a1 a 3.12.0rc1
  • Pitón 3.11.0 a 3.11.4
  • Python 3.10.0 a 3.10.12
  • Python 3.9.0 a 3.9.17
  • Pitón 3.8.0 a 3.8.17
  • Python 3.7.17 y anteriores

El problema se debe al hecho de que después de crear el socket, hay una pequeña ventana durante la cual los datos recibidos y almacenados en el buffer se tratarán como leídos del cliente si la conexión se cierra antes de que comience el proceso de negociación de la conexión TLS. Para llevar a cabo un ataque, basta con establecer una conexión, enviar datos inmediatamente y cerrar el socket sin esperar respuesta para negociar una conexión TLS. El tamaño de los datos que se pueden enviar durante un ataque está limitado por el tamaño del búfer de la red.

La vulnerabilidad afecta a las aplicaciones de servidor (por ejemplo, servidores HTTPS)y otros protocolos del lado del servidor que utilizan la autenticación de cliente SSL estándar de Python para organizar un canal de comunicación seguro que utiliza autenticación de certificado de cliente (por ejemplo, mTLS). Esta vulnerabilidad es particularmente peligrosa para los servidores HTTPS, ya que un atacante podría aprovechar esta vulnerabilidad para evitar el protocolo de enlace TLS e inyectar un certificado de cliente malicioso en la conexión. Esto permitiría al atacante obtener acceso a los recursos del servidor sin estar autenticado.

Ademas de ello se menciona que también se puede utilizar para atacar a clientes que se conectan a un servidor controlado por un atacante si estos clientes proceden inmediatamente a leer datos del socket, sin enviar primero una solicitud (aplicaciones cliente normales, como pip, que utilizan HTTPS para enviar solicitudes, el la vulnerabilidad no se ve afectada).

La vulnerabilidad solo se puede utilizar para enviar datos sin pasar por la autenticación del certificado; dado que la conexión se cierra inmediatamente, la respuesta a la solicitud no se enviará al cliente. Al mismo tiempo, la vulnerabilidad puede usarse para ataques a la API, a través de los cuales se pueden realizar cambios o eliminar datos.

Esta vulnerabilidad *afecta* a los clientes que leen y procesan datos del servidor después de un protocolo de enlace TLS sin enviar ningún dato primero. Nuestro equipo desconoce un protocolo que utilice TLS que se ajuste a este patrón de uso.

Esta vulnerabilidad *no afecta* las conexiones HTTPS del lado del cliente como pip o solicitudes, ya que una solicitud HTTP debe enviarse antes de leer una respuesta HTTP, lo que significa que la conexión ya estará cerrada en el momento en que el cliente envíe una solicitud HTTP, lo que provocará una error.

Por otra parte, vale la pena mencionar que también se ha corregido otra vulnerabilidad en Python (CVE-2023-41105) la cual era también importante, ya que podría ser usada para eludir las comprobaciones válidas de rutas de archivos realizadas mediante una funcion.

La vulnerabilidad se debe al hecho de que si la ruta contiene caracteres con un código null (‘\0’),ya que una función corta la ruta después del primer carácter null. En este caso, en funciones posteriores para trabajar con archivos, se puede utilizar la ruta completa, en lugar de la ruta truncada. El problema aparece solo en la rama 3.11.x.

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.

Leave A Comment

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.