자바스크립트 인터페이스 삽입 취약점 문제 해결하기

이 정보는 자바스크립트 인터페이스 삽입 취약성이 있는 앱의 개발자를 대상으로 합니다.

현재 상태

Play Console의 공지를 참조하세요. Play Console에 표시된 기한이 지난 후에도 보안 취약점이 수정되지 않은 앱은 모두 Google Play에서 삭제될 수 있습니다.

필요한 조치​

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

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

추가 세부정보

addJavascriptInterface를 통해 자바스크립트 코드에 앱 수준 개체를 노출하고 신뢰할 수 없는 웹 콘텐츠를 로드하는 WebView는 자바스크립트 인터페이스 삽입에 취약합니다. 신뢰할 수 없는 콘텐츠는 @JavascriptInterface 주석이 있는 노출된 개체의 메서드를 실행하여 데이터 유출, 데이터 손상 또는 임의 코드 실행을 발생시킬 수 있습니다.

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

옵션 1: WebView가 자바스크립트 인터페이스에 개체를 추가하지 않도록 방지

신뢰할 수 없는 웹 콘텐츠를 로드하는 WebView의 자바스크립트 인터페이스에 추가된 개체가 없는지 확인합니다. 다음 2가지 방법 중 하나를 사용하면 됩니다.

 

addJavascriptInterface 호출을 통해 자바스크립트 인터페이스에 추가된 개체가 있었는지 확인합니다.

  1. WebView에서 신뢰할 수 없는 콘텐츠를 로드하기 전에 removeJavascriptInterface를 통해 shouldInterceptRequest의 자바스크립트 인터페이스에서 개체를 삭제합니다.

옵션 2: WebView가 신뢰할 수 없는 웹 콘텐츠를 로드하지 않도록 방지

앱에서 WebView의 자바스크립트 인터페이스에 개체를 노출해야 하는 경우, WebView가 암호화되지 않은 연결을 통해 웹 콘텐츠를 로드하지 않도록 해야 합니다. Manifest에서 android:usesCleartextTraffic을 false로 설정하거나 Network Security Config에서 HTTP 트래픽을 허용하지 않도록 설정할 수 있습니다. 또는 영향을 받는 모든 WebView에서 loadUrl을 통해 HTTP 스키마가 포함된 URL을 로드하지 않도록 할 수도 있습니다.


자바스크립트 인터페이스가 포함된 WebView에서 출처를 신뢰할 수 없으며 확인되지 않은 URL(예: 신뢰할 수 없는 인텐트에서 가져온 URL)을 로드하지 않도록 하세요.

문의사항이 있는 경우

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

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