A01 2021 - Broken Access Control

HW·2024년 9월 22일

Broken Access Control
사용자가 권한이 없는 리소스에 접근할 수 있게 되는 취약점.

언제 발생?

  • 권한 검증 실패
    사용자 인증 후에 접근 권한을 제대로 검증하지 않아 발생.
    예: 관리자 페이지에 일반 사용자가 접근 가능.

  • 인라인 리소스:
    URL이나 API를 통해 쉽게 접근할 수 있는 리소스.
    예: /admin/user/edit?id=123 형태의 URL.

  • 불충분한 보호:
    특정 사용자 그룹에 대해서만 접근이 허용되어야 하는데, 이를 제대로 구현하지 않아 발생.
    예: 모든 사용자가 게시글 삭제 기능에 접근 가능.

예방 조치

  • 접근 제어 검증
    모든 API 및 리소스에 대해 접근 제어를 철저히 검증.
    사용자 역할에 따라 적절한 권한 체크 구현.
  • 보안 정책 설정
    리소스 접근을 위한 명확한 보안 정책을 정의하고 이를 코드에 반영.
  • 최소 권한 원칙
    사용자에게 필요한 최소한의 권한만 부여.
    불필요한 권한 상승을 방지.
  • 로그 및 모니터링
    접근 로그를 기록하고 이상 징후를 모니터링.
    정기적으로 보안 감사 수행.

공격 시나리오 예시
1. 애플리케이션이 SQL 호출에서 검증되지 않은 데이터를 사용하여 계정 정보를 액세스하는 경우

pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery();

공격자가 브라우저의 'acct' 매개변수를 수정하여 원하는 계정 번호를 전송한다. 올바르게 검증되지 않으면 공격자가 다른 사용자의 계정에 접근할 수 있다.

https://example.com/app/accountInfo?acct=notmyacct
  1. 공격자가 대상 URL로 강제 탐색을 시도한. 관리 권한이 필요한 경우 관리 페이지에 접근할 수 있다.
https://example.com/app/getappInfo
https://example.com/app/admin_getappInfo

인증되지 않은 사용자가 두 페이지 중 하나에 접근할 수 있다면 이는 결함이다. 비관리자가 관리 페이지에 접근할 수 있다면 이것도 결함이다.

0개의 댓글