Skip to content

[보안] 비밀글 첨부파일 다운로드 경로 권한검증 누락(IDOR/권한우회) #648

@ksw9722

Description

@ksw9722

요약

비밀글/제한글의 첨부파일 다운로드 경로에서 본문 조회 시 적용되는 비밀글/읽기 권한 검증이 누락되어,
직접 URL 요청으로 첨부파일에 접근할 수 있는 문제가 확인되었습니다.

즉, 비밀글 본문은 못 보더라도 첨부파일은 우회 접근이 가능한 상태입니다.


영향 범위

  • 웹 다운로드 경로: GET /board/{bo_table}/{wr_id}/download/{bf_no}
  • API 다운로드 경로: GET /api/v1/boards/{bo_table}/writes/{wr_id}/files/{bf_no}

문제 원인

다운로드 흐름에서 아래 검증만 수행됩니다.

  • validate_download_level()

하지만 비밀글 보호에 핵심인 아래 검증은 누락되어 있습니다.

  • validate_read_level()
  • validate_secret() (또는 동일 수준의 비밀글 접근 검증)

결과적으로 첨부파일 반환 직전 권한 경계가 깨집니다.


재현 시나리오 (개요)

  1. 일반 사용자(권한이 낮은 사용자)로 로그인
  2. 대상 게시판/그룹 접근 가능 상태에서 wr_id, bf_no를 추정/확인
  3. 아래 URL 직접 호출
    • /board/{bo_table}/{wr_id}/download/{bf_no}
    • /api/v1/boards/{bo_table}/writes/{wr_id}/files/{bf_no}
  4. 비밀글 본문 접근 권한이 없어도 첨부파일 다운로드 가능

보안 영향

  • 비밀/제한 게시글의 첨부파일 무단 열람
  • 내부 문서/개인정보 등 민감 데이터 유출 가능
  • 비밀글 정책의 실질적 우회

권장 수정안

다운로드 라우트에서도 본문 조회와 동일한 접근통제를 강제해 주세요.

예시:

  1. DownloadFileServicevalidate_download_access() 추가
    • block_read_comment()
    • validate_read_level()
    • validate_secret()
  2. 웹/API 다운로드 라우트에서 get_board_file() 이전에 위 메서드 호출
  3. validate_download_level()은 보조 검증으로 유지

참고 코드 위치

  • bbs/board.py (다운로드 라우트)
  • api/v1/routers/board.py (API 다운로드 라우트)
  • service/board/read_post.py (DownloadFileService)

필요하시면 재현 가능한 요청 형태와 패치 제안(diff 형태)도 추가로 제공드리겠습니다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions