Esta vulnerabilidad, presente en la biblioteca estándar de Python ‘ipaddress’, se basa en una mala validación de direcciones IP ambiguas.

Hace unos días se publicaron los detalles de una vulnerabilidad que afectaría a las versiones de Python entre la 3.8 y la 3.10. En el momento de redacción de este artículo está catalogada como CVE-2021-29921 y se encuentra a la espera de una puntuación CVSS.

Para dar algo de contexto, una dirección IPv4 se puede representar en varios formatos: decimal, entero, octal y hexadecimal. Por conveniencia se suelen expresar en formato decimal.

Direcciones IPv4 en distintos formatos. Fuente: BleepingComputer

La especificación del IETF declara que en el caso de las direcciones IP ambiguas, es decir, cuyos fragmentos se puedan interpretar con múltiples formatos; las secciones de una IPv4 precedidas de un «0» se deben analizar como octal. En el caso de ‘ipaddress’, los ceros a la izquierda simplemente se eliminan y se descartan. Los investigadores Victor Viale y sickcodes han publicado una prueba de concepto para ilustrar esta vulnerabilidad.

Prueba de concepto del análisis de ‘ipaddress’ en Python. Fuente: SickCodes

La validación inadecuada de la entrada de cadenas en formato octal en ipaddress permitiría a atacantes remotos no autentificados realizar ataques Server-Side Request Forgery (SSRF), Remote File Inclusion (RFI) y Local File Inclusion (LFI) en múltiples programas que dependen de la stdlib ipaddress de Python.

Aunque el módulo ‘ipaddress’ se introdujo en la versión 3.3 de Python, esta comprobación se eliminó a partir de la versión 3.8.0 hasta un reciente cambio en la 3.10, cuyo lanzamiento está previsto en octubre de 2021. Este problema recuerda al que hubo hace pocos meses en el paquete netmask de Node.js, descubierto por este mismo equipo de investigadores. Sin embargo; la diferencia es que este fallo pertenece a la biblioteca estándar, lo que requiere de una actualización completa del entorno de Python para mitigar el impacto.

Más información:
[security] CVE-2021-29921: ipaddress Should not reject IPv4 addresses with leading zeroes as ambiguously octal
Python also impacted by critical IP address validation vulnerability
CVE-2021-29921 – python stdlib “ipaddress” – Improper Input Validation of octal literals in python 3.8.0 thru v3.10 results in indeterminate SSRF & RFI vulnerabilities.

La entrada Vulnerabilidad en la biblioteca ‘ipaddress’ de Python se publicó primero en Una al Día.