OASAM-IS-001: Broadcast Injection

Descripción
Los Broadcast Receivers sirven para registrar Intents y responder ante estos. Si un componente tiene público uno de estos componentes, cualquier aplicación puede enviarle Intents. El el caso de los Broadcast Receivers que registran Intents con “system actions” es especialmente peligroso, dado que el mero hecho de registrar dichos Intents convierte al elemento en públicamente accesible, por lo que una aplicación maliciosa podría enviarle Intents explícitos sin las actions correspondientes, ya que son “system actions”.


Riesgos
En muchas ocasiones los Broadcast Receivers toman Intents y con sus datos activan Activities o Services. Una vulnerabilidad de Broadcast injection puede permitirle a un atacante manipular estos componentes para interactuar con los mismos mediante la inyección de datos arbitrarios.


Recomendaciones
Se recomienda utilizar componentes públicos únicamente cuando sea necesario, y en dichos casos, validar concienzudamente cada uno de los parámetros recuperados del Intent. En el caso de Broadcast Receivers que registran “system actions”, se recomienda validar la action del Intent, ya que un Intent malicioso no puede registrar “system actions”, por lo que se puede utilizar esta validación para saber si el Intent procede del sistema Android o no.


Referencias
1. Flaw 4B de “Semantically Rich Application-Centric Security in Android”
2. Flaw 3.2.1 de “Analyzing Inter-Application Communication in Android”
3. Flaw 26 de “42+ Best parctices in secure mobile development for iOS and Android”
4. Flaw 5.2.5 de “A Study of Android Application Security”
5. DRD06-J. Do not act on malicious intents - https://www.securecoding.cert.org/confluence/display/java/DRD06-J.+Do+not+act+on+malicious+intents
6. DRD16-J. Explicitly define the exported attribute for private components - https://www.securecoding.cert.org/confluence/display/java/DRD16-J.+Explicitly+define+the+exported+attribute+for+private+components