Se trata de una vulnerabilidad crítica que afecta a la biblioteca estándar de Python. Afecta a la validación de direcciones IP, algo que ya ha ocurrido en la biblioteca netmask hace unos meses. El fallo ha sido registrado como CVE-2021-29921.

Concretamente afecta al módulo ipaddress de Python 3.8 a 3.10 y se debe a un cambio que realizaron en 2019 (después de la versión v3.8.0a4). Hace un par de meses vimos una serie de vulnerabilidades que afectaban a la máscara de subred (netmask). Ahora afecta también a esta biblioteca estándar de Python.

Esta vulnerabilidad provoca un análisis incorrecto de las direcciones IP por parte de la biblioteca estándar ipaddress. Este módulo se encarga de que los desarrolladores puedan crear fácilmente direcciones IP, redes e interfaces. Hay que indicar que una dirección IPv4 puede aparecer en formato decimal, entero, octal o hexadecimal, aunque lo más normal es que aparezca en el primer formato.

De acuerdo con la especificación original de IETF, para direcciones IP ambiguas, partes de una dirección IPv4 pueden interpretarse como octal si tienen el prefijo «0». De particular interés es el hecho de que 127.0.0.1 no es una dirección IP pública, sin embargo, su representación ambigua la cambia a una dirección IP pública que conduce a un host completamente diferente.

Pero, en el caso de la dirección IP de la biblioteca estándar de Python, los ceros iniciales simplemente se eliminarían y descartarían. Una prueba de concepto realizada por los investigadores Sick Codes y Victor Viale muestra que la biblioteca de direcciones IP de Python simplemente descartaría los ceros iniciales. En otras palabras, cuando se analiza mediante el módulo ipaddress de Python, ‘010.8.8.8’ se trataría como ‘10.8.8.8’, en lugar de ‘8.8.8.8’.

La validación de entrada incorrecta de cadenas octales en Python 3.8.0 a v3.10 stdlib ipaddress permite que atacantes remotos no autenticados realicen ataques SSRF, RFI y LFI indeterminados en muchos programas que dependen de la librería. Por ejemplo, un atacante que envía una dirección IP a una aplicación web que se basa en stdlib ipaddress, podría causar SSRF al ingresar datos de entrada octal. Por ejemplo, un atacante puede enviar 010.8.8.8, que es 8.8.8.8, sin embargo, la dirección IP incorporada de Python evaluará esto como 10.8.8.8. Aquí hay una PoC.
Aquí llega el problema con los ceros a la izquierda. Es lo mismo que ocurría con la biblioteca netmask. La manera en la que gestiona esa IP cambia al agregar un valor cero antes de la IP en formato decimal. Lo que ocurre con la vulnerabilidad de Python es que los ceros a la izquierda los descartaría.

El problema de este fallo en la validación de IP que afecta a Python permite ataques remotos. Un atacante sin autorización podría realizar solicitudes falsas del lado del servidor, inclusión remota de archivos o archivos locales. Esto afecta a miles de programas que se basan en Python stdlib ipaddress, como indican los investigadores de seguridad detrás de este descubrimiento.

Esta vulnerabilidad va a ser corregida mediante un parche pero, como indican los investigadores de seguridad, es poco común gestionar direcciones IP con ceros a la izquierda. Por ello no es un fallo que en la práctica pueda afectar a muchos usuarios, aunque es algo que se debe corregir para evitar problemas.

Fuente y redacción: seguinfo.com.ar

Compartir