Aplikacje Cordova

Reading time: 7 minutes

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks

Aby uzyskać więcej szczegółów, sprawdź https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58. To jest podsumowanie:

Apache Cordova jest uznawany za umożliwiający rozwój aplikacji hybrydowych przy użyciu JavaScript, HTML i CSS. Umożliwia tworzenie aplikacji na Androida i iOS; jednak nie ma domyślnego mechanizmu zabezpieczającego kod źródłowy aplikacji. W przeciwieństwie do React Native, Cordova nie kompiluje kodu źródłowego domyślnie, co może prowadzić do podatności na manipulację kodem. Cordova wykorzystuje WebView do renderowania aplikacji, ujawniając kod HTML i JavaScript nawet po skompilowaniu do plików APK lub IPA. React Native z kolei wykorzystuje VM JavaScript do wykonywania kodu JavaScript, oferując lepszą ochronę kodu źródłowego.

Klonowanie aplikacji Cordova

Przed sklonowaniem aplikacji Cordova upewnij się, że NodeJS jest zainstalowany wraz z innymi wymaganiami, takimi jak Android SDK, Java JDK i Gradle. Oficjalna dokumentacja Cordova zawiera szczegółowy przewodnik dotyczący tych instalacji.

Rozważ przykład aplikacji o nazwie Bank.apk z nazwą pakietu com.android.bank. Aby uzyskać dostęp do kodu źródłowego, rozpakuj bank.apk i przejdź do folderu bank/assets/www. Ten folder zawiera pełny kod źródłowy aplikacji, w tym pliki HTML i JS. Konfiguracja aplikacji znajduje się w bank/res/xml/config.xml.

Aby sklonować aplikację, wykonaj następujące kroki:

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

Skopiuj zawartość bank/assets/www do bank-new/www, z wyłączeniem cordova_plugins.js, cordova.js, cordova-js-src/ oraz katalogu plugins/.

Określ platformę (Android lub iOS) podczas tworzenia nowego projektu Cordova. Aby sklonować aplikację na Androida, dodaj platformę Android. Zauważ, że wersje platform Cordova i poziomy API Androida są różne. Zapoznaj się z dokumentacją Cordova documentation w celu uzyskania szczegółowych informacji na temat wersji platform i obsługiwanych API Androida.

Aby określić odpowiednią wersję platformy Cordova Android, sprawdź PLATFORM_VERSION_BUILD_LABEL w pliku cordova.js oryginalnej aplikacji.

Po skonfigurowaniu platformy zainstaluj wymagane wtyczki. Plik bank/assets/www/cordova_plugins.js oryginalnej aplikacji zawiera listę wszystkich wtyczek i ich wersji. Zainstaluj każdą wtyczkę indywidualnie, jak pokazano poniżej:

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

Jeśli wtyczka nie jest dostępna w npm, można ją pozyskać z GitHub:

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

Upewnij się, że wszystkie wymagania wstępne są spełnione przed kompilacją:

bash
cd bank-new
cordova requirements

Aby zbudować APK, użyj następującego polecenia:

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

To polecenie generuje APK z włączoną opcją debugowania, co ułatwia debugowanie za pomocą Google Chrome. Kluczowe jest podpisanie APK przed instalacją, szczególnie jeśli aplikacja zawiera mechanizmy wykrywania manipulacji kodem.

Narzędzie Automatyzacji

Dla tych, którzy chcą zautomatyzować proces klonowania, MobSecco jest zalecanym narzędziem. Ułatwia klonowanie aplikacji na Androida, upraszczając opisane powyżej kroki.


Ryzyka Bezpieczeństwa i Ostatnie Luki (2023-2025)

