Facebook firmaba una de sus apps con una clave privada compartida con otras apps de Google Play desde 2015

Sergio De Los Santos    9 septiembre, 2019
Facebook firmaba una de sus apps con una clave privada compartida con otras apps de Google Play desde 2015

Free Basics by Facebook es una app de Facebook destinada a países con una conectividad pobre, donde se ofrece un servicio gratuito de acceso a WhatsApp y Facebook. Se ha descubierto que en su versión Android utilizaba un certificado “Debug” compartido por otras aplicaciones no relacionadas y en otros markets. En ElevenPaths hemos comprobado que, además, lo hacía con apps de origen chino en Google Play desde 2015. Esto significa que compartían clave privada e incluso podrían llegar a influir en la app original.

El dueño de la página Android Police les informaba hace algunos días de que el mismo certificado para firmar la app Facebook Basics estaba siendo usado por otras muchas apps en otros markets, sin relación aparente.

Facebook le ha restado importancia alegando que no hay evidencias de que haya  sido explotado y que ya ha sido solucionado. Pero esto no es tan sencillo y tanto las consecuencias como las potenciales causas solo son malas noticias.

Causas

Android obliga a firmar los APKs con certificados autofirmados. Esto viola un poco toda regla de una cadena de confianza, pero al menos sirve para mantener la integridad de la app y permitir su actualización. Si firmas una app con un certificado y lo subes a Google Play, nunca más podrás cambiarle el certificado (ni el nombre de paquete) si la quieres actualizar. Si pierdes el certificado, estás obligado a crear una app diferente, y esto es lo que ha tenido que hacer Facebook para “solucionarlo”.

Pero Facebook no ha perdido (supuestamente) la clave privada del certificado para firmar. Ha hecho algo diferente (¿peor?) sobre lo que solo podemos elucubrar. Para empezar ha usado un certificado “Android Debug” sin datos reales rellenos. Esto, aparte de la mala imagen, significa que ha dejado en producción el típico certificado de prueba.

¿Cómo es posible que terceros usen este certificado? Quizás este certificado fuera público. Los hay, y algunos desarrolladores lo usan por desconocimiento, porque su app no tiene recorrido… Pero también cabe la posibilidad de que perdiera el control sobre este certificado, lo que implicaría una falta de seguridad en su desarrollo. Otra posibilidad es que la app fuera encargada a un tercero (¿freelance?) y este realizara otros trabajos posteriormente firmando con la misma clave (algo totalmente desaconsejable).

En ElevenPaths hemos comprobado además que las apps firmadas con el mismo certificado no estaban exclusivamente en otros markets, sino que ya en 2015, justo cuando apareció Free Basics by Facebook, encontramos aplicaciones de origen chino firmadas y ya retiradas del market.

* App: af739e903e97d957a29b3aeaa7865e8e49f63cb0
Firmado con: 5E8F16062EA3CD2C4A0D547876BAA6F38CABF625
En Google Play desde 2015-09-20 al 2016-10-07 aproximadamente.
* App: 063371203246ba2b7e201bb633845f12712b057e
Firmado con: 5E8F16062EA3CD2C4A0D547876BAA6F38CABF625
En Google Play desde: 2015-10-21 al 2016-06-22 aproximadamente.
* App: c6a93efa87533eeb219730207e5237dfcb246725
Firmado con: 5E8F16062EA3CD2C4A0D547876BAA6F38CABF625
En Google Play desde: 2015-09-15 al 2015-09-16 aproximadamente.

Consecuencias

Aparte de la mala imagen para Facebook (¿hay algún área donde la privacidad no le sea cuestionada?), un atacante podría haber aprovechado esto para actualizar de forma fraudulenta la app de Facebook, ¿cómo? Bueno, para actualizar una app es requisito que posea el mismo certificado y solo es necesario también tener acceso a la cuenta de Google Play. No es sencillo, pero con esto, Facebook estaba facilitando la mitad del trabajo a un atacante.

Además, también le facilitaría el trabajo para potenciales ataques de “colusión” en aplicaciones Android. Estos son ataques bien conocidos en los que aplicaciones diferentes no son maliciosas por sí mismas, pero que colaborando entre ellas pueden llegar a realizar un ataque. Un ejemplo es sumando permisos entre dos aplicaciones para que en conjunto se tenga más poder en el teléfono, pero individualmente parezcan inocuas. Para conseguir este tipo de ataques, estas apps deben estar firmadas con el mismo certificado. De nuevo, se estaba facilitando el trabajo a un potencial atacante.

Para colmo, Facebook no ha querido recompensar al descubridor porque lo ha hecho público en Twitter antes de realizar el reporte.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *