OASAM-UIR-001: Broadcast Theft

Descripción
Un Intent implícito es público cuando no está protegido por permisos de tipo “Signature” o ”SignatureOrSystem”. Cuando una aplicación envía un Intent implícito público, dicho Intent puede ser leído por cualquier componente del sistema. Una aplicación maliciosa podría acceder al mismo, obteniendo datos sensibles si el Intent los contuviera simplemente definiendo Intent Filters para todas las posibles actions, datas y categories. Esto es especialmente peligroso en los Sticky Broadcasts, ya que en ellos el Intent persiste y puede ser reenviado varias veces a distintos receptores. Con lo que hay una mayor ventana temporal en la que el componente malicioso podría aprovecharse. Además, los Sticky Broadcast no pueden ser protegidos mediante permisos.


Riesgos
Un atacante podría causar una denegación de servicio en los Ordered Broadcast, ya que en ellos el Intent solo se propaga si el componente que lo recibe primero le da salida. Adicionalmente podría servir para la realización de ataques de tipo Man in the middle con la consecuente inyección de datos en los Intents propagados.


Recomendaciones
Se recomienda evaluar la necesidad de enviar Intents implícitos. Para comunicar Intents dentro de una aplicación, es siempre recomendable el uso de Intent explícitos. Si es necesario enviar datos sensibles dentro de un Intent, se recomienda protegerlos mediante el establecimiento de permisos y el uso de cifrado para dichos datos.


Referencias
1. Flaw 3.1.1 de “Analyzing Inter-Application Communication in Android”
2. DRD05-J. Do not grant URI permissions on implicit intents - https://www.securecoding.cert.org/confluence/display/java/DRD05-J.+Do+not+grant+URI+permissions+on+implicit+intents