Cordova Apps

Reading time: 8 minutes

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks

Per ulteriori dettagli controlla https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58. Questo è un riassunto:

Apache Cordova è riconosciuto per consentire lo sviluppo di applicazioni ibride utilizzando JavaScript, HTML e CSS. Permette la creazione di applicazioni Android e iOS; tuttavia, manca di un meccanismo predefinito per proteggere il codice sorgente dell'applicazione. A differenza di React Native, Cordova non compila il codice sorgente per impostazione predefinita, il che può portare a vulnerabilità di manomissione del codice. Cordova utilizza WebView per rendere le applicazioni, esponendo il codice HTML e JavaScript anche dopo essere stato compilato in file APK o IPA. React Native, al contrario, impiega una VM JavaScript per eseguire il codice JavaScript, offrendo una migliore protezione del codice sorgente.

Clonare un'Applicazione Cordova

Prima di clonare un'applicazione Cordova, assicurati che NodeJS sia installato insieme ad altri prerequisiti come l'Android SDK, Java JDK e Gradle. La documentazione ufficiale di Cordova fornisce una guida completa per queste installazioni.

Considera un'applicazione di esempio chiamata Bank.apk con il nome del pacchetto com.android.bank. Per accedere al codice sorgente, decomprimi bank.apk e naviga nella cartella bank/assets/www. Questa cartella contiene il codice sorgente completo dell'applicazione, inclusi i file HTML e JS. La configurazione dell'applicazione può essere trovata in bank/res/xml/config.xml.

Per clonare l'applicazione, segui questi passaggi:

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

Copia il contenuto di bank/assets/www in bank-new/www, escludendo cordova_plugins.js, cordova.js, cordova-js-src/ e la directory plugins/.

Specifica la piattaforma (Android o iOS) quando crei un nuovo progetto Cordova. Per clonare un'app Android, aggiungi la piattaforma Android. Tieni presente che le versioni della piattaforma di Cordova e i livelli API di Android sono distinti. Consulta la documentazione di Cordova per dettagli sulle versioni della piattaforma e sulle API Android supportate.

Per determinare la versione appropriata della piattaforma Cordova Android, controlla il PLATFORM_VERSION_BUILD_LABEL nel file cordova.js dell'applicazione originale.

Dopo aver impostato la piattaforma, installa i plugin richiesti. Il file bank/assets/www/cordova_plugins.js dell'applicazione originale elenca tutti i plugin e le loro versioni. Installa ogni plugin singolarmente come mostrato di seguito:

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

Se un plugin non è disponibile su npm, può essere prelevato da GitHub:

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

Assicurati che tutti i requisiti siano soddisfatti prima della compilazione:

bash
cd bank-new
cordova requirements

Per costruire l'APK, usa il seguente comando:

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

Questo comando genera un APK con l'opzione di debug abilitata, facilitando il debug tramite Google Chrome. È fondamentale firmare l'APK prima dell'installazione, specialmente se l'applicazione include meccanismi di rilevamento delle manomissioni del codice.

Strumento di Automazione

Per coloro che cercano di automatizzare il processo di clonazione, MobSecco è uno strumento raccomandato. Semplifica la clonazione delle applicazioni Android, semplificando i passaggi descritti sopra.


Rischi di Sicurezza e Vulnerabilità Recenti (2023-2025)

