Cordova Apps

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기

자세한 내용은 https://infosecwriteups.com/recreating-cordova-mobile-apps-to-bypass-security-implementations-8845ff7bdc58를 확인하세요. 다음은 요약입니다:

Apache Cordova는 JavaScript, HTML, CSS를 사용하여 하이브리드 애플리케이션 개발을 가능하게 하는 것으로 알려져 있습니다. Android 및 iOS 애플리케이션을 생성할 수 있지만, 애플리케이션의 소스 코드를 보호하기 위한 기본 메커니즘이 부족합니다. React Native와 달리 Cordova는 기본적으로 소스 코드를 컴파일하지 않으므로 코드 변조 취약점이 발생할 수 있습니다. Cordova는 WebView를 사용하여 애플리케이션을 렌더링하며, APK 또는 IPA 파일로 컴파일된 후에도 HTML 및 JavaScript 코드를 노출합니다. 반면 React Native는 JavaScript 코드를 실행하기 위해 JavaScript VM을 사용하여 더 나은 소스 코드 보호를 제공합니다.

Cordova 애플리케이션 복제

Cordova 애플리케이션을 복제하기 전에 NodeJS와 Android SDK, Java JDK, Gradle과 같은 기타 필수 구성 요소가 설치되어 있는지 확인하세요. 공식 Cordova 문서는 이러한 설치에 대한 포괄적인 가이드를 제공합니다.

com.android.bank 패키지 이름을 가진 Bank.apk라는 예제 애플리케이션을 고려해 보세요. 소스 코드에 접근하려면 bank.apk를 압축 해제하고 bank/assets/www 폴더로 이동합니다. 이 폴더에는 HTML 및 JS 파일을 포함한 애플리케이션의 전체 소스 코드가 포함되어 있습니다. 애플리케이션의 구성은 bank/res/xml/config.xml에서 찾을 수 있습니다.

애플리케이션을 복제하려면 다음 단계를 따르세요:

bash
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/ 디렉토리는 제외합니다.

새 Cordova 프로젝트를 생성할 때 플랫폼(Android 또는 iOS)을 지정합니다. Android 앱을 복제할 경우 Android 플랫폼을 추가합니다. Cordova의 플랫폼 버전과 Android API 수준은 다릅니다. 플랫폼 버전 및 지원되는 Android API에 대한 자세한 내용은 Cordova documentation을 참조하십시오.

적절한 Cordova Android 플랫폼 버전을 확인하려면 원래 애플리케이션의 cordova.js 파일에서 PLATFORM_VERSION_BUILD_LABEL을 확인하십시오.

플랫폼 설정 후, 필요한 플러그인을 설치합니다. 원래 애플리케이션의 bank/assets/www/cordova_plugins.js 파일에는 모든 플러그인과 그 버전이 나열되어 있습니다. 아래와 같이 각 플러그인을 개별적으로 설치합니다:

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

플러그인이 npm에서 사용할 수 없는 경우, GitHub에서 소스를 가져올 수 있습니다:

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

모든 필수 조건이 충족되었는지 확인한 후 컴파일하십시오:

bash
cd bank-new
cordova requirements

APK를 빌드하려면 다음 명령어를 사용하세요:

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

이 명령은 디버그 옵션이 활성화된 APK를 생성하여 Google Chrome을 통한 디버깅을 용이하게 합니다. 애플리케이션에 코드 변조 탐지 메커니즘이 포함된 경우 설치 전에 APK에 서명하는 것이 중요합니다.

자동화 도구

클로닝 프로세스를 자동화하려는 경우, **MobSecco**가 추천되는 도구입니다. 이는 Android 애플리케이션의 클로닝을 간소화하여 위에 설명된 단계를 단순화합니다.


보안 위험 및 최근 취약점 (2023-2025)

