설명
제품이 리소스 접근이나 행동 수행 시 권한 검사를 하지만 정확하게 수행되지 않아 발생하는 문제입니다.
잠재적 영향
영향은 잘못 보호된 리소스나 기능에 따라 달라집니다.
- 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
- CVE-2021-39155: Chain: A microservice integration and management platform compares the hostname in the HTTP Host header in a case-sensitive way (CWE-178, CWE-1289), allowing bypass of the authorization policy (CWE-863) using a hostname with mixed case or other variations.
- CVE-2019-15900: Chain: sscanf() call is used to check if a username and group exists, but the return value of sscanf() call is not checked (CWE-252), causing an uninitialized variable to be checked (CWE-457), returning success to allow authorization bypass for executing a privileged (CWE-863).
- CVE-2009-2213: Gateway uses default "Allow" configuration for its authorization settings.