OWASP TOP 10. 웹 취약점 중에서 가장 치명적인 취약점들을 4년마다 순위를 매겨서 정리해놓는 굉장히 스탠다드하고 세계적으로 잘 알려져 있는 목록이다. 지금은 2021 버전이고 4년마다 매기기 때문에 올해 2025 버전이 나올 것이다. 그때 되면 또 정리할 것 같다.
들어가기 앞서 OWASP에서 정리한 만큼 이론은 OWASP 페이지를 보고 정리할 예정! 사실상 해석 + 쪼금 살 붙이는 정도,,?
OWASP Foundation, the Open Source Foundation for Application Security | OWASP Foundation
OWASP Foundation, the Open Source Foundation for Application Security on the main website for The OWASP Foundation. OWASP is a nonprofit foundation that works to improve the security of software.
owasp.org
Overview
5위에서 상승한 이 항목에 대해, 전체 애플리케이션의 94%가 어떤 형태로든 접근 제어 우회 취약점(Broken Access Control) 검사를 받았으며, 평균 발생률은 3.81%였다. 이 취약점은 제공된 데이터셋 내에서 가장 많은 발생 건수(31만 8천 건 이상)를 기록했다.
주목할 만한 공통 취약점 분류(CWE)에는 아래들이 포함된다.
- CWE-200: 권한 없는 사용자에게 민감한 정보 노출
- CWE-201: 전송 데이터에 민감한 정보가 삽입
- CWE-352: CSRF
Description
Access control, 즉 접근 제어는 사용자들이 그들의 권한 밖에서 행동하는 것을 하지 못하게 강제하는 정책이다. 접근 제어가 실패할 경우 권한 없는 정보의 노출, 복제, 데이터 파괴나 사용자의 권한 없는 비즈니스 기능 수행 등의 문제가 발생한다.
일반적인 접근 제어 취약점들:
- 최소 권한 원칙(principle of least priv.)이나 디폴트 거부를 어긴 경우. 권한 있는 사용자나 특정 권한, 역할, 사용자만 접근할 수 있는 곳에 아무나 접근이 가능한 상황
- URL을 변경하거나(파라미터 변조나 강제 브라우징), 내부 애플리케이션 상태나 HTML 페이지, 공격 툴을 사용하여 API 요청을 변조하는 행위로 접근 제어를 우회하는 행위
- 다른 사용자의 계정 정보를 그 ID만을 이용하여 보거나, 수정할 수 있는 경우(IDOR)
- API에 액세스하는데 GET, POST, DELETE 메서드에 대해 접근 제어가 없는 경우
- 권한 상승 > 로그인을 하지 않았는데도 사용자처럼 활동할 수 있거나 일반 사용자로 로그인했는데 관리자처럼 활동할 수 있는 경우
- JWT 토큰, 쿠키, 숨겨진 필드를 재사용하거나 변조하는 메타데이터 조작으로 권한을 상승하는 경우
- CORS 설정이 잘못되어 권한이 없거나 신뢰되지 않는 출처에 API 접근이 가능해지는 경우
- 로그인하지 않았는데 로그인한 사용자 페이지에 접속하거나, 일반 사용자임에도 관리자 페이지로 URL 강제 접속할 수 있는 경우
How to Prevent
접근 제어는 공격자가 접근 제어 검사나 메타데이터의 수정을 할 수 없는 신뢰 관계의 서버 측 코드나 서버리스 API에서만 효과적이다. (-> 클라이언트 스크립트는 믿을 수 없다 라는 이야기!!)
- 공개적인 리소스를 제외하고는 기본적으로 deny 설정을 한다.
- 접근 제어 매커니즘을 구현할 때는 한 번 잘 구현하여 전체 애플리케이션에 재사용하여 적용하고, CORS 사용을 최소하해야 한다.
- 접근 제어 모델은 사용자가 레코드(데이터)에 대해 생성, 읽기, 수정, 삭제를 허용하지말고 레코드의 소유자만 접근할 수 있게 해야 한다.
- 앱 고유의 비즈니스는 도메인 모델마다 요구사항을 제한해야 한다.
- 웹 서버는 디렉터리 리스팅을 비활성화하고 메타데이터 파일이나 백업 파일을 웹 루트 디렉터리에 노출되지 않게 해야 한다.
- 접근 제어가 실패하면 로그를 남기고, 필요한 경우 관리자에게 알린다.
- API나 컨트롤러에의 액세스는 속도 제한을 걸어 자동화 공격 툴로부터 피해를 최소화한다.
- 로그아웃을 하면 세션 식별자는 유효하지 않아야 한다. JWT 토큰은 수명이 짧게 설정하여 공격자의 기회의 창을 최소화한다. 수명이 긴 JWT 토큰은 OAuth를 통해 취소할 수 있어야 한다.
개발자와 QA는 접근 제어 관련 기능을 단위 테스트와 통합 테스트에 반드시 포함해야 한다.
공격 시나리오도 있으나 이건 WebGoat로 실습할거라 넘기겠다. 설명도 아주 간단함. 필요한 사람들은 위의 owasp 사이트 이용!!
IDOR과 CORS에 볼드체로 강조를 했는데 IDOR은 아마 다다음 포스팅때 다룰 예정이고, CORS는 굉장히 중요하게 봐야한다고 생각한다. 아마 나중에 다룰 것 같다.
+ 아니 근데 이거 그냥 번역기로 돌린게 아니라 최대한 일일히 내가 해석해서 작성하려니까 시간이 엄청 걸린다. 본인 영어 그렇게까지 잘하는 편이 아님;; 벌써힘드네 ㅠ
그리고 주통기반때와는 다르게 확실히 실무적인 느낌이 더더욱 나는 느낌이 든다. 그렇다고 해서 주통기반이 실무적이지 않다는 건 절대절대 아니니 오해 ㄴ;;
'OWASP TOP 10(2021) > Broken Access Control' 카테고리의 다른 글
Spoofing an Authentication Cookie (0) | 2025.06.09 |
---|---|
Missing Function Level Access Control (2) | 2025.06.06 |
Insecure Direct Object References(IDOR) + RESTful (0) | 2025.06.05 |
Hijack a session (1) | 2025.06.04 |