권한 누락

보호 대상 리소스나 작업에 필요한 접근 권한 검사 누락

설명

권한 누락은 사용자가 리소스에 접근하거나 특정 작업을 수행할 때 필수적인 권한 검사를 수행하지 않는 경우 발생하는 취약점입니다.

잠재적 영향

  • 애플리케이션 데이터 읽기 및 쓰기: 공격자가 제한되지 않은 데이터 저장소에 직접 접근하거나 충분히 보호되지 않은 기능에 접근하여 데이터를 읽거나 수정할 수 있습니다.
  • 권한 상승 및 보호 메커니즘 우회: 공격자가 권한이 필요한 기능에 접근하거나 중요한 데이터를 수정 또는 읽음으로써 권한을 얻을 수 있습니다.
  • 서비스 거부 공격: 공격자가 시스템 리소스에 무단 접근하여 리소스를 과다하게 소비함으로써 서비스 거부 상태를 초래할 수 있습니다.

해결 방법

  1. 모든 사용자 요청에 대해 필수적인 권한 검사를 수행하세요.
  2. 보호 대상 엔드포인트와 리소스마다 요청자의 역할과 소유권 등 필요한 접근 조건을 확인하세요.
  3. Spring Security와 같은 인증 프레임워크를 사용하여 인증 및 권한을 관리하세요.

예시

변경 전

컨트롤러 메서드의 발췌입니다. 변경 전에는 별도 URL·서비스 계층의 권한 검사도 없다고 가정합니다. 변경 후의 @PreAuthorize는 Spring 관리 빈에 메서드 보안이 활성화되어 있어야 적용됩니다. 최신 구성에서는 @EnableMethodSecurity를 사용하며, 인증과 역할 매핑도 별도로 구성하세요.

java
@GetMapping("/admin")
public String getAdminPage() {
    // 민감한 데이터 또는 관리자 전용 기능
    return "admin-page";
}

변경 후

java
@GetMapping("/admin")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String getAdminPage() {
    // 민감한 데이터 또는 관리자 전용 기능
    return "admin-page";
}

설명:

  • 변경 전: 비권장 코드에서는 '/admin' 엔드포인트에 접근하기 위한 권한 검사가 없습니다. 다른 계층에서도 접근을 제한하지 않으면 권한 없는 사용자가 접근할 수 있습니다.
  • 변경 후: 권장 코드에서는 @PreAuthorize("hasRole('ROLE_ADMIN')") 어노테이션을 사용하여 관리자 권한이 있는 사용자만 '/admin' 엔드포인트에 접근할 수 있도록 설정합니다.

관련 CVE

참조