Architektura oparta na wtyczkach Cordova oznacza, że większość powierzchni ataku znajduje się wewnątrz wtyczek stron trzecich i mostka WebView. Następujące problemy były aktywnie wykorzystywane lub publicznie ujawniane w ostatnich latach:

  • Złośliwe pakiety NPM. W lipcu 2024 roku pakiet cordova-plugin-acuant został usunięty z rejestru NPM po odkryciu, że w trakcie instalacji wprowadzał złośliwy kod (OSV-ID MAL-2024-7845). Każda maszyna dewelopera, która wykonała npm install cordova-plugin-acuant, powinna być uznana za skompromitowaną. Audytuj package.json/package-lock.json w poszukiwaniu nieoczekiwanych wtyczek Cordova i przypnij zaufane wersje. OSV advisory
  • Niewalidowane Deeplinki → XSS/RCE. CleverTap Cordova Plugin ≤ 2.6.2 (CVE-2023-2507) nie sanitizuje wejścia deeplink, co pozwala atakującemu na wstrzyknięcie dowolnego JavaScriptu, który wykonuje się w głównym kontekście WebView, gdy otwierany jest spreparowany link. Zaktualizuj do ≥ 2.6.3 lub usuń nieufne parametry URI w czasie wykonywania. CVE-2023-2507
  • Nieaktualny kod platformy. cordova-android ≤ 12 dostarczany jest z targetSdk 33 lub niższym. Od maja 2024 roku Google Play wymaga API 34, a kilka funkcji wzmacniających WebView (np. automatycznie generowane exported="false" dla komponentów) jest obecnych tylko w API 34+. Zaktualizuj do cordova-android@13.0.0 lub nowszego.

Szybkie kontrole podczas pentestów

  1. Szukaj android:debuggable="true" w dekompilowanym AndroidManifest.xml. Wersje debugujące ujawniają WebView przez chrome://inspect, co pozwala na pełne wstrzykiwanie JS.
  2. Przejrzyj config.xml w poszukiwaniu zbyt liberalnych tagów <access origin="*"> lub brakujących meta-tagów CSP w www/index.html.
  3. Grep www/ w poszukiwaniu eval(, new Function( lub dynamicznie konstruowanego HTML, co może przekształcić obejścia CSP w XSS.
  4. Zidentyfikuj osadzone wtyczki w plugins/ i uruchom npm audit --production lub osv-scanner --lockfile, aby znaleźć znane CVE.

Wskazówki dotyczące analizy dynamicznej

Zdalne debugowanie WebView

Jeśli aplikacja została skompilowana w trybie debugowania (lub jawnie wywołuje WebView.setWebContentsDebuggingEnabled(true)), możesz podłączyć Chrome DevTools:

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

To daje ci aktywną konsolę JavaScript, inspektor DOM i możliwość nadpisywania funkcji JavaScript w czasie rzeczywistym – niezwykle przydatne do omijania logiki po stronie klienta. (Zobacz oficjalną dokumentację Google, aby uzyskać więcej szczegółów.)

Hooking the JS ⇄ Native bridge with Frida

Punkt wejścia po stronie Java większości wtyczek to org.apache.cordova.CordovaPlugin.execute(...). Hooking tej metody pozwala monitorować lub manipulować wywołaniami dokonywanymi z JavaScript:

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);
};
});

Rekomendacje dotyczące wzmocnienia (2025)

  • Zaktualizuj do najnowszej platformy: cordova-android@13 (maj 2024) celuje w API 34 i wprowadza nowe łaty dla WebView.
  • Usuń artefakty debugowania: Upewnij się, że android:debuggable="false" i unikaj wywoływania setWebContentsDebuggingEnabled w wersjach produkcyjnych.
  • Wymuś surową CSP i AllowList: Dodaj tag <meta http-equiv="Content-Security-Policy" ...> w każdym pliku HTML i ogranicz pochodzenie <access> w config.xml. Przykład minimalnej CSP, która blokuje skrypty inline:
html
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'none'">
  • Wyłącz ruch w czystym tekście: W AndroidManifest.xml ustaw android:usesCleartextTraffic="false" i/lub dostarcz [network-security-config], który wymusza TLS.
  • Higiena wtyczek:
  • Zablokuj wersje wtyczek za pomocą npm ci i zatwierdź wygenerowany package-lock.json.
  • Okresowo uruchamiaj npm audit, osv-scanner lub cordova-check-plugins.
  • Obfuskacja: Minifikuj JavaScript za pomocą Terser/UglifyJS i usuń mapy źródłowe z wersji produkcyjnych, aby spowolnić przypadkowe odwracanie.

Odniesienia

  • Apache Cordova – notatki o wydaniu Cordova-Android 13.0.0 (maj 2024)
  • OSV-ID MAL-2024-7845 – Złośliwy kod w cordova-plugin-acuant
  • CVE-2023-2507 – CleverTap Cordova Plugin deeplink XSS

tip

Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Ucz się i ćwicz Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Wsparcie dla HackTricks