Skip to content

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

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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions