El desarrollador residente de seguridad de la Python Software Foundation, Seth Larson, ha detallado una vulnerabilidad en CPython relacionada con el uso de str.lower() dentro de la implementación de StringPrep, el algoritmo definido en el RFC 3454 que forma parte de IDNA 2003 (RFC 3491). StringPrep requiere específicamente las reglas de plegado de mayúsculas y minúsculas de Unicode 3.2.0, recogidas en las tablas B.2 y B.3 del RFC. Sin embargo, el módulo stringprep de la biblioteca estándar recurría a str.lower(), que aplica las reglas de plegado de la versión de Unicode incluida con cada intérprete de Python. La discrepancia provoca que cadenas que deberían codificarse igual generen resultados distintos: por ejemplo, "ᎠᎠ" produce "xn--58da" bajo una implementación conforme al RFC, pero "xn--kz9aa" cuando se usa Unicode 17.0.0. Esto afecta a comparaciones de nombres de dominio y a procesos que dependen de una normalización coherente. La corrección, ya disponible, añade excepciones puntuales para que str.lower() se comporte como Unicode 3.2.0 únicamente en los puntos donde ambas versiones difieren, manteniendo el resto del comportamiento moderno. La vulnerabilidad ha quedado registrada como CVE-2026-17084 y fue reportada por Bitshift, con Stan Ulbrych como codesarrollador de la solución y revisión de Marc-Andre Lemburg y Petr Viktorin.
