Broken Access Control
사용자가 권한이 없는 리소스에 접근할 수 있게 되는 취약점.
언제 발생?
권한 검증 실패
사용자 인증 후에 접근 권한을 제대로 검증하지 않아 발생.
예: 관리자 페이지에 일반 사용자가 접근 가능.
인라인 리소스:
URL이나 API를 통해 쉽게 접근할 수 있는 리소스.
예: /admin/user/edit?id=123 형태의 URL.
불충분한 보호:
특정 사용자 그룹에 대해서만 접근이 허용되어야 하는데, 이를 제대로 구현하지 않아 발생.
예: 모든 사용자가 게시글 삭제 기능에 접근 가능.
예방 조치
공격 시나리오 예시
1. 애플리케이션이 SQL 호출에서 검증되지 않은 데이터를 사용하여 계정 정보를 액세스하는 경우
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery();
공격자가 브라우저의 'acct' 매개변수를 수정하여 원하는 계정 번호를 전송한다. 올바르게 검증되지 않으면 공격자가 다른 사용자의 계정에 접근할 수 있다.
https://example.com/app/accountInfo?acct=notmyacct
https://example.com/app/getappInfo
https://example.com/app/admin_getappInfo
인증되지 않은 사용자가 두 페이지 중 하나에 접근할 수 있다면 이는 결함이다. 비관리자가 관리 페이지에 접근할 수 있다면 이것도 결함이다.