Falla de validación de direcciones IP también afecta proyectos Python

Expertos reportan que la vulnerabilidad de validación de la dirección IP recientemente reportada también impacta a la dirección IP de la biblioteca estándar de Python. La falla, identificada como CVE2021-29921, reside en el módulo ipaddress de Python 3.x y existe debido a un cambio realizado hace un par de años por los mantenedores del proyecto.

Hace un par de meses se presentaron informes sobre una vulnerabilidad crítica de validación IP en la biblioteca de máscara de red empleada por miles de aplicaciones. Identificada como CVE-2021-28918 existe en las versiones npm y Perl de la máscara de red y otras bibliotecas similares.

El reporte más reciente indica que la biblioteca estándar ipaddress introducida en Python 3.3 también se ve afectada por esta falla. Acorde a los investigadores responsables del hallazgo, la vulnerabilidad existe debido al análisis incorrecto de direcciones IP por parte de la biblioteca afectada. Como algunos ya sabrán, el módulo ipaddress proporciona a los desarrolladores de Python diversas funciones para crear fácilmente direcciones IP, redes e interfaces.

La dirección IPv4 puede presentarse en múltiples formatos (enteros, decimales, hexadecimales u octales), aunque por lo general se presenta en formato decimal. Supongamos que recibe una dirección IP en formato decimal, 127.0.0.1, que se entiende ampliamente como la dirección de bucle de retorno local o localhost.

Si tuviera que anteponerle un 0, ¿debería una aplicación analizar 0127.0.0.1 o como 127.0.0.1? Analizando el sitio web de la plataforma BleepingComputer, puede escribit 0127.0.0.1 en la barra de direcciones de Chrome, lo que el navegador tratará de completar como una dirección IP en formato octal. Presionando Enter, la IP cambia a su equivalente decimal (87.0.0.1), que es la forma en que se supone la mayoría de las aplicaciones administran esta clase de direcciones IP.

De acuerdo con la especificación original, para direcciones IP ambiguas, partes de una dirección IPv4 se pueden interpretar como octal si tienen el prefijo “0”; no obstante, en el caso de la dirección IP de la biblioteca estándar de Python, los ceros iniciales simplemente se eliminarán. Una prueba de concepto muestra que la biblioteca de direcciones IP de Python simplemente descartaría los ceros al inicio. Por decirlo de otra forma, 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 los actores de amenazas realicen ataques Man-in-The-Middle (MiTM), falsificación de solicitudes, entre otras variantes de ataque”, señala la investigación.

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. En las plataformas oficiales del proyecto se han publicado múltiples opciones para la mitigación temporal del riesgo. Para conocer más sobre riesgos de seguridad informática, malware, vulnerabilidades y tecnologías de la información, no dude en ingresar al sitio web del Instituto Internacional de Seguridad Cibernética (IICS).