Asignada como CVE.2020-14422, la vulnerabilidad en Python que afecta a las versiones 3.8.0, 3.8.1, 3.8.2 y 3.8.3 puede causar una colisión de hashes en IPv4 e IPv6., que puede convertirse en una denegación de servicio (DOS)
La vulnerabilidad se produce debido a la forma en la que interactúan IPv4Interface y IPv6Interface. Las funciones hash de estas clases siempre devuelven 32 y 64 respectivamente, pero Lib/ipaddress.py en las versiones de Python 3.8.0 a 3.8.3 calcula incorrectamente el valor del hash. Esto último permite a un atacante remoto causar una denegación de servicio si una aplicación se ve afectada por el rendimiento de un diccionario que contenga objetos IPv4Interface o IPv6Interface.
En la página de bugs de Python exponen que la raíz del error se encuentra en las líneas 1421 y 2095. Ambas líneas, self._ip y self.network.network_address son lo mismo, y en el momento de aplicarles xor se cancelan la una a la otra. Por lo tanto devuelven self._frefixlen.
Como self.prefixlen es una constante, 32 y 64 respectivamente, lleva a un hash constante.
La manera de arreglarlo es trivial, basta con cambiar la línea 1421 por:
return hash((self._ip, self._prefixlen, int(self.network.network_address)))
y la línea 2095 cambiarla por:
return hash((self._ip, self._prefixlen, int(self.network.network_address)))
Para parchear esta vulnerabilidad, OpenSuse han publicado como arreglarlo en esta página.
Más información
Python bugs
https://bugs.python.org/issue41004
Suse
https://www.suse.com/security/cve/CVE-2020-14422/
Androidrookies
https://androidrookies.com/zero-day-vulnerability-in-python-versions-3-8-0-to-3-8-3-causes-hash-collisions-and-lead-to-dos/
Comentarios recientes