취약점 개요

웹뷰는 안드로이드 앱에서 사용자에게 웹 페이지를 보여주는 기능으로 내부 저장소에 저장된 HTML 파일을 로드하거나 특정 페이지로 이동하는 역할을 수행한다.


웹 서비스 진단 항목 중 크로스 사이트 스크립팅 취약점이 존재하는데, 해당 취약점과 유사하게 안드로이드는 웹뷰에서 발생한다.


만약, 웹뷰의 코드가 검증되지 않을 때 다른 사용자에게 웹뷰 코드를 보낸다면 중요 정보를 탈취할 수 있다.


취약점 진단

소스코드에서 Ctrl+Shift+F > Text to find : WebView > Find 순서대로 입력하면 웹뷰를 사용하는 코드가 여러 개 출력된다.


여러 개 출력되는 코드 중 ViewStatement.java를 더블클릭하면 웹뷰 코드가 존재한 위치로 이동된다. ViewStatement 액티비티는 모바일 앱을 로그인을 출력되는 3개의 메뉴 중 하나이다.


사용자가 로그인을 하고 Transfer 버튼을 누르면 ViewStatement에 저장된다. HTML 파일에 자바스크립트를 실행할 수 있는 코드가 존재하고, 해당 파일을 로드하면 사용자의 모바일 단말기에 해당 자바스크립트가 실행된다.


○ 34행 : 웹뷰 객체 생성

○ 36행 : SD카드 저장소에 위치한 /Statements.jack.html 파일을 로드

○ 37행 : 자바 스크립트 활성화

○ 38행 : 웹뷰 설정


현재 웹뷰 기능을 사용하고 있고, 자바스크립트가 활성화 되어 있다. 사용자에게 입력받은 구간에 제대로 검증되는지 확인한다.


Transfer 액티비티를 클릭하고 모든 입력 폼에 자바스크립트를 삽입하고 Transfer 버튼을 클릭하면 전송 실패 메시지가 출력된다.


정송 실패 메시지가 출력된 것은 사용자가 입력한 자바스크립트가 서버로 전송 되었지만 서버 내부에 에러가 발생한 것이다.



View Statement 액티비티를 클릭하면 사용자의 웹뷰에서 자바스크립트 코드가 실행된다. 이는 사용자의 입력 값을 검증하지 않고 html 파일에 저장 및 출력해서 발생한다.



대응 방안 및 검증

웹뷰 취약점은 사용자의 입력 값을 검증하지 않고 웹뷰 UI로 입력 값을 보낼 때 발생한다. ViewStatement 액티비티에서 자바스크립트 코드를 비활성화하거나 자바스크립트가 필요하다면 사용자의 입력 값을 검증해야 한다.


웹뷰 취약점
사용자가 입력 가능한 모든 구간에 허용되는 문자 이외의 모든 문자는 NULL로 치환 (계좌 번호 : 숫자)
자바스크립트가 필요하지 않다면 setJavaScriptEnabled 메소드를 "false"로 설정

▶ Android Drozer 설치 및 사용법

▶ 안드로이드 컴포넌트 취약점 (Android Activity)

▶ 안드로이드 컴포넌트 취약점 (Android Broadcast Receiver)

▶ 안드로이드 컴포넌트 취약점 (Android Content Provider)

▶ 안드로이드 백업 취약점 (Android Backup)

▶ 안드로이드 메모리 노출 취약점 (메모리 덤프)

▶ 안드로이드 키보드캐시 취약점

▶ 안드로이드 난독화 (코드 보호 기법)

▶ 안드로이드 루팅 탐지 우회 (Frida Hooking)

▶ 안드로이드 로컬 암호화 취약점 (Android Local Encryption)

▶ 안드로이드 다중 사용자 로그인 취약점

  • 카카오톡-공유
  • 네이버-블로그-공유
  • 네이버-밴드-공유
  • 페이스북-공유
  • 트위터-공유
  • 카카오스토리-공유