Cordova Apps

Reading time: 8 minutes

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks

Für weitere Details siehe https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58. Dies ist eine Zusammenfassung:

Apache Cordova ist bekannt dafür, die Entwicklung von hybriden Anwendungen mit JavaScript, HTML und CSS zu ermöglichen. Es erlaubt die Erstellung von Android- und iOS-Anwendungen; jedoch fehlt ein standardmäßiger Mechanismus zum Schutz des Quellcodes der Anwendung. Im Gegensatz zu React Native kompiliert Cordova den Quellcode standardmäßig nicht, was zu Sicherheitsanfälligkeiten durch Code-Manipulation führen kann. Cordova verwendet WebView, um Anwendungen darzustellen, wodurch der HTML- und JavaScript-Code auch nach der Kompilierung in APK- oder IPA-Dateien sichtbar bleibt. React Native hingegen verwendet eine JavaScript-VM, um JavaScript-Code auszuführen, was einen besseren Schutz des Quellcodes bietet.

Klonen einer Cordova-Anwendung

Bevor Sie eine Cordova-Anwendung klonen, stellen Sie sicher, dass NodeJS zusammen mit anderen Voraussetzungen wie dem Android SDK, Java JDK und Gradle installiert ist. Die offizielle Cordova Dokumentation bietet eine umfassende Anleitung für diese Installationen.

Betrachten Sie ein Beispielanwendung namens Bank.apk mit dem Paketnamen com.android.bank. Um auf den Quellcode zuzugreifen, entpacken Sie bank.apk und navigieren Sie zum Ordner bank/assets/www. Dieser Ordner enthält den vollständigen Quellcode der Anwendung, einschließlich HTML- und JS-Dateien. Die Konfiguration der Anwendung finden Sie in bank/res/xml/config.xml.

Um die Anwendung zu klonen, befolgen Sie diese Schritte:

bash
npm install -g cordova@latest
cordova create bank-new com.android.bank Bank
cd bank-new

Kopiere den Inhalt von bank/assets/www nach bank-new/www, wobei cordova_plugins.js, cordova.js, cordova-js-src/ und das Verzeichnis plugins/ ausgeschlossen werden.

Gib die Plattform (Android oder iOS) an, wenn du ein neues Cordova-Projekt erstellst. Für das Klonen einer Android-App füge die Android-Plattform hinzu. Beachte, dass die Plattformversionen von Cordova und die Android-API-Level unterschiedlich sind. Siehe die Cordova Dokumentation für Details zu Plattformversionen und unterstützten Android-APIs.

Um die geeignete Cordova Android-Plattformversion zu bestimmen, überprüfe das PLATFORM_VERSION_BUILD_LABEL in der cordova.js-Datei der ursprünglichen Anwendung.

Nachdem die Plattform eingerichtet ist, installiere die erforderlichen Plugins. Die bank/assets/www/cordova_plugins.js-Datei der ursprünglichen Anwendung listet alle Plugins und deren Versionen auf. Installiere jedes Plugin einzeln, wie unten gezeigt:

bash
cd bank-new
cordova plugin add cordova-plugin-dialogs@2.0.1

Wenn ein Plugin nicht auf npm verfügbar ist, kann es von GitHub bezogen werden:

bash
cd bank-new
cordova plugin add https://github.com/moderna/cordova-plugin-cache.git

Stellen Sie sicher, dass alle Voraussetzungen erfüllt sind, bevor Sie kompilieren:

bash
cd bank-new
cordova requirements

Um die APK zu erstellen, verwenden Sie den folgenden Befehl:

bash
cd bank-new
cordova build android — packageType=apk

Dieser Befehl generiert ein APK mit der aktivierten Debug-Option, was das Debugging über Google Chrome erleichtert. Es ist entscheidend, das APK vor der Installation zu signieren, insbesondere wenn die Anwendung Mechanismen zur Erkennung von Code-Manipulationen enthält.

Automatisierungstool

Für diejenigen, die den Klonprozess automatisieren möchten, ist MobSecco ein empfohlenes Tool. Es vereinfacht das Klonen von Android-Anwendungen und vereinfacht die oben beschriebenen Schritte.


Sicherheitsrisiken & Aktuelle Schwachstellen (2023-2025)

