Herramienta de firma para Kindle Fire HDX Exploits Bootloader

¿Qué sucede cuando una vulnerabilidad relacionada con Android se publica en un sitio web como CodeAurora Forum? ¡Lo tienes! Los entusiastas de la seguridad y los desarrolladores de Android de todo el mundo intentan aprovechar el problema recién descubierto para crear un exploit, que se puede utilizar para obtener acceso avanzado a su dispositivo (como acceso de root o la capacidad de mostrar imágenes personalizadas).

Esto es exactamente lo que le sucedió a CVE-2014-0973, una vulnerabilidad en un cargador de arranque de Android denominado "Little Kernel (LK)". Hablaremos sobre los detalles del exploit un poco más tarde, pero por ahora echemos un vistazo a lo que los desarrolladores han inventado.

El miembro del foro vortox ha logrado implementar un exploit basado en CVE-2014-0973 y ha publicado una herramienta para la serie Amazon Kindle Fire HDX, que puede firmar imágenes de arranque personalizadas si está utilizando una versión anterior del cargador de arranque. El punto clave aquí es que no necesita ningún tipo de desbloqueo u otro truco para que funcione: el exploit permite que la herramienta firme imágenes de manera que pasen la etapa de verificación en el gestor de arranque con gran éxito.

La siguiente parte de este artículo se centrará en cómo funciona el exploit y por qué es muy triste ver esta vulnerabilidad especial en una pieza de software moderno, por lo que si solo quiere tener la herramienta lo más rápido posible, diríjase a la publicación original y firme.

Los detalles

Ok, así que echemos un vistazo a los detalles de CVE-2014-0973. El problema tiene que ver con RSA, un estándar de cifrado que también se usa para firmar imágenes de arranque de Android. En pocas palabras, RSA es un criptosistema de clave pública donde tiene dos claves, una clave privada y una clave pública. Por lo general, la clave pública (que se puede compartir con cualquier persona) se usa para cifrar un mensaje que luego solo se puede descifrar nuevamente con la clave privada (que se mantiene privada, de ahí el nombre). De esa manera, dos partes pueden comunicarse sin revelar sus claves privadas, que deben descifrar.

Sin embargo, RSA también se puede utilizar para verificar el contenido de un mensaje (o en nuestro mundo, para "firmar" algo). En este caso, el mensaje se cifra con la clave privada y luego se puede compartir con el receptor. La clave pública se puede utilizar para descifrar el mensaje y, si el descifrado funciona correctamente, el receptor puede estar seguro de que el contenido cifrado se origina en el autor original y no está moderado de ninguna manera.

Hablando de manipulación, la verificación de firmas es una característica muy importante para todos los OEM de Android, ya que es esencial verificar que un software sea del OEM y no de un tercero (por ejemplo, de un desarrollador). Entonces, por ejemplo, cuando intenta flashear una nueva imagen de arranque en su dispositivo, sucede lo siguiente: el gestor de arranque verá la firma digital RSA de la imagen, la descifrará con su clave pública y, por lo tanto, se asegurará de que la imagen haya sido firmada por el autor previsto (el OEM, que es el único con la clave privada correspondiente).

La firma descifrada contiene un valor hash de los datos de la imagen de arranque, que luego se puede usar para comparar con los datos reales que están a punto de actualizarse. Entonces, en este punto, el gestor de arranque calcula el valor hash de la imagen de arranque y lo compara con el hash que encontró en la firma RSA. Si estos dos hashes coinciden entre sí, es bastante seguro (lo suficiente como para que sea seguro según los estándares actuales) que los contenidos no se alteran y que el propietario de la clave privada firmó la imagen. Lo que básicamente significa que el software original del OEM está bien para actualizarse.

Esa parte fue probablemente un poco más difícil de comprender, así que asegúrese de comprenderla antes de continuar.

La vulnerabilidad

Ahora, ¿qué pasa con la vulnerabilidad? ¿Por qué nos permite firmar imágenes de arranque a pesar de la falta de la clave privada (que solo tiene el OEM)? Bueno, resulta que la implementación de la verificación de firma RSA en el gestor de arranque Little Kernel es defectuosa. El problema aquí es que el algoritmo de descifrado no verifica la longitud de los datos que maneja. Si bien esto puede parecer bastante inocente, los lectores preocupados por la seguridad verán de inmediato el problema. Los criptosistemas siempre necesitan validar sus datos de entrada de la mejor manera posible, simplemente asumiendo que los datos son "correctos" abre todo el proceso a varios ataques.

Y eso es exactamente lo que sucedió aquí. La verificación de la longitud que falta permite a los explotadores falsificar una firma válida al agregar datos personalizados a la firma que, a su vez, hace que parezca válida para la verificación de verificación en el gestor de arranque. Explicar esto en detalle iría más allá del alcance de este artículo, pero al final hay algunos enlaces para leer más sobre el tema.

Si nos fijamos en el sitio web que publicó la vulnerabilidad, primero parece que el problema se hizo público hace poco, el 13 de junio de 2014, pero al seguir investigando descubrirá rápidamente que es un poco más antiguo. Mucho más viejo de hecho. El número original data de 2006, donde Daniel Bleichenbacher habló sobre él en el escenario de la Conferencia Internacional de Criptología. Obviamente, no estaba hablando de un gestor de arranque de Android allí, pero descubrió que muchas implementaciones de firma RSA tenían la falla potencialmente desastrosa. Hoy, casi nueve años después, todavía podemos beneficiarnos de la vulnerabilidad muy antigua, ya que permite a los propietarios de Amazon Fire HDX firmar imágenes de arranque personalizadas que pueden usarse para rootear el dispositivo o flashear una recuperación personalizada.

Si desea tener una imagen más detallada de lo que sucede detrás de escena, asegúrese de consultar estos enlaces:

  • Detalles sobre la charla original de Daniel Bleichenbacher (2006): //www.ietf.org/mail-archive/web/openpgp/current/msg00999.html
  • Publicación de blog de Symantec sobre el problema (2006): //www.symantec.com/connect/blogs/common-rsa-implementation-mistake-explained
  • Divulgación de vulnerabilidad en Codeaurora Forum (2014): //www.codeaurora.org/projects/security-advisories/incomplete-signature-parsing-during-boot-image-authentication-leads-to-signature-forgery-cve-2014-0973