인텐트 스키마 도용 취약점 문제 해결

이 정보는 인텐트 스키마 도용 취약점이 있는 앱의 개발자를 대상으로 합니다.

현재 상태

하나 이상의 앱에 악성 네트워크 및 웹사이트에서 비공개 앱 구성요소에 액세스하도록 허용할 수 있는 인텐트 스키마 도용 문제가 있습니다.Play Console의 공지를 참조하세요. Play Console에 표시된 기한이 지난 후에도 보안 취약점이 수정되지 않은 앱은 모두 Google Play에서 삭제될 수 있습니다.

조치 필요

  1. Play Console에 로그인한 후 알림 섹션으로 이동하여 영향을 받는 앱과 문제 해결 기한을 확인합니다.

  2. 아래에 설명된 단계를 참고하여 영향을 받는 앱을 업데이트합니다.

  3. 영향을 받는 앱의 업데이트된 버전을 제출합니다.

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

추가 세부정보

신뢰할 수 없는 웹 콘텐츠를 방문하고 Intent.parseUri를 사용해 intent:// 링크를 파싱하며 startActivity를 사용해 이러한 인텐트를 전송하는 WebView는 인텐트 스키마 도용에 취약합니다. 악성 웹 콘텐츠로 인해 이러한 WebView가 비공개 앱 구성요소로 임의의 인텐트를 잘못 전송할 수 있습니다. 이로 인해 이 구성요소가 조작하는 비공개 앱 데이터 도용과 같은 앱 손상이 발생할 수 있습니다. 신뢰할 수 없는 웹 콘텐츠에는 HTTP를 통해 로드된 신뢰할 수 있는 도메인의 콘텐츠도 포함됩니다.

다음 중 한 가지 방법을 통해 이러한 취약점을 방지하는 것이 좋습니다.

옵션 1: WebView에서 임의의 인텐트를 보내지 못하도록 방지

다음 코드를 사용하면 앱에서 Intent.parseUri로 구성된 인텐트가 BROWSABLE 인텐트 필터가 포함된 구성요소에 Implicit Intents로만 전송되도록 제한할 수 있습니다.

     // convert Intent scheme URL to Intent object
  Intent intent = Intent.parseUri(url);
  // forbid launching activities without BROWSABLE category
  intent.addCategory("android.intent.category.BROWSABLE");
  // forbid explicit call
  intent.setComponent(null);
  // forbid Intent with selector Intent
  intent.setSelector(null);
  // start the activity by the Intent
  view.getContext().startActivity(intent, -1);

옵션 2: 영향을 받는 WebView에서 신뢰할 수 없는 웹 콘텐츠를 로드하지 않도록 방지

WebView가 임의의 intent:// 스키마 URL을 파싱해야 하는 경우 신뢰할 수 없는 웹 콘텐츠를 로드하지 않는지 확인하세요. 신뢰할 수 없는 웹 콘텐츠에는 암호화되지 않은 연결을 통해 로드된 웹 콘텐츠가 포함됩니다. 개발자는 Manifest에서 android:usesCleartextTraffic을 false로 설정하거나 HTTP 트래픽을 허용하지 않는 Network Security Config를 설정할 수 있습니다. 또는 영향을 받는 모든 WebView에서 loadUrl을 통해 HTTP 스키마가 포함된 URL을 로드하지 않도록 설정할 수도 있습니다.

또한 개발자는 영향을 받는 WebView가 출처를 신뢰할 수 없으며 제한되지 않은 URL(예: 신뢰할 수 없는 인텐트에서 가져온 URL)을 로드하지 않도록 해야 합니다. 

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

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