You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
fix(receiver): 수신 추억 노트 상세가 영상 URL 을 스킴 검증 없이 ACTION_VIEW 로 실행 — 발신자발 위험 스킴이 수신자 기기에서 발화 #1394
수신자 추억 노트 상세(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 처리
Activity
github-actions commentedon Aug 28, 2026
이 이슈는 필수 메타데이터를 판정할 수 없어 자동으로 닫았습니다.
작업 유형이 없거나 허용된 값이 아닙니다.주 담당 모듈이 없거나 허용된 값이 아닙니다.이슈 등록 양식에 맞게 본문을 보완한 뒤 다시 열어 주세요.
docs(receiver): 가드 공유 승격 포인터를 #1436 으로 정정 (#1394)