hacktricks/src/mobile-pentesting/cordova-apps.md

126 lines
8.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 `<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
{{#include ../banners/hacktricks-training.md}}