교차 앱 스크립팅 취약점 문제 해결하기

이 정보는 교차 앱 스크립팅 취약점이 있는 앱의 개발자를 대상으로 합니다.

현재 상태

하나 이상의 앱에 악성 앱이 사용자 쿠키 및 기타 데이터를 도용할 수 있게 하는 WebView 교차 앱 스크립팅 문제가 포함되어 있습니다. Play Console 의 공지사항을 참고하세요. Play Console에 표시된 기한이 지난 후에도 보안 취약점이 해결되지 않은 앱은 모두 Google Play에서 삭제될 수 있습니다.

필요한 조치​

  1. Play Console에 로그인한 후 알림 섹션으로 이동하여 영향을 받는 앱과 문제 해결 기한을 확인합니다.
  2. 영향을 받는 앱을 업데이트하여 취약점을 수정합니다.
  3. 영향을 받는 앱의 업데이트된 버전을 제출합니다.

이 기간에 신규 앱 또는 앱 업데이트는 요청 검토가 끝날 때까지 게시 대기 중 상태가 됩니다. 앱이 적절히 업데이트되지 않은 경우에는 계속해서 경고가 표시됩니다.

추가 세부정보

JavaScript를 사용 설정하며 신뢰할 수 없는 Intent에서 읽은 데이터를 로드하는 WebView의 경우 악성 앱이 안전하지 않은 컨텍스트에서 JavaScript 코드를 실행하도록 유도할 수 있습니다. 다음 중 한 가지 방법을 통해 이러한 취약점을 방지하는 것이 좋습니다.

옵션 1: 영향을 받은 활동이 내보내지지 않도록 방지하기

영향을 받은 WebView가 있는 모든 Activity를 찾습니다. 이러한 Activity가 다른 앱의 Intent를 가져올 필요가 없는 경우 매니페스트에서 Activityandroid:exported=false로 설정할 수 있습니다. 이렇게 하면 악성 앱이 이러한 Activity의 WebViews에 유해한 입력을 전송할 수 없습니다.

옵션 2: 내보낸 활동의 WebView 보호하기

영향을 받은 WebView가 포함된 Activity를 내보내기로 설정하려는 경우 다음과 같이 변경하는 것이 좋습니다.

  1. evaluateJavascript 및 loadUrl 호출 보호하기

    evaluateJavascript에 대한 매개변수는 항상 신뢰할 수 있어야 합니다. 신뢰할 수 없는 Intent의 확인되지 않은 입력을 사용하여 evaluateJavascript를 호출하면 공격자가 영향을 받은 WebView에서 유해한 스크립트를 실행할 수 있습니다. 마찬가지로 javascript: 스키마 URL이 포함된 확인되지 않은 입력이 있는 loadUrl을 호출하면 공격자가 유해한 스크립트를 실행할 수 있습니다.

  2. 안전하지 않은 파일 로드 방지하기

    영향을 받은 WebView에서 쿠키 데이터베이스를 로드할 수 없게 해야 합니다. 신뢰할 수 없는 Intent에서 확인되지 않은 file:// URL을 로드하는 WebView는 악성 앱에 의해 다음과 같은 두 단계로 공격받을 수 있습니다. 1단계: 악성 웹페이지에서 쿠키 데이터베이스에 <script> 태그를 쓸 수 있습니다. 2단계: 악성 앱이 WebView 쿠키 데이터베이스로 연결되는 file:// URL이 포함된 Intent를 전송하거나 악성 웹페이지 자체가 WebView를 파일 URL로 리디렉션하면 수정된 쿠키 데이터베이스 파일이 로드될 수 있습니다. 쿠키 데이터베이스에 저장된 악성 <script>가 로드되고 실행되어 세션 정보를 도용할 수 있습니다.

    영향을 받은 WebView가 WebView 쿠키 데이터베이스를 로드할 수 없는지 다음의 세 가지 방법으로 확인할 수 있습니다.

    1. 모든 파일의 액세스를 차단합니다.
    2. WebView가 file:// URL만 로드하고 로드된 file:// URL이 안전한 파일로 연결되는지 확인합니다. 공격자가 심볼릭 링크를 사용하여 URL 경로 검사를 속일 수 있습니다. 이러한 공격을 방지하려면 URL 경로만 검사하는 대신, 로드하기 전에 신뢰할 수 없는 모든 file:// URL의 표준 경로를 확인하시기 바랍니다.
    3. http:// URL 및 file:// URL을 둘 다 허용하려면 WebViewClient에서 shouldOverrideUrlLoadingshouldInterceptRequest를 사용하여 file:// URL 확인을 구현합니다. 이렇게 하면 loadUrl() 함수 호출에 직접 제공되는 URL뿐 아니라 WebView에 로드되는 모든 URL이 확인됩니다.

도움이 필요한 경우
취약점에 관한 기술적인 문의사항이 있다면 'android-security' 태그를 사용하여 Stack Overflow에 질문을 게시하시기 바랍니다. 문제 해결 단계에 관해 궁금한 점이 있으면 Google 개발자 지원팀에 문의해 주세요.

도움이 되었나요?

어떻게 하면 개선할 수 있을까요?
false
기본 메뉴
1670054986950972807
true
도움말 센터 검색
true
true
true
true
true
5016068
false
false