Categoria do OWASP: MASVS-CODE - Qualidade do código (link em inglês)
Visão geral
public abstract Context createPackageContext (String packageName, int flags)
O método createPackageContext
é usado quando um desenvolvedor quer criar
um contexto para outro aplicativo no próprio aplicativo.
Por exemplo, se os desenvolvedores quiserem acessar recursos de um aplicativo de terceiros ou
chamarem métodos dele, eles vão usar createPackageContext
.
No entanto, se um aplicativo chamar createPackageContext
com as flags
CONTEXT_IGNORE_SECURITY
e CONTEXT_INCLUDE_CODE
e, em seguida,
chamar getClassLoader()
, isso poderá tornar o aplicativo
vulnerável à execução de código por um aplicativo malicioso. Isso pode ocorrer, por
exemplo, quando um invasor se passa por um nome de pacote não reivindicado (usurpação
de pacotes) que o desenvolvedor esperava que estivesse presente no dispositivo do usuário.
Para resumir os critérios que precisam ser atendidos para tornar um aplicativo vulnerável a esse tipo de ataque:
App vulnerável:
- Chama
createPackageContext
comCONTEXT_IGNORE_SECURITY
eCONTEXT_INCLUDE_CODE
. - Chama
getClassLoader()
no contexto recuperado.
App malicioso:
- É possível reivindicar o nome do pacote que o app vulnerável transmite para
createPackageContext
. - Exporta android:appComponentFactory.
Impacto
Quando o createPackageContext é usado de maneira não segura por um app, isso pode fazer com que um app malicioso consiga executar código arbitrário no contexto do aplicativo vulnerável.
Mitigações
Não chame createPackageContext
com
CONTEXT_IGNORE_SECURITY
e CONTEXT_INCLUDE_CODE
, a menos que seja absolutamente necessário.
Nos casos em que isso for inevitável, implemente um mecanismo para verificar
a identidade do pacote em que você está executando o createPackageContext
(por exemplo, verificando a assinatura do pacote).
Recursos
- Documentação de createPackageContext
- Postagem do blog OverSecured sobre a execução de código de createPackageContext