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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
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:
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:
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:
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ą:
cd bank-new
cordova requirements
Aby zbudować APK, użyj następującego polecenia:
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łanpm install cordova-plugin-acuant
, powinna być uznana za skompromitowaną. Audytujpackage.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 generowaneexported="false"
dla komponentów) jest obecnych tylko w API 34+. Zaktualizuj docordova-android@13.0.0
lub nowszego.
Szybkie kontrole podczas pentestów
- Szukaj
android:debuggable="true"
w dekompilowanymAndroidManifest.xml
. Wersje debugujące ujawniają WebView przezchrome://inspect
, co pozwala na pełne wstrzykiwanie JS. - Przejrzyj
config.xml
w poszukiwaniu zbyt liberalnych tagów<access origin="*">
lub brakujących meta-tagów CSP wwww/index.html
. - Grep
www/
w poszukiwaniueval(
,new Function(
lub dynamicznie konstruowanego HTML, co może przekształcić obejścia CSP w XSS. - Zidentyfikuj osadzone wtyczki w
plugins/
i uruchomnpm audit --production
lubosv-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:
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:
// 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ływaniasetWebContentsDebuggingEnabled
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>
wconfig.xml
. Przykład minimalnej CSP, która blokuje skrypty inline:
<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
ustawandroid:usesCleartextTraffic="false"
i/lub dostarcz [network-security-config], który wymusza TLS. - Higiena wtyczek:
- Zablokuj wersje wtyczek za pomocą
npm ci
i zatwierdź wygenerowanypackage-lock.json
. - Okresowo uruchamiaj
npm audit
,osv-scanner
lubcordova-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
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.