Vulnerabilidades críticas en chipsets de Qualcomm. Hackear iPhone y Android se volvió mucho más fácil

Meses atrás, los expertos del curso de hacking de la firma Zimperium informaron sobre dos vulnerabilidades de kernel presentes en todos los dispositivos Android con chipsets de Qualcomm. La explotación de estas fallas, en conjunto con otros problemas de seguridad descubiertos previamente, permitían que los hackers usaran apps maliciosas para acceder a permisos de usuario root en el dispositivo afectado.

A través de este ataque los actores de amenazas eran capaces de desplegar diversas actividades maliciosas como:

  • Leer los datos confidenciales almacenados en el dispositivo, incluyendo fotos, videos, mensajes de texto (incluso en apps como WhatsApp y Telegram),  mensajes de correo electrónico y casi cualquier otro recurso almacenado en el dispositivo
  • Acceso a todas las credenciales de inicio de sesión para cualquier aplicación instalada
  • Grabación de audio y video, activando la cámara y micrófono del usuario sin su consentimiento

Las vulnerabilidades fueron identificadas como CVE-2019-14040 y CVE-2019-14041. A continuación se exponen algunos detalles técnicos sobre estas fallas y sus potenciales consecuencias.  Para comenzar, los especialistas del curso de hacking especifican en qué consiste cada falla:

  • CVE-2019-14041: una condición de carrera que puede causar todo tipo de daños en la memoria
  • CVE-2019-14040: Una falla use-after-free de asignación de memoria del núcleo

La primera de estas fallas se deriva de una función: __qseecom_update_cmd_buf (y también su equivalente de 64 bits __qseecom_update_cmd_buf_64), cuya función es la actualización del búfer que será enviado a TrustZone.   

Para evitar duplicaciones de código, la función está diseñada para manejar dos casos diferentes en los que es necesario modificar dichos búferes, por lo que esta función se puede alcanzar desde dos ioctls completamente diferentes. Acorde a los especialistas del curso de hacking, en algunas partes, la función todavía tiene que comportarse de manera diferente dependiendo de qué ioctl se llamó originalmente. Para hacer esto, la función verifica data-> type:

En un caso data->type sería QSEECOM_CLIENT_APP. En el otro caso, sería QSEECOM_LISTENER_SERVICE. Verificaciones como esta existen en toda la función.

El inconveniente es que los datos son en realidad un puntero a una estructura qseecom_dev_handle, que se adjunta al archivo abierto /dev/qseecom en el que se realiza el ioctl. ¿Qué sucede si es posible modificar data->type mientras se está ejecutando __qseecom_update_cmd_buf?

Resulta que ejecutar el ioctl QSEECOM_IOCTL_APP_LOADED_QUERY_REQ modifica instantáneamente data-> type. Aunque existen algunos mecanismos para limitar la ejecución simultánea de ioctls, solo funcionan después de cambiar data->type.

Respecto a la segunda vulnerabilidad, ésta podría permitir a un atacante alcanzar privilegios completos en el kernel objetivo de forma sigilosa, pues la víctima apenas podría notar actividad maliciosa. Teóricamente, un actor de amenazas sin privilegios podría completar una cadena de explotación exitosa de forma relativamente sencilla, por lo que vale la pena permanecer al tanto de las actualizaciones que Qualcomm pudiera lanzar.

Para mayores informes sobre vulnerabilidades, exploits, variantes de malware y riesgos de seguridad informática puede ingresar al sitio web del Instituto Internacional de Seguridad Cibernética (IICS), al igual que a las plataformas oficiales de las compañías tecnológicas.