설명
외부 Intent에서 전달된 Intent 객체나 component 정보를 검증하지 않고 startActivity, startService, sendBroadcast 등에 전달하면 공격자가 앱의 권한과 신뢰 경계를 이용해 의도하지 않은 컴포넌트를 실행할 수 있습니다.
잠재적 영향
- 내부 컴포넌트 호출 또는 권한 우회
- 민감한 extra 값 전달
- 피싱 화면 또는 악성 컴포넌트 실행
해결 방법
- 외부에서 받은 Intent를 그대로 전달하지 않습니다.
- 대상 패키지, 클래스, action을 allowlist로 검증합니다.
setPackage,setClassName,setComponent로 명시적이고 신뢰할 수 있는 대상만 지정합니다.
예시
변경 전
java
Intent next = getIntent().getParcelableExtra("next");
startActivity(next);
변경 후
java
String target = getIntent().getStringExtra("target");
if ("safe".equals(target)) {
Intent next = new Intent(this, SafeActivity.class);
startActivity(next);
}
설명:
- 변경 전: 외부에서 받은 Intent를 검증 없이 startActivity, startService, sendBroadcast 등에 전달하면 공격자가 앱 권한으로 내부 컴포넌트나 다른 앱 컴포넌트를 실행하게 만들 수 있습니다.
- 변경 후: 외부 Intent를 그대로 전달하지 말고 새 Intent를 생성해 허용된 대상만 설정합니다.