Cordova의 플러그인 기반 아키텍처는 대부분의 공격 표면이 서드파티 플러그인과 WebView 브리지 내부에 존재함을 의미합니다. 지난 몇 년 동안 적극적으로 악용되거나 공개된 다음과 같은 문제가 있습니다:

  • 악성 NPM 패키지. 2024년 7월, 패키지 cordova-plugin-acuant가 설치 중 악성 코드를 드롭하는 것이 발견되어 NPM 레지스트리에서 제거되었습니다 (OSV-ID MAL-2024-7845). npm install cordova-plugin-acuant를 실행한 모든 개발자 머신은 손상된 것으로 간주해야 합니다. 예상치 못한 Cordova 플러그인을 위해 package.json/package-lock.json을 감사하고 신뢰할 수 있는 버전을 고정하십시오. OSV advisory
  • 검증되지 않은 딥링크 → XSS/RCE. CleverTap Cordova Plugin ≤ 2.6.2 (CVE-2023-2507)는 딥링크 입력을 정화하지 않아 공격자가 조작된 링크가 열릴 때 메인 WebView 컨텍스트에서 실행되는 임의의 JavaScript를 주입할 수 있습니다. ≥ 2.6.3으로 업데이트하거나 런타임에 신뢰할 수 없는 URI 매개변수를 제거하십시오. CVE-2023-2507
  • 구식 플랫폼 코드. cordova-android ≤ 12는 targetSdk 33 이하로 제공됩니다. 2024년 5월부터 Google Play는 API 34를 요구하며, 여러 WebView 강화 기능(예: 구성 요소에 대한 자동 생성된 exported="false")은 API 34+에서만 존재합니다. cordova-android@13.0.0 이상으로 업그레이드하십시오.

펜테스트 중 빠른 점검

  1. 디컴파일된 AndroidManifest.xml에서 android:debuggable="true"를 찾으십시오. 디버그 빌드는 chrome://inspect를 통해 WebView를 노출시켜 전체 JS 주입을 허용합니다.
  2. config.xml에서 지나치게 허용적인 <access origin="*"> 태그나 www/index.html의 누락된 CSP 메타 태그를 검토하십시오.
  3. www/에서 eval(, new Function( 또는 CSP 우회를 XSS로 전환할 수 있는 동적으로 생성된 HTML을 grep하십시오.
  4. plugins/에서 내장된 플러그인을 식별하고 npm audit --production 또는 osv-scanner --lockfile을 실행하여 알려진 CVE를 찾으십시오.

동적 분석 팁

원격 WebView 디버깅

애플리케이션이 디버그 모드로 컴파일되었거나 WebView.setWebContentsDebuggingEnabled(true)를 명시적으로 호출하는 경우, Chrome DevTools에 연결할 수 있습니다:

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

이것은 라이브 JavaScript 콘솔, DOM 검사기 및 런타임에 JavaScript 함수를 덮어쓸 수 있는 기능을 제공합니다. 이는 클라이언트 측 로직을 우회하는 데 매우 유용합니다. (자세한 내용은 Google의 공식 문서를 참조하세요.)

Frida를 사용하여 JS ⇄ Native 브리지를 훅킹하기

대부분의 플러그인의 Java 측 진입점은 org.apache.cordova.CordovaPlugin.execute(...)입니다. 이 메서드를 훅킹하면 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);
};
});

보안 강화 권장 사항 (2025)

  • 최신 플랫폼으로 업데이트: cordova-android@13 (2024년 5월)은 API 34를 대상으로 하며 새로운 WebView 완화 기능을 제공합니다.
  • 디버그 아티팩트 제거: android:debuggable="false"를 확인하고 릴리스 빌드에서 setWebContentsDebuggingEnabled 호출을 피하십시오.
  • 엄격한 CSP 및 허용 목록 시행: 모든 HTML 파일에 <meta http-equiv="Content-Security-Policy" ...> 태그를 추가하고 config.xml에서 <access> 출처를 제한하십시오. 인라인 스크립트를 차단하는 최소 CSP 예시:
html
<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"를 설정하고/하거나 TLS를 시행하는 [network-security-config]를 제공합니다.
  • 플러그인 위생:
  • npm ci로 플러그인 버전을 고정하고 생성된 package-lock.json을 커밋합니다.
  • 주기적으로 npm audit, osv-scanner 또는 cordova-check-plugins를 실행합니다.
  • 난독화: Terser/UglifyJS로 JavaScript를 축소하고 생산 빌드에서 소스 맵을 제거하여 일반적인 리버싱 속도를 늦춥니다.

참고 문헌

  • Apache Cordova – Cordova-Android 13.0.0 릴리스 노트 (2024년 5월)
  • OSV-ID MAL-2024-7845 – cordova-plugin-acuant의 악성 코드
  • CVE-2023-2507 – CleverTap Cordova Plugin 딥링크 XSS

tip

AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE) Azure 해킹 배우기 및 연습하기: HackTricks Training Azure Red Team Expert (AzRTE)

HackTricks 지원하기