[목차]

 

 

Insecure Webview implementation (취약한 웹 뷰 구현)

1. 취약점 설명

2. 진단 방법

       - 앱 구동 후 웹뷰가 사용되거나

         웹뷰와 연관이 있는 기능들 검토

       - 웹뷰가 사용되고 있는 코드 검토

       - 스크립트 명령어를 웹뷰와 연관 있는

         UI 등에 대입 후 반응 확인

3. 대응 방안

 


 

[Insecure Webview implementation]

 

1. 취약점 설명

웹 뷰(안드로이드 앱의 UI 또는 패킷)에서

자바스크립트 코드가 강제로 실행되게 함으로써

다른 사용자의 중요 정보를 탈취하는 취약점

(XSS)

 

인시큐어뱅크에서는 자바스크립트 코드가

로컬에서만 실행되게 할 수 있는데

만약 다른 사용자에게 자바스크립트 코드를

보낼 수 있다면 타 사용자가 의도하지 않은

코드의 실행 및 특정 중요정보 탈취 등의

행위가 가능한 취약점

 

 

 

 

 

2. 진단 방법

 

 

(1) 앱 구동 후 웹뷰가 사용되거나

웹뷰와 연관이 있는 기능들 검토

 

ㄱ. 웹 뷰를 어디서 어떻게 사용하는지 확인

안드로이드 스튜디오 > ctrl + shift + f > WebView 검색

 

 

위 창 우측 하단의

 

 

Open in Find Window 또는

ctrl + enter 누르면

메인 화면 하단에 검색 결과가 출력됨

 

 

Found Occurrences 하단의

Unclassified 메뉴를 살펴보면

 

 

두 가지 클래스에서 WebView라는 문자열이 검색되었고

해당 클래스 들을 확인해 보면 어느 메서드에서 사용되었는지

확인 가능

 

 

 

(2) 웹뷰가 사용되고 있는 코드 검토

 

 

이 중 살펴볼 것을

View Statiement.java 클래스로

 

해당 기능은 앱 상에서 이루어진

송금(transfer) 기능의 내역을

확인하는 기능이고

 

코드를 보면

 

 

ViewStatement라고 하는 Activity에서

웹 뷰가 사용되는 것을 확인할 수 있다.

 

 

 

 

(3) 스크립트 명령어를 웹뷰와 연관 있는

UI 등에 대입 후 반응 확인

: 해당 소스 내 저장된 파일을 load 하는 코드를 확인

 

 

스크립트 구문 입력 시도,

 

 

송금은 fail 되지만

 

 

viewstatment 메뉴에

접근해 보면

 

 

저장된 스크립트 구문이

정상 실행된다.

 

 

transfer 코드를 살펴보면

DoTransfer 클래스

doInBackground 내 코드를 보면

 

 

전송한 viewstatement 정보가

MYFILE 변수, external storage 경로

/Statements + 사용자명.html 로

저장되고 해당 코드는 전송 성공, 실패

모든 경우에 동일하게 들어가 있다.

 

 

쉘에 접속해

external storage인

/sdcard 경로를 들어가 보면

Statements_jack.html 파일이 존재하고

 

 

내용을 살펴보면

입력했던 스크립트 구문이 함께

저장되어 있다.

 

결국 ViewStatement는

위 파일을 읽어 웹 뷰 형식으로

사용자에게 보여주는 것

 

 


 

 

3. 대응 방안

- 스크립트 구문 필터링(특수문자 치환) 코드 추가

- 사용자 입력 값을 점검하여 지정된 데이터 형식 외 사용 금지

-WebView 설정 중 setJavaScriptEnabled 메서드를 false로 설정

 

 

 

 

 

 

728x90

+ Recent posts