Skip to content

fix(receiver): 수신 추억 노트 상세가 영상 URL 을 스킴 검증 없이 ACTION_VIEW 로 실행 — 발신자발 위험 스킴이 수신자 기기에서 발화 #1394

Closed

Description

@OnlyReadOneBook

작업 유형

security — 보안 취약점·권한·자격·공급망 대응

주 담당 모듈

receiver — 수신자 관리

개요

수신자 추억 노트 상세(MemorialReceivedDetailScreen.kt L176-L192)가 서버가 준 memorialVideoUrl 을 스킴 검증 없이 Intent(ACTION_VIEW, memorialVideoUrl.toUri()) 로 실행한다. PackageManager.resolveActivity 체크는 처리 앱 존재 확인일 뿐 스킴 가드가 아니다.

cross-user 벡터인 근거 — 서버는 저장값이 관리 스토리지 키가 아니면 원문 그대로 반환한다 (BE S3Service.generateGetPresignedUrl L197-L208, 비관리 값은 L204 에서 rawUrlOrKey 그대로). 즉 발신자(또는 발신자 계정을 쥔 공격자)가 API 로 임의 문자열을 심으면 tel:·market:·타 앱 딥링크 등 발신자발 위험 스킴이 수신자 기기에서 암시적 VIEW 인텐트로 발화한다. 같은 결함의 작성자 화면 판은 #463 범위에서 PR #1336 이 수정 중이고, 수신자 화면은 남의 입력을 여는 쪽이라 위험이 더 크다.

부수 결함 — resolveActivity 사전 조회는 Android 11+ package visibility 에서 처리 가능한 앱이 있어도 null 이 나와 멀쩡한 URL 에 «앱 없음» 오탐 안내를 낼 수 있다 (PR #1336 이 작성자 쪽을 «직접 시도 후 예외 처리»로 바꾼 이유와 동일, #1391 건 3 도 같은 판정).

완료 조건 — PR #1336 의 launchMemorialVideo 가드 패턴을 수신자 화면에 이식한다:

  • 공백 검사 + http/https(ignoreCase) 스킴 + host 비어있지 않음 검증, 불합격이면 실행하지 않고 안내
  • resolveActivity 사전 조회 제거 → startActivity 직접 시도 + ActivityNotFoundException·SecurityException·IllegalArgumentException 처리
  • MemorialVideoLauncherTest 대응 단위 테스트 추가

자식 이슈

No response

참고

Activity

  1. added
    bugSomething isn't working
    security보안 취약점·권한·자격·공급망 대응
    area:receiver수신자 관리 기능 영역
    on Aug 28, 2026
  2. github-actions commented on Aug 28, 2026

    @github-actions
    Contributor

    이 이슈는 필수 메타데이터를 판정할 수 없어 자동으로 닫았습니다.

    • 작업 유형이 없거나 허용된 값이 아닙니다.
    • 주 담당 모듈이 없거나 허용된 값이 아닙니다.

    이슈 등록 양식에 맞게 본문을 보완한 뒤 다시 열어 주세요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:receiver수신자 관리 기능 영역security보안 취약점·권한·자격·공급망 대응

Type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions