관리 메뉴

yubyeong

OWASP Top 10 -A01 (Broken Access Control :접근 권한 취약점) 본문

Web Hacking/OWASP TOP 10

OWASP Top 10 -A01 (Broken Access Control :접근 권한 취약점)

yubyeong 2025. 5. 5. 18:27
A01 Broken Access Control (접근 권한 취약점)
A02 Cryptographic Failures (암호화 오류)
A03 Injection (인젝션)
A04 Insecure Design (안전하지 않은 설계)
A05 Security Misconfiguration (보안설정오류)
A06 Vulnerable and Outdated Components (취약하고 오래된 소스)
A07 Identification and Authentication Failures (식별 및 인증 오류)
A08 Software and Data Integrity Failures (소프트웨어 및 데이터 무결성 오류)
A09 Security Logging and Monitoring Failures (보안 로깅 및 모니터링 실패)
A10 Server-Side Request Forgery (서버 측 요청 위조)

A01 : Broken Access Control (접근 권한 취약점)

  • Moves up from the fifth position; 94% of applications were tested for some form of broken access control. The 34 Common Weakness Enumerations (CWEs) mapped to Broken Access Control had more occurrences in applications than any other category.
  • 2021년 5위에서 상승했다. 94%의 애플리케이션이 어떤 형태로든 액세스 제어가 중단되었는지 테스트되었다. 중단된 액세스 제어에 매핑된 34개의 공통 취약점(CWE)는 다른 어떤 카테고리보다 애플리케이션에서 더 많이 발생하였다.
    • 주목할만한 공통 취약점 목록(CWE) 에는 아래 항목들이 포함.
      • CWE -200: 권한이 없는 공격자에게 민감한 정보 노출.
      • CWE -201: 전송된 데이터에 민감한 정보 삽입.
      • CWE -352: 사이트 간 요청 위조.

설명

  • 엑세스(접근) 제어는 사용자가 권한을 벗어나 행동할 수 없도록 정책을 시행한다. 만약 엑세스 제어가 취약하면 사용자는 주어진 권한을 벗어나 모든 데이터를 무단으로 열람, 수정 혹은 삭제 등의 행위로 이어질 수 있다. 일반적인 접근 제어 취약점은 다음과 같다.
    • 최소 권한 또는 기본적으로 거부 원칙을 위반하여 특정 기능, 역할 또는 사용자에게만 액세스 권한을 부여해야 하지만 누구나 사용할 수 있도록 하는 경우.
    • URL(매개변수 변조 또는 강제 검색), 내부 애플리케이션 상태 또는 HTML 페이지를 수정하거나 공격 도구를 사용하여 API 요청을 수정하여 액세스 제어 검사를 우회.
    • 고유 식별자(안전하지 않은 직접 객체 참조)를 제공하여 다른 사람의 계정을 보거나 편집할 수 있도록 허용.
    • POST, PUT, DELETE에 대한 액세스 제어가 누락된 상태에서 API에 액세스.
    • 권한 승격. 로그인하지 않고도 사용자로 활동하거나, 사용자로 로그인한 상태에서 관리자로 활동하는 것을 말한다.
    • JSON 웹 토큰(JWT) 액세스 제어 토큰을 재생하거나 변조하는 것과 같은 메타데이터 조작, 권한을 높이기 위해 조작된 쿠키 또는 숨겨진 필드, JWT 무효화 남용.
    • CORS 구성 오류로 인해 승인되지 않거나 신뢰할 수 없는 출처에서 API에 액세스할 수 있다.
    • 인증되지 않은 사용자에게는 인증된 페이지를 강제로 탐색하게 하고, 표준 사용자에게는 권한이 있는 페이지를 강제로 탐색

예방법

  • 공용, 공개 리소스를 제외하고는 기본적으로 거부한다.
  • 접근 제어 메커니즘을 한 번 구현하면 CORS (Cross-Origin Resource Sharing) 사용을 최소화하는 등 애플리케이션 전체에서 재사용.
  • 사용자에게 자신의 작업을 수행하는데 필요한 최소한의 권한만을 부여하고 더 이상의 권한을 부여하지 않는 ‘최소 권한 원칙’을 따라야한다.
  • 사용자에게 CRUD(Create, Read, Update, Delete) 허용 대신 특정 레코드에만 CRUD 권한 부여.
  • 접근 제어 실패를 기록하고, “반복적인 실패” 등의 경우 관리자에게 경고.
  • 자동화 공격 툴로 인한 피해를 최소화하기 위해 API 및 컨트롤러 액세스에 속도 제한을 적용.
  • 웹 서버 디렉토리 목록을 비활성화, 파일 메타데이터(.git 등 ) 와 백업 파일이 웹 루트 내에 존재하지 않게 한다.

공격 시나리오 예시

  • 시나리오 1: 계정 정보에 액세스하는 SQL 호출에서 검증되지 않는 데이터 사용.
 pstmt.setString(1, request.getParameter("acct"));
 ResultSet results = pstmt.executeQuery( );

공격자는 브라우저의 'acct' 매개변수를 수정하여 원하는 계좌 번호를 전송. 제대로 인증되지 않으면 공격자는 모든 사용자의 계정에 접근 가능.

 <https://example.com/app/accountInfo?acct=notmyacct>
  • 시나리오 2:  공격자가 특정 URL로만 브라우징을 강제로 유도. 관리자 페이지에 접근하려면 관리자 권한이 필요.
 <https://example.com/app/getappInfo>
 <https://example.com/app/admin_getappInfo>

인증되지 않은 사용자가 두 페이지 중 하나에 접근할 수 있다면 이는 취약점. 관리자가 아닌 사용자가 관리자 페이지에 접근할 수 있다면 이는 취약점.

참고자료

https://owasp.org/www-project-top-ten/

https://velog.io/@minjeong-dev/2021-OWASP-10대-취약점

https://oobwrite.com/entry/OWASP-TOP10-2023-소개-및-정리