Creo que la mayoría de los que tengáis una Wii estaréis al tanto del archiconocido bug de firma de aplicaciones, que ha permitido virguerías como el trucha signer, que permite firmar discos completos que han sufrido modificaciones con respecto al original. El grupo de hackers que lo descubrió mantenía más o menos oculto su funcionamiento, para utilizarlo en la búsqueda de nuevas vulnerabilidades antes de que Nintendo actuara.
Pero Datel, una compañía que, a juzgar por sus actividades y productos, debe estar compuesta a partes iguales por hackers y abogados, anunció hace poco el Freeloader para Wii. Y claro, Nintendo ha movido ficha pues, digo yo, no les importará lo mismo lo que hagan “unos cuántos frikis” en Internet, que la venta online de un producto que se pasa por el forro las restricciones de región de la consola.
Total, que por lo visto en la última actualización y el IOS37 (aún no activo, aunque ya actualizado), Nintendo tapa el agujero. Los sceners están un poco mosca con la compañía Datel, a la que acusan de propiciar esta actualización de la compañía nipona; y a alguien en Datel le ha debido dar cargo de conciencia, porque han donado mil dólares a WiiBrew…
El caso es que, como ya no tiene ningún sentido ocultar el bug por más tiempo, por fin podemos saber en qué consistía. Estaba claro que era algo de programación, porque una firma digital RSA de 2048 ó 4096 bits no se rompe, hoy por hoy, con criptoanálisis. Pero lo que no me esperaba era un error tan… básico.
La explicación detallada la podréis encontrar aquí, pero básicamente el problema era la utilización de una función de comparación de cadenas (strncmp) en lugar de una comparación a nivel de bit (memcmp). Esta función de comparación de cadenas funciona comparando los caracteres dos a dos, y pasando al siguiente par si son iguales. Este proceso se repite hasta comparar el tamaño indicado o -y aquí viene la magia- hasta que se encuentra un caracter nulo en la cadena. Y claro, cuando estás trabajando con datos binarios (valores hexadecimales) con funciones de cadenas, resulta que el caracter “nulo” de las cadenas es un valor perfectamente posible. Por tanto, si el segundo caracter de la cadena es nulo, sólo compara el primero… y la búsqueda de colisiones entonces se vuelve un juego de niños.
Increíble cómo un fallo así ha podido pasarse por alto en, nada más y nada menos, el firmware de una consola de nueva generación…

Para tener información de primera mano sobre estos temas no está de más visitar la página de tmbinc (debugmo.de), uno de los hackers que trabaja junto con segher y bushing con la wii.
Que comenta yo ese fallo, tiene un pase, pero que lo comentan en nintendo…
Esperemos que algún día pase con la wii igual que con la PSP, scene en estado puro. :D
Tipico ejemplo que te dicen “esto no deberias hacerlo” en todas las clases de programacion segura en dispositivos empotrados :P
Es el mismo problema que pueden tener muchos usando JavaCard u otras smart cards para validar PINs o passwords, usar el tipico strcmp optimizado para que acabe cuanto antes en lugar de uno con tiempo de ejecucion constante.
Clasico timing analysis vamos… no tiene nombre.Deberian haber llevado su Wii a algun lab como Riscure y no les habria pasado esto xD