Hace un par de días hablamos de la noticia de cómo un sólo carácter era capaz de bloquear un iPhone, iPad o Mac. La repercusión mediática ha sido bastante amplia y por lo tanto, Apple se ha dado prisa en solucionarlo en la versión 11.2.6. Todos sabemos las consecuencias de este fallo, al cual se le ha asignado el CVE-2018-4124, pero ¿sabes por qué ocurre?. Vamos a intentar explicarlo brevemente.
Este bug bloqueaba (o colgaba como se suele decir en el argot informático) el dispositivo Apple simplemente al mostrar algunos caracteres Telugu. Cualquier aplicación que lo intente, directamente se cuelga y no se puede restaurar hasta que no sea eliminado. El dispositivo se reinicia si el fallo activa un componente en el sistema operativo, como por ejemplo Springboard, la aplicación que controla la pantalla principal de iOS. Incluso puede acabar en un bucle de reinicios que sólo puede ser solucionado con un DFU (Device Firmware Update), con lo que perderíamos la información almacenada. El vídeo a continuación muestra el bug en acción:
Para entender la raíz del problema primero tenemos que hablar de Unicode, un estándar que consiste en asignar un único número a cada carácter, para evitar las limitaciones del código ASCII. Los códigos Unicode se escriben con una "U+" seguido por el código numérico en hexadecimal que corresponde al caracter, por ejemplo la letra "A" sería U+0041. Unicode también incluye caracteres especiales, como por ejemplo U+0020 que corresponde a un espacio. Por defecto, la lectura Unicode se realiza de izquierda a derecha, aunque se puede configurar para idiomas como por ejemplo el árabe para que sean de derecha a izquierda añadiendo algunos marcadores especiales.
El lenguaje Telugu se representa con algunos caracteres agrupados horizontalmente. En concreto, el símbolo que era capaz de bloquear dispositivos Apple estaba compuesto por cinco distintos formado por los códigos siguientes: U+0C1C, U+0C4D, U+0C1E, U+200C y U+0C3E. La representación gráfica de este carácter es:
Figura 1. Carácter Telugu, la cual es la raíz de la palabra "conocimiento" que provoca el error. Fuente. |
A nosotros nos interesa el U+200C también llamado ZWNJ o "Zero Width Non-Joiner" el cual es un separador invisible que sirve para unir algunos de los caracteres que forma el símbolo final. Parece ser que la causa de este bug es este separador combinado con ciertos caracteres Telugu. El buffer que corresponde al símbolo en memoria devuelve un puntero nulo a la aplicación, en vez de uno que indique la posición correcta en memoria. Por lo tanto, cuando el programa intenta acceder a dicha ubicación, esta no existe y el sistema operativo revoca los permisos de escritura y lectura para evitar una corrupción de memoria mayor. Este es el error que aparece:
Figura 2. Captura del volcado del error provocado por el carácter Telugu. Fuente. |
Como hemos comentado al principio, Apple ya ha solucionado este error en la versión 11.2.6 para iPhone y iPads. Como otros dispositivos como el Apple Watch comparten parte del mismo núcleo, como el motor gráfico, estos son también vulnerables a este incómodo bug. La verdad es que Apple está teniendo un comienzo de año movido en el tema de la seguridad de sus dispositivos.
No hay comentarios:
Publicar un comentario