트렌드마이크로, 원 클릭만으로 안드로이드 앱 변경할 수 있는 아파치 코도바 취약점 발견

게시일: 2015-06-04 l 작성자: Seven Shen (Mobile Threats Analyst)

우리는 URL만 클릭하면 공격자가 앱 활동을 변경할 수 있도록 허용하는 취약점을 아파치 코도바 앱 프레임워크에서 발견하였습니다. 이 취약점은 앱 사용자의 활동을 방해할 수도 있고 앱을 완전히 마비시킬 수도 있습니다.

CVE-2015-1835로 지정된 이 고위험군 취약점은 아파치 코도바 버전 4.0.1을 포함하여 이 전에 발표된 모든 버전에 영향을 줍니다. 아파치는 이 취약점을 인정하는 보안 공지를 발표하였으며 구글 플레이에서 제공되는 전체 앱의 5.6%를 차지하는 코도바 기반 앱의 대부분이 악용될 수 있습니다.

이 취약점은 이차 설정 변수(환경 설정)를 기본 활동의 인텐트 번들 값으로 설정할 수 있는 코도바 기능에서 발견되었습니다. 이 기능은 코도바 안드로이드0.9.3 버전 업데이트와 함께 2010년 11월 아파치가 발표한 코드 업데이트에 포함되어 있었습니다.

우리 연구원들은 앱의 기본 활동에 대해 적절한 보안이 적용되어 있지 않고 환경 설정이 기본값으로 되어 있을 경우, 공격자는 환경 설정을 변경하고 앱의 활동과 표시 형식을 변경할 수 있다는 사실을 확인하였습니다.

취약점을 성공적으로 악용할 수 있는 전제조건

이 취약점을 성공적으로 악용할 수 있는 조건은 단 두 가지 경우입니다:

  1. 적어도 앱 구성요소들 중 하나가 코도바 기본 활동(CordovaActivity)에서 추출된 것이거나 Config.java와 같은 코도바 프레임워크 구성이 적절하게 보안되지 않았을 경우 외부에서 앱에 액세스할 수 있게 됩니다.
  2. 코도바가 지원하는 환경 설정 중 최소한 한 가지(LogLevel과 ErrorUrl 제외)가 구성 파일(config.xml)에 정의되어 있지 않은 경우.

작동 방식

취약점의 작동 방식을 이해하기 위해 앱에서 환경 설정이 어떻게 설정되는지 살펴보겠습니다.

환경 설정(preferences)이라고도 하는 이차 설정 변수는 개발자들이 자신의 앱을 구성하는데 사용하는 변수들입니다. 이는 코도바 기반 앱의 기본 특징을 결정하는 요소이며 앱 개발자만이 제어할 수 있습니다. 런타임 초기화 때 이 변수들이 변경되면 앱의 활동이 마비될 것입니다.

안드로이드의 아파치 코도바 프레임워크(4.0.1 이전 버전)는 다음과 같은 환경설정들을 지원합니다:

  • Fullscreen
  • DisallowOverscroll
  • BackgroundColor
  • Orientation
  • KeepRunning
  • LoadUrlTimeoutValue
  • SplashScreen
  • SplashScreenDelay
  • InAppBrowserStorageEnabled
  • LoadingDialog
  • LoadingPageDialog
  • ErrorUrl
  • ShowTitle
  • LogLevel
  • SetFullscreen
  • AndroidLaunchMode
  • DefaultVolumeStream

이 환경설정들은 코도바 프레임워크의 config.xml에 명시적으로 설정될 수도 있고 정의되지 않을 수도 있으며 기본값으로 설정될 수도 있습니다. 이 환경 설정이 자신의 앱에 모두 필요한 것은 아니기 때문에 많은 개발자들은 기본값을 그대로 사용하는 추세입니다. 환경설정이 config.xml에 명시적으로 구성되어 있지 않은 경우 코도바 프레임워크는 기본 활동의 인텐트 번들에 따라 설정할 것입니다.

그림 1. CordovaActivity 초기화 동안 앱이 인텐트 번들을 로딩하여 이를 환경설정(preference)에 복사합니다.

그림2. 환경설정 값이 config.xml에 없는 경우 앱이 이 값을 번들에서 로딩합니다.

앱 개발자들은 이러한 하이브리드 프레임워크를 작동시키기 위해선 그들의 앱에서 CordovaActivity를 확장시키라는 지침을 받게 됩니다.

