Hace
algunos días, la firma de seguridad Zimperium reveló el descubrimiento de un
fallo en el sistema de Android, llamado Stagefright,
que permitía a un atacante remoto ejecutar código mediante un MMS malicioso. La
vulnerabilidad se encuentra en un proceso con permisos "system" que podría permitir a un
atacante tomar el control del dispositivo (permitiría escuchar comunicaciones,
robar datos, etc.). Esto nos hace pensar qué ocurre con las aplicaciones que
descargamos.
Para averiguarlo hemos analizado
una de las aplicaciones más famosas, que cuenta con más de 1.000 millones de descargas:
Facebook. Es una gran sorpresa descubrir la gran cantidad de librerías nativas
usadas por esta aplicación, 67 en total. Para optimizar el tiempo de ejecución,
todo el código que se encarga de comprimir imágenes, cifrar las comunicaciones,
etc. está desarrollado a bajo nivel. Sin embargo, codificar a bajo nivel
aumenta la superficie de ataque. Entre otras dificultades el código nativo
requiere una serie de habilidades que no se encuentran en el común de los
desarrolladores. Siendo la gestión de la memoria la principal característica y
fuente irremediable de problemas de seguridad y estabilidad de los programas.
![]() |
| Librerías nativas de Facebook |
Para encontrar posibles librerías
vulnerables, nos hemos centrado en librerías que usan código libre como libpng,
libevent, libjpegturbo, SQLite, etc. Con la ayuda de las bases de datos del MITRE y CVEDetails,
hemos podido encontrar las vulnerabilidades que afectan a estas librerías desde
el año 2012. ¿Por qué el 2012? Porque el compilador con que se compilaron esas librerías
data de ese mismo año. Solo tomamos en cuenta las vulnerabilidades que podrían
permitir ejecutar código arbitrario.
- libevent (versión obsoleta
1.4.14b-stable): afectada por el CVE-2014-6272
que podría permitir un desbordamiento de búfer basado en heap. Sin embargo,
Facebook nunca llama a las funciones perjudicadas por esa vulnerabilidad, así
que esta vulnerabilidad no se puede explotar.
- JPEGturbo (versión por lo menos
de 2013): se encontró un importante fallo (CVE-2012-2806)
en la versión de 2012, pero fue corregido el mismo año, así que esta librería
tampoco está afectada.
- SQLite no tiene ninguna
vulnerabilidad que permita a un atacante comprometer el sistema (según
CVEDetails).
- libPNG (versión obsoleta 1.6.10, del 6 de marzo de 2014): tiene el CVE-2015-0973
que podría permitir a un atacante provocar un desbordamiento de búfer, que según
MITRE conllevaría una denegación de servicio o a la ejecución de código
arbitrario.
- Facebook también usa otras librerías como libwebp, libsjni, libglog, etc. pero no se encontró ninguna vulnerabilidad en las versiones empleadas de todas ellas.
Finalmente, hemos constatado que
Facebook usa librerías obsoletas, como libPNG (versión 1.6.10) que podría permitir
a un atacante remoto ejecutar código arbitrario. Y con ello leer SMS, contactos,
etc. (todos los permisos de Facebook).
Aunque en algunos casos la
corrupción de memoria pueda llevar al compromiso del sistema, Android tiene
protecciones para hacer la explotación más difícil. Podemos destacar medidas
como la randomización de las posiciones de las librerías en la memoria (ASLR),
el sandboxing (con una mejora gracias a la integración de SELinux), protección
contra la ejecución de la pila, etc.
Esto con una aplicación
sobradamente conocida y depurada, y con un fuerte respaldo detrás como la de Facebook. ¿Qué puede ocurrir con otras aplicaciones?
Más información:
una-al-dia (28/07/2015) Drake y el codiciado tesoro del
androide
How to
Protect from StageFright Vulnerability
Vulnerability Summary for CVE-2015-0973
CVE-2014-6272
CVE-2012-2806
Libpng » Libpng » 1.6.10 : Vulnerability Statistics
SHA256 de la aplicación Facebook analizada
05e6f038cf145b2ed02f500c340cf2e797b5f12edeccb977fa6bfc3a486594d8
Laurent Delosieres


No hay comentarios:
Publicar un comentario