L'architettura basata su plugin di Cordova significa che la maggior parte della superficie di attacco si trova all'interno di plugin di terze parti e del ponte WebView. I seguenti problemi sono stati attivamente sfruttati o divulgati pubblicamente negli ultimi anni:

  • Pacchetti NPM Maligni. Nel luglio 2024 il pacchetto cordova-plugin-acuant è stato rimosso dal registro NPM dopo che è stato scoperto che inseriva codice maligno durante l'installazione (OSV-ID MAL-2024-7845). Qualsiasi macchina di sviluppo che ha eseguito npm install cordova-plugin-acuant dovrebbe essere considerata compromessa. Audit package.json/package-lock.json per plugin Cordova inaspettati e fissa versioni fidate. OSV advisory
  • Deeplink Non Validati → XSS/RCE. CleverTap Cordova Plugin ≤ 2.6.2 (CVE-2023-2507) non riesce a sanitizzare l'input del deeplink, consentendo a un attaccante di iniettare JavaScript arbitrario che viene eseguito nel contesto principale di WebView quando viene aperto un link creato ad hoc. Aggiorna a ≥ 2.6.3 o rimuovi i parametri URI non fidati a runtime. CVE-2023-2507
  • Codice della Piattaforma Obsoleto. cordova-android ≤ 12 viene fornito con targetSdk 33 o inferiore. A partire da maggio 2024 Google Play richiede API 34, e diverse funzionalità di indurimento di WebView (ad es. exported="false" generato automaticamente per i componenti) sono presenti solo in API 34+. Aggiorna a cordova-android@13.0.0 o versioni successive.

Controlli Rapidi durante un pentest

  1. Cerca android:debuggable="true" nel AndroidManifest.xml decompilato. Le build debuggabili espongono il WebView su chrome://inspect consentendo l'iniezione completa di JS.
  2. Rivedi config.xml per tag <access origin="*"> eccessivamente permissivi o meta-tag CSP mancanti in www/index.html.
  3. Grep www/ per eval(, new Function( o HTML costruito dinamicamente che potrebbe trasformare bypass CSP in XSS.
  4. Identifica i plugin incorporati in plugins/ ed esegui npm audit --production o osv-scanner --lockfile per trovare CVE noti.

Suggerimenti per Analisi Dinamica

Debugging Remoto di WebView

Se l'applicazione è stata compilata in modalità debug (o chiama esplicitamente WebView.setWebContentsDebuggingEnabled(true)), puoi allegare Chrome DevTools:

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

Questo ti offre una console JavaScript live, un ispettore DOM e la possibilità di sovrascrivere le funzioni JavaScript a runtime – estremamente utile per bypassare la logica lato client. (Vedi la documentazione ufficiale di Google per ulteriori dettagli.)

Hooking the JS ⇄ Native bridge with Frida

Il punto di ingresso lato Java della maggior parte dei plugin è org.apache.cordova.CordovaPlugin.execute(...). Hookare questo metodo ti consente di monitorare o manomettere le chiamate effettuate da 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);
};
});

Raccomandazioni di indurimento (2025)

  • Aggiorna alla piattaforma più recente: cordova-android@13 (Maggio 2024) mira all'API 34 e porta nuove mitigazioni per WebView.
  • Rimuovi artefatti di debug: Assicurati che android:debuggable="false" e evita di chiamare setWebContentsDebuggingEnabled nelle build di rilascio.
  • Imponi una CSP rigorosa e una AllowList: Aggiungi un tag <meta http-equiv="Content-Security-Policy" ...> in ogni file HTML e limita le origini <access> in config.xml. Esempio di CSP minima che blocca gli script inline:
html
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'none'">
  • Disabilita il traffico in chiaro: In AndroidManifest.xml imposta android:usesCleartextTraffic="false" e/o fornisci un [network-security-config] che impone TLS.
  • Igiene dei plugin:
  • Fissa le versioni dei plugin con npm ci e committa il package-lock.json generato.
  • Esegui periodicamente npm audit, osv-scanner o cordova-check-plugins.
  • Offuscamento: Minifica JavaScript con Terser/UglifyJS e rimuovi le mappe sorgente dalle build di produzione per rallentare il reversing occasionale.

Riferimenti

  • Apache Cordova – Note di rilascio di Cordova-Android 13.0.0 (Maggio 2024)
  • OSV-ID MAL-2024-7845 – Codice malevolo in cordova-plugin-acuant
  • CVE-2023-2507 – CleverTap Cordova Plugin deeplink XSS

tip

Impara e pratica il hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica il hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Impara e pratica il hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporta HackTricks