Python se ve afectado por vulnerabilidad crítica de validación de direcciones IP

Iniciado por AXCESS, Mayo 01, 2021, 02:32:02 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

La dirección IP de la biblioteca estándar de Python también sufre la vulnerabilidad crítica de validación de la dirección IP, idéntica a la falla que se informó en la biblioteca "netmask" a principios de este año.

Los investigadores que habían descubierto la falla crítica en la máscara de red, también descubrieron la misma falla en este módulo de Python y obtuvieron un identificador de vulnerabilidad: CVE-2021-29921.

El error de regresión se introdujo en el módulo ipaddress de Python 3.x como resultado de un cambio realizado en 2019 por los mantenedores de Python.

Los ceros iniciales eliminados de las direcciones IP

En marzo, se informó por primera vez sobre una vulnerabilidad crítica de validación de IP en la biblioteca de máscara de red utilizada por miles de aplicaciones.

La vulnerabilidad, rastreada por CVE-2021-28918 (Crítica), CVE-2021-29418 (Media) y CVE-2021-29424 (Alta) existía en las versiones npm y Perl de la máscara de red, y en algunas otras bibliotecas similares.

Resulta que la biblioteca estándar ipaddress introducida en Python 3.3 también se ve afectada por esta vulnerabilidad, como lo revelaron varios investigadores esta semana.

Rastreado como CVE-2021-29921, el error se refiere al análisis incorrecto de direcciones IP por parte de la biblioteca estándar ipaddress.

El módulo ipaddress de Python proporciona a los desarrolladores funciones para crear fácilmente direcciones IP, redes e interfaces; y analizar / normalizar direcciones IP ingresadas en diferentes formatos.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Una dirección IPv4 se puede representar en una variedad de formatos, incluidos decimal, entero, octal y hexadecimal, aunque las direcciones IPv4 más comunes se expresan en formato decimal.

Por ejemplo, un dirección IPv4 representada en formato decimal es 104.20.59.209, pero la misma se puede expresar en formato octal como 0150.0024.0073.0321.

Supongamos que recibe una dirección IP en formato decimal, 127.0.0.1, que se entiende ampliamente como la dirección de bucle invertido local o localhost.

Si tuviera que anteponerle un 0, ¿debiera una aplicación analizar 0127.0.0.1 como 127.0.0.1 o algo más?

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

De particular interés es el hecho de que 127.0.0.1 no es una dirección IP pública sino una dirección de bucle invertido, sin embargo, su representación ambigua la cambia a una dirección IP pública que conduce a un host completamente diferente.

De acuerdo con la especificación original de IETF, para direcciones IP ambiguas, partes de una dirección IPv4 se pueden interpretar como octal si tienen el prefijo "0".

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 (PoC) 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 '.

Pruebe esto en su navegador web. En las pruebas realizadas, al escribir 0127.0.0.1/ en la barra de direcciones de Chrome, el navegador trata la cadena completa como una dirección IP en formato octal.

Al presionar Intro o Retorno, la IP de hecho cambia a su equivalente decimal de 87.0.0.1, que es la forma en que se supone que la mayoría de las aplicaciones manejan direcciones IP tan ambiguas.

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

"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 indeterminados de [Falsificación de solicitudes del lado del servidor (SSRF), Inclusión remota de archivos (RFI) e Inclusión de archivos locales (LFI) ] en muchos programas que se basan en Python stdlib ipaddress", afirman los investigadores.

Por ejemplo, si una lista de bloqueo de omisión anti-SSRF hubiera dependido de la dirección IP de Python para analizar una lista de direcciones IP, las direcciones IP ambiguas podrían introducirse fácilmente y hacer que las protecciones contra derivación fueran inútiles.

Error de regresión introducido en 2019, y el parche que se lanzará

Aunque el módulo ipaddress se introdujo en Python 3.3, este error de regresión se introdujo en el módulo a partir de la versión 3.8.0 hasta la 3.10 de Python, según los investigadores.

Antes de v3.8.0a4, la dirección IP de Python tenía algunas comprobaciones que rechazaban las direcciones IP proporcionadas en formatos mixtos (es decir, octal y decimal) por completo:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Sin embargo, a partir de la versión 3.8.0a4 de Python, estas comprobaciones se eliminaron por completo.

"Se deja de rechazar los octetos IPv4 por ser ambiguamente octales. Los ceros iniciales se ignoran y ya no se supone que especifiquen octetos octales. Los octetos son siempre números decimales. Los octetos no deben tener más de tres dígitos, incluidos los ceros iniciales", dijo el programador Joel Croteau, en el momento de realizar este cambio.

Poco tiempo después, los mantenedores de Python discutieron sobre las razones detrás de este compromiso y las razones prácticas para introducir este cambio cuando se trataba de manejar direcciones IP ambiguas.

Aunque las discusiones sobre un próximo parche están en curso, los detalles exactos sobre qué versión de Python lo contendrá son confusos.

En su lugar, uno de los mantenedores de Python sugirió un enfoque diferente:

"Es poco común pasar direcciones IPv4 con ceros a la izquierda".

"Si desea tolerar ceros a la izquierda, no tiene que modificar la dirección IP; para eso, puede preprocesar sus entradas: funciona en cualquier versión de Python con o sin la corrección", dijo el mantenedor de Python, Victor Stinner. , proponiendo una solución alternativa al problema:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Se está discutiendo más en el mismo hilo sobre cuál es la mejor manera de abordar este problema.

A los investigadores Victor Viale, Sick Codes, Kelly Kaoudis, John Jackson y Nick Sahler se les atribuye el descubrimiento y la notificación de este error al proyecto Python. Los mantenedores de Python Joel Croteau, Christian Heimes y Victor Stinner están involucrados en discusiones sobre cómo abordar este error.

Los hallazgos técnicos detallados de los investigadores se proporcionan en una publicación de blog:


Más información y seguimiento:
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Fuente
:
BleepingComputer
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta


-----------------------------------------------

Una frase para inspirarle:

"Son nuestras elecciones ... las que muestran lo que realmente somos, mucho más que nuestras habilidades".
-J.K. Rowling
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta