# Cordova Apps {{#include ../banners/hacktricks-training.md}} **Per ulteriori dettagli controlla [https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58](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](https://cordova.apache.org/docs/en/11.x/guide/cli/#install-pre-requisites-for-building) 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](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/) 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](https://github.com/Anof-cyber/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 `` 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 `` in ogni file HTML e limita le origini `` in `config.xml`. Esempio di CSP minima che blocca gli script inline: ```html ``` * **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 {{#include ../banners/hacktricks-training.md}}