이 정보는 인텐트 스키마 도용 취약점이 있는 앱의 개발자를 대상으로 합니다.
현재 상태
하나 이상의 앱에 악성 네트워크 및 웹사이트에서 비공개 앱 구성요소에 액세스하도록 허용할 수 있는 인텐트 스키마 도용 문제가 있습니다.Play Console의 공지를 참조하세요. Play Console에 표시된 기한이 지난 후에도 보안 취약점이 수정되지 않은 앱은 모두 Google Play에서 삭제될 수 있습니다.
조치 필요
-
Play Console에 로그인한 후 알림 섹션으로 이동하여 영향을 받는 앱과 문제 해결 기한을 확인합니다.
-
아래에 설명된 단계를 참고하여 영향을 받는 앱을 업데이트합니다.
-
영향을 받는 앱의 업데이트된 버전을 제출합니다.
다시 제출하면 앱은 다시 검토 절차를 거치게 되며 이 절차는 몇 시간 정도 걸릴 수 있습니다. 앱이 검토 과정을 통과하고 게시가 완료되면 더 이상의 조치가 필요하지 않습니다. 앱이 검토 과정을 통과하지 못할 경우 새로운 앱 버전은 게시되지 않으며 이메일 알림을 받게 됩니다.
추가 세부정보
신뢰할 수 없는 웹 콘텐츠를 방문하고 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 개발자 지원팀에 문의하세요.