Cordova Apps
Reading time: 8 minutes
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.
Για περισσότερες λεπτομέρειες ελέγξτε https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58. Αυτό είναι μια περίληψη:
Το Apache Cordova αναγνωρίζεται για την δυνατότητα ανάπτυξης υβριδικών εφαρμογών χρησιμοποιώντας JavaScript, HTML και CSS. Επιτρέπει τη δημιουργία εφαρμογών Android και iOS. Ωστόσο, δεν διαθέτει μηχανισμό από προεπιλογή για την ασφάλιση του πηγαίου κώδικα της εφαρμογής. Σε αντίθεση με το React Native, το Cordova δεν μεταγλωττίζει τον πηγαίο κώδικα από προεπιλογή, γεγονός που μπορεί να οδηγήσει σε ευπάθειες παραχάραξης κώδικα. Το Cordova χρησιμοποιεί το WebView για την απόδοση εφαρμογών, εκθέτοντας τον HTML και JavaScript κώδικα ακόμη και μετά την μεταγλώττιση σε αρχεία APK ή IPA. Το React Native, αντίθετα, χρησιμοποιεί μια JavaScript VM για την εκτέλεση του JavaScript κώδικα, προσφέροντας καλύτερη προστασία του πηγαίου κώδικα.
Κλωνοποίηση μιας Εφαρμογής Cordova
Πριν κλωνοποιήσετε μια εφαρμογή Cordova, βεβαιωθείτε ότι το NodeJS είναι εγκατεστημένο μαζί με άλλες προϋποθέσεις όπως το Android SDK, το Java JDK και το Gradle. Η επίσημη τεκμηρίωση του Cordova παρέχει έναν ολοκληρωμένο οδηγό για αυτές τις εγκαταστάσεις.
Σκεφτείτε μια παράδειγμα εφαρμογή με το όνομα Bank.apk
και το όνομα πακέτου com.android.bank
. Για να αποκτήσετε πρόσβαση στον πηγαίο κώδικα, αποσυμπιέστε το bank.apk
και πλοηγηθείτε στον φάκελο bank/assets/www
. Αυτός ο φάκελος περιέχει τον πλήρη πηγαίο κώδικα της εφαρμογής, συμπεριλαμβανομένων των αρχείων HTML και JS. Η διαμόρφωση της εφαρμογής μπορεί να βρεθεί στο bank/res/xml/config.xml
.
Για να κλωνοποιήσετε την εφαρμογή, ακολουθήστε αυτά τα βήματα:
npm install -g cordova@latest
cordova create bank-new com.android.bank Bank
cd bank-new
Αντιγράψτε τα περιεχόμενα του bank/assets/www
στο bank-new/www
, εξαιρώντας τα cordova_plugins.js
, cordova.js
, cordova-js-src/
και τον κατάλογο plugins/
.
Καθορίστε την πλατφόρμα (Android ή iOS) κατά τη δημιουργία ενός νέου έργου Cordova. Για την κλωνοποίηση μιας εφαρμογής Android, προσθέστε την πλατφόρμα Android. Σημειώστε ότι οι εκδόσεις πλατφόρμας του Cordova και τα επίπεδα API Android είναι διακριτά. Ανατρέξτε στην τεκμηρίωση του Cordova documentation για λεπτομέρειες σχετικά με τις εκδόσεις πλατφόρμας και τα υποστηριζόμενα APIs Android.
Για να προσδιορίσετε την κατάλληλη έκδοση πλατφόρμας Cordova Android, ελέγξτε το PLATFORM_VERSION_BUILD_LABEL
στο αρχείο cordova.js
της αρχικής εφαρμογής.
Αφού ρυθμίσετε την πλατφόρμα, εγκαταστήστε τα απαιτούμενα plugins. Το αρχείο bank/assets/www/cordova_plugins.js
της αρχικής εφαρμογής απαριθμεί όλα τα plugins και τις εκδόσεις τους. Εγκαταστήστε κάθε plugin ξεχωριστά όπως φαίνεται παρακάτω:
cd bank-new
cordova plugin add cordova-plugin-dialogs@2.0.1
Αν ένα plugin δεν είναι διαθέσιμο στο npm, μπορεί να ληφθεί από το GitHub:
cd bank-new
cordova plugin add https://github.com/moderna/cordova-plugin-cache.git
Βεβαιωθείτε ότι πληρούνται όλες οι προϋποθέσεις πριν από τη μεταγλώττιση:
cd bank-new
cordova requirements
Για να δημιουργήσετε το APK, χρησιμοποιήστε την παρακάτω εντολή:
cd bank-new
cordova build android — packageType=apk
Αυτή η εντολή δημιουργεί ένα APK με την επιλογή αποσφαλμάτωσης ενεργοποιημένη, διευκολύνοντας την αποσφαλμάτωση μέσω του Google Chrome. Είναι κρίσιμο να υπογράψετε το APK πριν από την εγκατάσταση, ειδικά αν η εφαρμογή περιλαμβάνει μηχανισμούς ανίχνευσης αλλοίωσης κώδικα.
Εργαλείο Αυτοματοποίησης
Για όσους επιθυμούν να αυτοματοποιήσουν τη διαδικασία κλωνοποίησης, MobSecco είναι ένα προτεινόμενο εργαλείο. Απλοποιεί την κλωνοποίηση εφαρμογών Android, διευκολύνοντας τα βήματα που περιγράφονται παραπάνω.
Κίνδυνοι Ασφαλείας & Πρόσφατες Ευπάθειες (2023-2025)
Η αρχιτεκτονική βασισμένη σε plugins του Cordova σημαίνει ότι η πλειονότητα της επιφάνειας επίθεσης βρίσκεται μέσα σε τρίτα plugins και τη γέφυρα WebView. Τα παρακάτω ζητήματα έχουν εκμεταλλευτεί ενεργά ή έχουν δημοσιοποιηθεί τα τελευταία χρόνια:
- Κακόβουλα Πακέτα NPM. Τον Ιούλιο του 2024, το πακέτο
cordova-plugin-acuant
αφαιρέθηκε από το μητρώο NPM μετά την ανακάλυψη ότι εγκαθιστούσε κακόβουλο κώδικα κατά την εγκατάσταση (OSV-ID MAL-2024-7845). Οποιαδήποτε μηχανή προγραμματιστή που εκτέλεσεnpm install cordova-plugin-acuant
θα πρέπει να θεωρείται ότι έχει παραβιαστεί. Ελέγξτε τοpackage.json
/package-lock.json
για απροσδόκητα plugins Cordova και κλειδώστε αξιόπιστες εκδόσεις. OSV advisory - Μη Επικυρωμένα Deeplinks → XSS/RCE.
CleverTap Cordova Plugin ≤ 2.6.2
(CVE-2023-2507) αποτυγχάνει να απολυμάνει την είσοδο deeplink, επιτρέποντας σε έναν επιτιθέμενο να εισάγει αυθαίρετο JavaScript που εκτελείται στο κύριο πλαίσιο WebView όταν ανοίγει ένας κατασκευασμένος σύνδεσμος. Ενημερώστε σε ≥ 2.6.3 ή αφαιρέστε μη αξιόπιστες παραμέτρους URI κατά την εκτέλεση. CVE-2023-2507 - Παλιός Κωδικός Πλατφόρμας.
cordova-android
≤ 12 αποστέλλει με targetSdk 33 ή χαμηλότερο. Από τον Μάιο του 2024, το Google Play απαιτεί API 34, και αρκετές δυνατότητες ενίσχυσης του WebView (π.χ. αυτόματα παραγόμενοexported="false"
για στοιχεία) είναι διαθέσιμες μόνο σε API 34+. Αναβαθμίστε σεcordova-android@13.0.0
ή νεότερη έκδοση.
Γρήγοροι έλεγχοι κατά τη διάρκεια ενός pentest
- Αναζητήστε
android:debuggable="true"
στο αποσυμπιεσμένοAndroidManifest.xml
. Οι εκδόσεις αποσφαλμάτωσης εκθέτουν το WebView μέσω τουchrome://inspect
επιτρέποντας πλήρη εισαγωγή JS. - Ελέγξτε το
config.xml
για υπερβολικά επιτρεπτικά<access origin="*">
tags ή απουσία CSP meta-tags στοwww/index.html
. - Grep
www/
γιαeval(
,new Function(
ή δυναμικά κατασκευασμένο HTML που θα μπορούσε να μετατρέψει παρακάμψεις CSP σε XSS. - Εντοπίστε ενσωματωμένα plugins στο
plugins/
και εκτελέστεnpm audit --production
ήosv-scanner --lockfile
για να βρείτε γνωστές CVEs.
Συμβουλές Δυναμικής Ανάλυσης
Αποσφαλμάτωση WebView από Απόσταση
Εάν η εφαρμογή έχει μεταγλωττιστεί σε debug mode (ή καλεί ρητά WebView.setWebContentsDebuggingEnabled(true)
), μπορείτε να συνδέσετε τα Chrome DevTools:
adb forward tcp:9222 localabstract:chrome_devtools_remote
google-chrome --new-window "chrome://inspect/#devices"
Αυτό σας δίνει μια ζωντανή κονσόλα JavaScript, επιθεωρητή DOM και τη δυνατότητα να αντικαθιστάτε τις λειτουργίες JavaScript κατά την εκτέλεση – εξαιρετικά χρήσιμο για την παράκαμψη της λογικής πλευράς του πελάτη. (Δείτε την επίσημη τεκμηρίωση της Google για περισσότερες λεπτομέρειες.)
Hooking the JS ⇄ Native bridge with Frida
Το σημείο εισόδου της Java για τα περισσότερα plugins είναι org.apache.cordova.CordovaPlugin.execute(...)
. Hooking αυτή τη μέθοδο σας επιτρέπει να παρακολουθείτε ή να τροποποιείτε τις κλήσεις που γίνονται από το 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);
};
});
Συστάσεις Σκληροποίησης (2025)
- Ενημερώστε την τελευταία πλατφόρμα:
cordova-android@13
(Μάιος 2024) στοχεύει το API 34 και φέρνει νέες μετρήσεις μετριασμού WebView. - Αφαιρέστε τα αρχεία αποσφαλμάτωσης: Βεβαιωθείτε ότι το
android:debuggable="false"
και αποφύγετε την κλήση τουsetWebContentsDebuggingEnabled
σε εκδόσεις παραγωγής. - Επιβάλλετε μια αυστηρή CSP & AllowList: Προσθέστε μια
<meta http-equiv="Content-Security-Policy" ...>
ετικέτα σε κάθε αρχείο HTML και περιορίστε τις προελεύσεις<access>
στοconfig.xml
. Παράδειγμα ελάχιστης CSP που μπλοκάρει inline scripts:
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'none'">
- Απενεργοποιήστε την κυκλοφορία σε καθαρό κείμενο: Στο
AndroidManifest.xml
ορίστεandroid:usesCleartextTraffic="false"
και/ή παρέχετε ένα [network-security-config] που επιβάλλει TLS. - Υγιεινή plugin:
- Κλειδώστε τις εκδόσεις των plugins με
npm ci
και δεσμεύστε το παραγόμενοpackage-lock.json
. - Εκτελέστε περιοδικά
npm audit
,osv-scanner
ήcordova-check-plugins
. - Αποσφράγιση: Μειώστε το JavaScript με Terser/UglifyJS και αφαιρέστε τους χάρτες πηγής από τις παραγωγικές εκδόσεις για να επιβραδύνετε την casual αναστροφή.
Αναφορές
- Apache Cordova – Σημειώσεις έκδοσης Cordova-Android 13.0.0 (Μάιος 2024)
- OSV-ID MAL-2024-7845 – Κακόβουλος κώδικας στο
cordova-plugin-acuant
- CVE-2023-2507 – CleverTap Cordova Plugin deeplink XSS
tip
Μάθετε & εξασκηθείτε στο AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Μάθετε & εξασκηθείτε στο GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Μάθετε & εξασκηθείτε στο Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Υποστηρίξτε το HackTricks
- Ελέγξτε τα σχέδια συνδρομής!
- Εγγραφείτε στην 💬 ομάδα Discord ή στην ομάδα telegram ή ακολουθήστε μας στο Twitter 🐦 @hacktricks_live.
- Μοιραστείτε κόλπα hacking υποβάλλοντας PRs στα HackTricks και HackTricks Cloud github repos.