
1. Broken Access Control이란?
Access Control(접근 제어)은 웹 애플리케이션이 특정 사용자에게 콘텐츠 및 기능을 제공하는 방식이다. 즉, 모든 사용자가 동일한 권한을 가지는 것이 아니라, 특정 사용자만 특정 콘텐츠에 접근할 수 있도록 제어하는 것이다.
하지만, 개발자가 접근 제어를 적절히 구현하지 않으면 Broken Access Control(접근 제어 실패)이 발생할 수 있다.
이는 단순히 세션을 탈취하는 것뿐만 아니라, 파일 접근, 디렉토리 접근, 심지어는 다른 사용자의 정보까지 탈취할 수 있는 심각한 보안 취약점이다.
2. Broken Access Control의 유형
-
디렉토리 및 파일 접근 문제
- 특정 사용자가 접근해서는 안 되는 파일이나 디렉토리에 접근할 수 있는 경우 발생한다.
- 예를 들어, 관리자가 접근해야 하는 디렉토리에 일반 사용자가 URL을 직접 입력하여 접근할 수 있는 경우가 있다.
-
Insecure Direct Object Reference (IDOR)
- 애플리케이션이 사용자의 입력값을 직접 사용하여 객체에 접근하는 경우 발생하는 취약점이다.
- 예를 들어,
user_id=1
값을 user_id=2
로 변경했을 때, 다른 사용자의 데이터가 그대로 출력되는 경우 IDOR 취약점이 존재한다고 볼 수 있다.
-
권한 상승(Privilege Escalation)
- 낮은 권한을 가진 사용자가 높은 권한을 가진 사용자로 변경할 수 있는 경우 발생한다.
- 예를 들어, 일반 사용자가 관리자 권한을 획득할 수 있도록 잘못된 권한 검증이 이루어진 경우이다.
3. Broken Access Control 실습 예제
3.1 간단한 IDOR 공격 실습
- 웹사이트에 로그인하여 특정 페이지로 이동한다.
- URL에 포함된 매개변수(user_id=1)를 확인한다.
- 이 값을 변경하여(user_id=2, user_id=3 등) 다른 사용자의 정보를 불러올 수 있는지 확인한다.
- 만약 변경한 값이 유효하다면, 해당 웹사이트는 Broken Access Control 취약점을 가지고 있다.
3.2 TryHackMe 플랫폼 실습
- TryHackMe의 "Broken Access Control" 챌린지를 실행한다.
- 제공된 IP 주소를 복사하여 웹 브라우저에서 열어본다.

3. 로그인 페이지에서 제공된 자격 증명(username: not, password: test1234
)을 입력하여 로그인한다.

- 로그인 후, 페이지 URL을 확인한다.

- URL에 포함된 매개변수(
not=1
)를 발견하고, 이 값을 변경하여 다른 계정으로 접근할 수 있는지 확인한다.
not=0
으로 변경하였을 때, 다른 사용자의 플래그(flag)를 확인할 수 있었다.

- 이는 Broken Access Control이 존재함을 의미하며, URL을 통해 임의로 다른 사용자의 정보를 열람할 수 있다는 보안 취약점을 나타낸다.
4. 보안 대책
Broken Access Control을 방지하기 위해 다음과 같은 보안 조치를 취할 수 있다.
-
서버 측 검증 강화
- 사용자의 입력값을 신뢰하지 않고, 서버에서 철저히 검증해야 한다.
- 예를 들어,
user_id
값이 변경되었을 때, 세션 정보를 기반으로 해당 사용자가 실제로 접근 가능한 사용자 ID인지 확인해야 한다.
-
접근 제어 정책 적용
- 역할 기반(Role-Based Access Control, RBAC) 또는 속성 기반(Attribute-Based Access Control, ABAC) 접근 제어를 구현하여, 권한이 없는 사용자가 특정 리소스에 접근하지 못하도록 해야 한다.
-
로그 모니터링 및 감지 시스템 구축
- 비정상적인 접근 시도를 감지하고, 이에 대한 로그를 수집하여 분석할 수 있어야 한다.
-
보안 테스트 및 취약점 점검
- 정기적인 보안 점검 및 침투 테스트를 수행하여 취약점을 조기에 발견하고 수정해야 한다.
5. 결론
Broken Access Control은 접근 권한을 제대로 검증하지 않을 경우 발생하는 보안 취약점이다. 이는 단순한 실수로 인해 발생할 수 있으며, 사용자 정보 유출, 권한 상승 등의 심각한 문제를 초래할 수 있다. 따라서 철저한 검증 및 보안 정책을 수립하여 이를 예방하는 것이 중요하다.