그림3. 웹 페이지 실행을 위해 CordovaActivity에서 확장된 하위클래스

안타깝게도 상기와 같은 개발자 지침은 앱을 공격에 취약한 상태에 놓이게 합니다. 확장된 활동이란 곧 앱을 외부에서 액세스할 수 있다는 것을 뜻하며 따라서 공격자들은 악의적 인텐트 번들을 활동에 삽입하여 원격 웹 서버나 손상된 로컬 앱에서 앱의 기본 특징을 변경시킬 수 있습니다.

우리는 LogLevel과 ErrorUrl을 제외한 모든 환경 설정이 악용될 수 있음을 확인하였습니다. 코도바 프레임워크는 이 취약점에 영향을 받지 않는 방식으로 이 두 가지 환경 설정을 처리합니다.

이 취약점이 성공적으로 악용될 수 있는 전제조건이 개발자들의 일반적인 관행이기 때문에 이 취약점의 악용 가능성이 매우 높다고 생각합니다. 대부분의 코도바 기반 앱은 “CordovaActivity”를 확장시키며 모든 환경 설정을 정확하게 정의하는 경우는 거의 없습니다. 게다가 Cordova Command-Line Interface(CLI)에서 개발된 모든 코도바 기반 앱들은 앞서 언급한 성공적 악용 조건을 자동으로 충족하게 되므로 당연히 취약할 수 밖에 없습니다.

개념 증명

우리는 취약한 안드로이드 기기(Huawei T950E 스마트폰)에서 앞서 소개된 인텐트 URL 스키마의 취약점을 이용하는 일반적인 원격 인텐트 삽입 공격의 데모를 제작하였습니다.

다음은 원격 서버 상의 HTML 코드입니다:

<html>
<body bgcolor=white text=red>
<font size=10>Your Cordova APP</center>
<br>
<font size=20> is hacked!!</font>
<script>
setTimeout(function()
{location.href=”intent:#Intent;S.loadingpagedialog=hacked,haha..blabla..please contact with www.trendmicro.com.cn or send to seven_shen@trendmicro.com.cn for solotion ;SEL;component=com.trendmicro.justademo/.MainActivity;end;”},5000);
</script>
</body>
</html>

기기 상의 브라우저에서 페이지에 액세스하기만 하면 로컬로 제작된 코도바 기반 앱에 푸시 타일 및 텍스트 메시지와 함께 원치 않는 대화가 삽입될 수 있습니다. 아래의 데모 동영상을 통해 이러한 작동 방식을 확인할 수 있습니다.

우리는 다른 앱 환경설정도 변경할 수 있으며 이러한 사례에 대한 데모 동영상을 제작하였습니다:

이 외에도 우리는 인텐트 번들에 특수한 데이터를 삽입하여 코도바 기반 앱들을 원격으로 마비시킬 수 있다는 사실도 확인하였습니다.

adb shell am start -n com.trendmicro.justademo/.MainActivity --es backgroundcolor ffffff

이 공격은 코도바 프레임워크에 예외 상황을 야기시키고 앱을 강제 종료시킬 것입니다.

그림4. 취약점 악용으로 인한 앱 마비

발생 가능한 문제

지금까지 우리는 이 취약점이 코도바 기반 앱과 사용자들에게 미칠 수 있는 다음과 같은 문제점들을 확인하였습니다.

  1. 앱 표시 형식 변경
  2. 팝업 및 텍스트 삽입
  3. 실행 화면 삽입
  4. 기본 기능 변경
  5. 앱 마비

이 취약점은 주로 앱에 영향을 미치고 있지만 수천 가지의 아파치 코도바 써드파티 플러그인도 악용될 위험이 매우 높으며 그 이유는 이 기능이 환경 설정(preferences)에 의존하는 경향이 높기 때문입니다.

해결책

우리는 이 취약점을 아파치에 비공개적으로 알렸으며 이들은 본 취약점에 대한 공식 보안 공지를 발표했습니다. 우리는 안드로이드 앱 개발자들이 코도바 프레임워크를 최신 버전(4.0.2 버전)으로 업그레이드하고 새로운 앱 버전을 다시 제작하도록 권고하고 있으며 이로써 이 취약점을 악용하는 공격자들이 앱을 변경하지 못하도록 막을 수 있을 것입니다.

원문: Trend Micro Discovers Apache Cordova Vulnerability that Allows One-Click Modification of Android Apps