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

pitón

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

Investigadores que habían descubierto la falla crítica en 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 ha infiltrado en Python 3.x dirección IP módulo como resultado de un cambio realizado en 2019 por los mantenedores de Python.

Índice de contenidos
  1. Ceros iniciales eliminados de las direcciones IP
  2. Error de regresión introducido en 2019, parche

Ceros iniciales eliminados de las direcciones IP

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

La vulnerabilidad, encontrada por CVE-2021-28918 (Critical), CVE-2021-29418 (Medium) y CVE-2021-29424 (High) existía en las versiones npm y Perl de máscara de redy algunas otras bibliotecas similares.

Resulta que el dirección IP La biblioteca estándar 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 implica el análisis incorrecto de direcciones IP por dirección IP biblioteca estándar.

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

biblioteca ipaddress en python 3.3
Biblioteca estándar de Python dirección IP utilizado para normalizar o analizar direcciones IP en diferentes formatos

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, la dirección IPv4 de BleepingComputer 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 una dirección de bucle invertido local o localhost.

Si tuviera que anteponer un 0, ¿una aplicación aún analizaría 0127.0.0.1 como 127.0.0.1 o algo más?

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

Al presionar Enter o Enter cambia la IP a su equivalente decimal de 87.0.0.1, que es la forma en que la mayoría de las aplicaciones deben manejar direcciones IP tan ambiguas.

dirección ipv4 en formato mixto
La mayoría de los navegadores web como Chrome compensan automáticamente las direcciones IP de formato mixto.

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.

Segundo Especificación IETF original, para direcciones IP ambiguas, partes de una dirección IPv4 se pueden interpretar como octal si van precedidas de un "0".

Pero, en el caso de la biblioteca estándar de Python dirección IP, todos los ceros iniciales simplemente se eliminarían y descartarían.

Una prueba de prueba de los investigadores. Códigos de enfermedad y Victor Viale muestra Python dirección IP la biblioteca simplemente descartaría los ceros iniciales.

En otras palabras, cuando lo analiza Python dirección IP módulo, "010.8.8.8" se trataría como "10 .8.8.8" en lugar de "8.8.8.8".

prueba de dirección IP de Python
Python dirección IP considere "010.8.8.8" como "10 .8.8.8" en lugar de "8.8.8.8"

"Validación de entrada incorrecta de cadenas octales en Python 3.8.0 a v3.10 stdlib dirección IP permite que atacantes remotos no autenticados realicen operaciones indeterminadas [Server-Side Request Forgery (SSRF), Remote File Inclusion (RFI), and Local File Inclusion (LFI) attacks] en muchos programas basados ​​en Python stdlib ipaddress ", dicen los investigadores.

Por ejemplo, una lista de bloqueo de omisión anti-SSRF se basó en Python dirección IP Para analizar una lista de IP, se pueden ingresar fácilmente IP ambiguas y hacer que las protecciones anti-bypass sean inútiles.

Error de regresión introducido en 2019, parche

Aunque dirección IP El módulo 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 a 3.10 de Python, según los investigadores.

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

Dirección IP en Python 3.8
Las versiones de Python anteriores a 3.8.0a4 no permitían direcciones IP en formatos ambiguos / mixtos

Sin emabargo, como se vio de BleepingComputer, a partir de la versión 3.8.0a4 de Python, estos controles se han eliminado por completo.

"Deje de rechazar los octetos IPv4 porque son octetos ambiguos. 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 contener más de tres dígitos, incluidos los ceros iniciales", dijo el programador Joel Croteau. notado en el momento en que se comprometa este cambio.

A discusión había seguido rápidamente entre los mantenedores de Python las razones detrás de este compromiso y las razones prácticas para introducir este cambio cuando se trataba de lidiar con direcciones IP ambiguas.

Aunque se están discutiendo acerca de un próximo parche, los detalles exactos de qué versión de Python lo contendrá son confusos.

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

"No es común pasar direcciones IPv4 con ceros a la izquierda".

"Si desea tolerar los ceros a la izquierda, no tiene que cambiar el [sic] dirección IP para esto, 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 alternativa solución alternativa al problema:

solución temporal
Una posible solución alternativa para la validación de direcciones IP propuesta por Stinner
Imagen: BleepingComputer

Se están llevando a cabo más discusiones en el mismo hilo sobre cuál es la mejor manera de abordar este problema.

* Investigadores Victor Viale, Códigos de enfermedad, Kelly Kaoudis, John Jackson, es Nick Sahler, se les ha atribuido el mérito de haber descubierto e informado este error al proyecto Python. Mantenedores de Python Joel Croteau, Christian Heimes, es Victor Stinner están involucrados en discusiones sobre cómo corregir este error.

Los resultados técnicos detallados de los investigadores se proporcionan en un entrada en el blog.

Descubre más contenido

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir Change privacy settings