설명
외부 입력으로부터 받은 Intent에 URI 권한 플래그(FLAG_GRANT_READ_URI_PERMISSION, FLAG_GRANT_WRITE_URI_PERMISSION 등)를 유지한 채 전달하면 공격자가 앱이 접근 가능한 콘텐츠 URI 권한을 다른 컴포넌트로 전달하게 만들 수 있습니다.
잠재적 영향
- 앱 내부 파일 또는 콘텐츠 URI 노출
- 쓰기 권한 위임을 통한 데이터 변조
- 권한 경계 우회
해결 방법
- 외부 Intent를 전달하기 전에 불필요한 grant 플래그를 제거합니다.
- URI와 대상 컴포넌트를 allowlist로 검증합니다.
- 필요한 최소 권한만 명시적으로 부여하고, 사용 후 권한을 회수합니다.
예시
변경 전
java
Intent result = getIntent();
result.putExtra("status", "ok");
setResult(RESULT_OK, result);
finish();
변경 후
java
Intent result = new Intent();
result.putExtra("status", "ok");
setResult(RESULT_OK, result);
finish();
설명:
- 변경 전: 외부에서 받은 Intent를 setResult로 그대로 반환하면 공격자가 URI 권한 플래그를 포함시켜 앱의 ContentProvider 접근 권한을 우회하게 만들 수 있습니다.
- 변경 후: setResult에는 새 Intent를 생성해 필요한 데이터만 복사합니다.