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

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

현재 상태

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

필요한 조치​

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

다시 제출하면 앱은 다시 검토 절차를 거치게 되며 이 절차는 몇 시간 정도 걸릴 수 있습니다. 앱이 검토 과정을 통과하고 게시가 완료되면 더 이상의 조치가 필요하지 않습니다. 앱이 검토 과정을 통과하지 못할 경우 새로운 앱 버전은 게시되지 않으며 이메일 알림을 받게 됩니다.

추가 세부정보

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

옵션 1: 영향을 받은 Activity가 내보내지지 않도록 방지하기

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

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

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

  1. targetSdkVersion 업데이트하기
    targetSdkVersion이 Google Play의 대상 API 레벨 요구사항을 충족해야 합니다. targetSdkVersion이 16 이하인 앱에서는 현재 로드된 페이지의 컨텍스트에서 loadUrl로 전달된 자바스크립트 URL을 평가합니다. 신뢰할 수 없는 Intent의 확인되지 않은 입력을 사용하여 SDK 버전 16 이하를 타겟팅하거나 loadUrl을 호출하면 공격자가 영향을 받은 WebView에서 유해한 스크립트를 실행할 수 있습니다.
  2. evaluateJavascript 호출 보호하기
    evaluateJavascript에 대한 매개변수는 항상 신뢰할 수 있어야 합니다. 신뢰할 수 없는 Intent의 확인되지 않은 입력을 사용하여 evaluateJavascript를 호출하면 공격자가 영향을 받은 WebView에서 유해한 스크립트를 실행할 수 있습니다.
  3. 안전하지 않은 파일 로드 방지하기
    영향을 받은 WebView에서 쿠키 데이터베이스를 로드할 수 없게 해야 합니다. 신뢰할 수 없는 Intent에서 확인되지 않은 file:// URL을 로드하는 WebView는 다음과 같은 방식으로 악성 앱의 공격을 받을 수 있습니다. 악성 웹페이지가 쿠키 데이터베이스에 <script> 태그를 작성하면 악성 앱에서 WebView 쿠키 데이터베이스를 대상으로 file:// URL이 포함된 Intent를 전송할 수 있습니다. WebView에서 쿠키 데이터베이스가 로드되면 악성 스크립트가 실행되며, 이 악성 스크립트가 세션 정보를 도용할 수 있습니다.
    두 가지 방법으로 영향을 받은 WebViewWebView 쿠키 데이터베이스를 로드할 수 없는지 확인해야 합니다. 모든 파일 액세스 권한을 사용 중지하거나 로드된 file:// URL이 안전한 파일로 연결되는지 확인할 수 있습니다. 공격자가 심볼릭 링크를 사용하여 URL 경로 검사를 속일 수 있습니다. 이러한 공격을 방지하려면 URL 경로만 검사하는 대신 로드하기 전에 신뢰할 수 없는 모든 file:// URL의 표준 경로를 확인하시기 바랍니다.

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

도움이 되었나요?
어떻게 하면 개선할 수 있을까요?