Die pluginbasierte Architektur von Cordova bedeutet, dass der Großteil der Angriffsfläche in Drittanbieter-Plugins und der WebView-Brücke liegt. Die folgenden Probleme wurden in den letzten Jahren aktiv ausgenutzt oder öffentlich bekannt gemacht:

  • Bösartige NPM-Pakete. Im Juli 2024 wurde das Paket cordova-plugin-acuant aus dem NPM-Registry entfernt, nachdem entdeckt wurde, dass es während der Installation bösartigen Code ablegte (OSV-ID MAL-2024-7845). Jede Entwicklermaschine, die npm install cordova-plugin-acuant ausgeführt hat, sollte als kompromittiert betrachtet werden. Überprüfen Sie package.json/package-lock.json auf unerwartete Cordova-Plugins und fixieren Sie vertrauenswürdige Versionen. OSV advisory
  • Unvalidierte Deeplinks → XSS/RCE. CleverTap Cordova Plugin ≤ 2.6.2 (CVE-2023-2507) versäumt es, Deeplink-Eingaben zu bereinigen, was es einem Angreifer ermöglicht, beliebiges JavaScript einzuschleusen, das im Haupt-WebView-Kontext ausgeführt wird, wenn ein manipuliertes Link geöffnet wird. Aktualisieren Sie auf ≥ 2.6.3 oder entfernen Sie nicht vertrauenswürdige URI-Parameter zur Laufzeit. CVE-2023-2507
  • Veralteter Plattformcode. cordova-android ≤ 12 wird mit targetSdk 33 oder niedriger ausgeliefert. Ab Mai 2024 verlangt Google Play API 34, und mehrere WebView-Härtungsfunktionen (z. B. automatisch generiertes exported="false" für Komponenten) sind nur in API 34+ vorhanden. Aktualisieren Sie auf cordova-android@13.0.0 oder höher.

Schnelle Überprüfungen während eines Pentests

  1. Suchen Sie nach android:debuggable="true" in der dekompilierten AndroidManifest.xml. Debuggable Builds exponieren die WebView über chrome://inspect und ermöglichen vollständige JS-Injektion.
  2. Überprüfen Sie config.xml auf zu permissive <access origin="*">-Tags oder fehlende CSP-Meta-Tags in www/index.html.
  3. Grep www/ nach eval(, new Function( oder dynamisch konstruiertem HTML, das CSP-Umgehungen in XSS umwandeln könnte.
  4. Identifizieren Sie eingebettete Plugins in plugins/ und führen Sie npm audit --production oder osv-scanner --lockfile aus, um bekannte CVEs zu finden.

Tipps zur dynamischen Analyse

Remote WebView-Debugging

Wenn die Anwendung im Debug-Modus kompiliert wurde (oder explizit WebView.setWebContentsDebuggingEnabled(true) aufruft), können Sie Chrome DevTools anhängen:

bash
adb forward tcp:9222 localabstract:chrome_devtools_remote
google-chrome --new-window "chrome://inspect/#devices"

Dies gibt Ihnen eine Live-JavaScript-Konsole, einen DOM-Inspektor und die Möglichkeit, JavaScript-Funktionen zur Laufzeit zu überschreiben – äußerst praktisch, um clientseitige Logik zu umgehen. (Siehe die offizielle Dokumentation von Google für weitere Details.)

Hooking the JS ⇄ Native bridge with Frida

Der Java-seitige Einstiegspunkt der meisten Plugins ist org.apache.cordova.CordovaPlugin.execute(...). Das Hooken dieser Methode ermöglicht es Ihnen, Aufrufe, die von JavaScript gemacht werden, zu überwachen oder zu manipulieren:

javascript
// frida -U -f com.vulnerable.bank -l hook.js --no-pause
Java.perform(function () {
var CordovaPlugin = Java.use('org.apache.cordova.CordovaPlugin');
CordovaPlugin.execute.overload('java.lang.String','org.json.JSONArray','org.apache.cordova.CallbackContext').implementation = function(act, args, ctx) {
console.log('[Cordova] ' + act + ' => ' + args);
// Tamper the first argument of a sensitive action
if (act === 'encrypt') {
args.put(0, '1234');
}
return this.execute(act, args, ctx);
};
});

Empfehlungen zur Härtung (2025)

  • Aktualisieren Sie auf die neueste Plattform: cordova-android@13 (Mai 2024) zielt auf API 34 ab und bringt neue WebView-Minderungen.
  • Entfernen Sie Debug-Artefakte: Stellen Sie sicher, dass android:debuggable="false" gesetzt ist und vermeiden Sie das Aufrufen von setWebContentsDebuggingEnabled in Release-Bauten.
  • Durchsetzen einer strengen CSP & AllowList: Fügen Sie in jeder HTML-Datei ein <meta http-equiv="Content-Security-Policy" ...> Tag hinzu und beschränken Sie <access> Ursprünge in config.xml. Beispiel für eine minimale CSP, die Inline-Skripte blockiert:
html
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'none'">
  • Deaktivieren Sie Klartextverkehr: Setzen Sie in AndroidManifest.xml android:usesCleartextTraffic="false" und/oder stellen Sie eine [network-security-config] bereit, die TLS durchsetzt.
  • Plugin-Hygiene:
  • Fixieren Sie Plugin-Versionen mit npm ci und committen Sie die generierte package-lock.json.
  • Führen Sie regelmäßig npm audit, osv-scanner oder cordova-check-plugins aus.
  • Obfuskation: Minimieren Sie JavaScript mit Terser/UglifyJS und entfernen Sie Quellkarten aus Produktionsbauten, um das casual Reversing zu verlangsamen.

Referenzen

  • Apache Cordova – Cordova-Android 13.0.0 Versionshinweise (Mai 2024)
  • OSV-ID MAL-2024-7845 – Schadhafter Code in cordova-plugin-acuant
  • CVE-2023-2507 – CleverTap Cordova Plugin Deeplink XSS

tip

Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Lernen & üben Sie Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Unterstützen Sie HackTricks