잘못된 권한 부여

Incorrect Authorization

설명

제품이 리소스 접근이나 행동 수행 시 권한 검사를 하지만 정확하게 수행되지 않아 발생하는 문제입니다.

잠재적 영향

영향은 잘못 보호된 리소스나 기능에 따라 달라집니다.

  • Application Data Reading (애플리케이션 데이터 읽기): 공격자가 부적절하게 제한된 데이터 저장소에 접근하여 애플리케이션 데이터를 읽을 수 있는 취약점
  • File System Access (파일 시스템 접근): 공격자가 파일이나 디렉터리를 무단으로 읽거나 수정할 수 있는 취약점
  • Privilege Escalation (권한 상승): 공격자가 잘못된 권한 검사를 통해 불법적으로 권한을 상승할 수 있는 취약점
  • Unauthorized Code Execution (무단 코드 실행): 공격자가 권한을 남용하여 승인되지 않은 명령이나 코드를 실행할 수 있는 취약점
  • Denial of Service (서비스 거부): 시스템 자원을 남용하여 서비스를 거부 상태로 만들 수 있는 취약점

해결 방법

  • 접근을 제어할 모든 리소스 및 기능에 대해 올바른 권한 검사를 수행합니다.
  • Spring Security와 같은 인증 및 권한 부여 프레임워크를 사용하여, 민감한 리소스에 대한 접근 제어의 구현을 단순화합니다.
  • 코드 리뷰와 테스트를 통해 누락된 권한 검사를 발견하고 보완합니다.

@EnableMethodSecurity 등으로 메서드 보안을 활성화하고, Spring이 관리하는 객체의 보안 프록시를 통해 호출하는 구성을 전제로 합니다.

예시

변경 전

java
@RestController
public class AdminController {
    @GetMapping("/admin/data")
    public String getAdminData() {
        // 데이터에 대한 올바른 권한 검사가 없음
        return "Sensitive admin data";
    }
}

변경 후

java
@RestController
public class AdminController {

    @GetMapping("/admin/data")
    @PreAuthorize("hasRole('ADMIN')")
    public String getAdminData() {
        // ADMIN 권한을 소유한 사용자만 접근 가능
        return "Sensitive admin data";
    }
}

설명:

  • 변경 전: 이 메서드에는 권한 검사가 없습니다. 다른 접근 제어도 없다면 관리자 데이터가 노출될 수 있습니다.
  • 변경 후: @PreAuthorize로 /admin/data의 메서드 접근을 ADMIN 역할로 제한합니다.

관련 CVE

참조