OASAM-IS-003: Malicious Service Launch

Descripción
Los Services pueden ser invocados en base a datos provenientes del usuario o de la recepción de Intents arbitrarios. Esto deja varias superficies de ataque: 1. Si un Service utiliza datos del Intent sin verificar su procedencia, la integridad de los datos de la aplicación se verá afectada. 2. Si un Service devuelve datos considerados sensibles y puede ser invocado públicamente, un Intent especialmente manipulado podría invocarlo, con la consiguiente fuga de la información sensible.


Riesgos
La presencia de esta vulnerabilidad permitiría ejecutar acciones arbitrarias en la aplicación a través de la ejecución de Services, además de permitir la fuga de información que utilice el Service Esta vulnerabilidad tiene el agravante de que, habitualmente, los Services confían más en los datos proporcionados por los usuarios y los Intents y proveen, en muchas ocasiones de interfaces API para que las aplicaciones puedan comunicarse con ellos.


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 o provenientes del usuario. Adicionalmente, los Services pueden protegerse mediante el establecimiento de permisos.


Referencias
1. Flaw 3.2.3 de “Analyzing Inter-Application Communication in Android”
2. DRD06-J. Do not act on malicious intents - https://www.securecoding.cert.org/confluence/display/java/DRD06-J.+Do+not+act+on+malicious+intents
3. DRD07-J. Protect exported services with strong permissions - https://www.securecoding.cert.org/confluence/display/java/DRD07-J.+Protect+exported+services+with+strong+permissions
4. 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