OWASP-Kategorie: MASVS-CODE: Codequalität
Übersicht
public abstract Context createPackageContext (String packageName, int flags)
Die Methode createPackageContext wird verwendet, wenn ein Entwickler in seiner eigenen Anwendung einen Kontext für eine andere Anwendung erstellen möchte.
Wenn Entwickler beispielsweise Ressourcen aus einer Drittanbieteranwendung abrufen oder Methoden daraus aufrufen möchten, verwenden sie createPackageContext.
Wenn eine Anwendung jedoch createPackageContext mit den Flags CONTEXT_IGNORE_SECURITY und CONTEXT_INCLUDE_CODE aufruft und dann getClassLoader(), kann dies dazu führen, dass die Anwendung anfällig für die Codeausführung durch eine schädliche Anwendung wird. Das kann beispielsweise passieren, wenn ein Angreifer sich als nicht beanspruchter Paketname ausgibt (Paket-Squatting), den der Entwickler auf dem Gerät des Nutzers erwartet hatte.
Hier eine Zusammenfassung der Kriterien, die erfüllt sein müssen, damit eine Anwendung für diese Art von Angriff anfällig ist:
Anfällige App:
- Anrufe von
createPackageContextmitCONTEXT_IGNORE_SECURITYundCONTEXT_INCLUDE_CODE - Ruft
getClassLoader()für den abgerufenen Kontext auf.
Schädliche App:
- Kann den Paketnamen beanspruchen, den die angreifbare App an
createPackageContextweitergibt. - Exportiert android:appComponentFactory.
Positiv beeinflussen
Wenn „createPackageContext“ von einer Anwendung auf unsichere Weise verwendet wird, kann dies dazu führen, dass eine schädliche Anwendung im Kontext der angreifbaren Anwendung beliebigen Code ausführen kann.
Abhilfemaßnahmen
Rufen Sie createPackageContext mit CONTEXT_IGNORE_SECURITY und CONTEXT_INCLUDE_CODE nur auf, wenn dies unbedingt erforderlich ist.
Wenn dies nicht möglich ist, implementieren Sie einen Mechanismus, um die Identität des Pakets zu überprüfen, auf dem Sie createPackageContext ausführen (z.B. durch Überprüfung der Signatur des Pakets).
Ressourcen
- Dokumentation zu createPackageContext
- Blogpost zu „OverSecured“ und zur Codeausführung von createPackageContext