암시적 PendingIntent 취약점 문제 해결하기

이 정보는 암시적 PendingIntent 취약점이 있는 앱의 개발자를 대상으로 합니다.

현재 상태

하나 이상의 앱에 서비스 거부, 비공개 데이터 도용, 권한 에스컬레이션의 형태로 보안 위협이 발생할 수 있는 암시적 PendingIntent 문제가 포함되어 있습니다. 앱 문제를 해결하려면 아래에 안내된 자세한 단계를 확인하세요.  앱의 암시적 PendingIntent 사용 위치는 앱의 Play Console 알림에서 확인할 수 있습니다. 위치가 '(동적으로 로드된 코드)'로 끝난다면 앱 또는 앱에서 사용하는 라이브러리에서 동적으로 로드된 코드 내에 있는 것입니다. 애플리케이션은 일반적으로 다른 권장되지 않는 기법이 있더라도 주문형 기능 제공을 통해 동적으로 로드된 코드를 사용합니다(일부 권장되지 않는 기법은 Google Play 정책에도 위배되므로 사용해서는 안 됩니다). 또한 패커가 애플리케이션 코드를 동적으로 로드된 코드로 변환할 수 있습니다.

문제를 해결하는 것이 좋지만 필수는 아닙니다. 이 문제가 있더라도 앱의 게시 상태에는 영향을 주지 않습니다.

추가 세부정보

Android 앱은 인텐트를 사용하여 구성요소 간에 메시지를 전송합니다. 인텐트는 대상 구성요소(명시적 인텐트)를 지정하거나 일반 작업을 나열하여 운영체제에서 작업과 일치하는 인텐트 필터를 등록하는 모든 기기 구성요소(암시적 인텐트)로 인텐트를 전달하도록 할 수 있습니다.

PendingIntent는 나중에 전달되도록 다른 앱으로 위임되는 인텐트입니다. PendingIntent로 래핑된 암시적 인텐트를 생성하는 작업은 서비스 거부, 비공개 데이터 도용, 권한 에스컬레이션을 초래할 수 있는 보안 취약점입니다. 

다음 단계

1. 아래에 강조표시된 단계를 따라 앱을 업데이트하여 '암시적 PendingIntent' 알림을 해결합니다.

앱에서 PendingIntent가 생성된 위치를 검토합니다. 예를 들어 다음 코드는 암시적 인텐트를 래핑하는 PendingIntent를 생성합니다. 

// 암시적 기본 인텐트를 생성하고 PendingIntent에서 래핑

Intent base = new Intent("ACTION_FOO");

base.setPackage("some_package");

PendingIntent pi = PendingIntent.getService(this, 0, base, 0);

개발자는 다음 사항 중 일부나 모두를 적용하여 취약점을 해결하는 것이 좋습니다.

  • 기본 인텐트의 작업, 패키지 구성요소 필드가 설정되었는지 확인합니다. 
  • PendingIntent가 신뢰할 수 있는 구성요소에만 전달되는지 확인합니다. 
  • FLAG_IMMUTABLE(SDK 23에 추가됨)을 사용하여 PendingIntent를 생성합니다. 이렇게 하면 PendingIntent를 수신하는 앱이 채워지지 않은 속성을 채울 수 없습니다. 앱이 SDK 22 이하를 실행하는 기기에서도 실행되는 경우, 개발자는 패턴으로 PendingIntent 생성을 강화하면서 이전 옵션을 적용하는 것이 좋습니다.

if (android.os.Build.VERSION.SDK_INT >= 23) {

  // FLAG_IMMUTABLE을 사용하여 PendingIntent 생성

} else {

  // PendingIntent를 생성하는 기존 코드

}

2. 업데이트된 APK를 제출합니다.

업데이트된 App Bundle 또는 APK를 제출하려면 다음 단계를 따르세요.

  1. Play Console로 이동합니다.
  2. 앱을 선택합니다.
  3. App Bundle 탐색기로 이동합니다.
  4. 오른쪽 상단 드롭다운 메뉴에서 정책을 준수하지 않는 APK/App Bundle의 앱 버전을 선택하고 출시 버전을 기록해 둡니다.
  5. 정책 문제가 있는 트랙으로 이동합니다. 내부/비공개/공개 테스트/프로덕션의 4가지 페이지 중 하나입니다.
  6. 페이지 오른쪽 상단에서 새 버전 만들기를 클릭합니다. 먼저 '트랙 관리'를 클릭해야 할 수도 있습니다.
    • 정책을 위반하는 APK가 포함된 출시 버전이 임시보관 상태인 경우 출시 버전을 삭제합니다.
  7. 정책을 준수하는 버전의 App Bundle 또는 APK를 추가합니다.
    • 정책을 준수하지 않는 버전의 App Bundle 또는 APK가 출시 버전의 포함되지 않음 섹션 아래에 있는지 확인합니다. 자세한 내용은 Play Console 도움말의 '포함되지 않음(App Bundle 및 APK)' 섹션을 참고하세요.
  8. 버전의 변경사항을 저장하려면 저장을 선택합니다.
  9. 버전 준비가 완료되면 버전 검토를 선택합니다.

규정을 준수하지 않는 APK가 여러 트랙에 출시되어 있는 경우 각 트랙에서 5~9단계를 반복합니다.

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

도움이 필요한 경우

취약점에 관해 기술적인 문의사항이 있다면 'android-security' 태그를 사용하여 Stack Overflow에 질문을 올려 주시기 바랍니다. 이 문제를 해결하기 위해 취해야 할 단계를 명확하게 알아보려면 Google 지원팀에 문의해 주세요.

도움이 되었나요?

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