민감한 정보의 비인가된 배우에게의 노출

Exposure of Sensitive Information to an Unauthorized Actor

설명

명시적으로 접근 권한을 부여받지 않은 배우에게 민감한 정보를 노출시킬 때 발생하는 취약점입니다.

잠재적 영향

  • 민감 정보 노출 (Confidential Information Disclosure): 악의적 사용자가 민감한 데이터에 접근하여 시스템 및 사용자와 관련된 정보를 이용할 수 있음.

해결 방법

  1. 민감한 정보에 접근할 수 있는 사용자를 엄격하게 제한합니다.

  2. 필요한 최소 권한 원칙을 적용하여 민감한 데이터에 대한 접근 권한을 필요한 사용자에게만 부여합니다.

  3. 데이터를 저장, 전송 또는 처리할 때 암호화를 사용하여 정보의 노출을 방지합니다.

  4. 데이터를 로그에 저장할 때, 민감한 정보가 포함되지 않도록 필터링합니다.

  5. 보안 관련 로그는 민감한 정보를 포함하지 않도록 설정합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

@RestController
public class UserController {

    @GetMapping("/user")
    public String getUserInfo(@RequestParam String userId) {
        // 위험한 코드: 모든 사용자 정보가 노출될 수 있음
        return "Displaying user info: " + getUserDetails(userId);
    }

    private String getUserDetails(String userId) {
        // 사용자 정보를 조회하는 메소드
        return "User Details";  // 예시 데이터로 간단히 표현
    }
}

안전한 코드

설명:

  • 취약한 코드: 비인증된 사용자가 임의의 사용자 ID로 요청을 보내면 민감한 사용자 정보에 접근할 수 있습니다. 이는 시스템의 개인정보 보호를 손상시킵니다.

  • 안전한 코드: 인증된 사용자만 자신의 정보에 접근할 수 있도록 Principal 객체를 통해 사용자 인증 체크를 수행하여 민감한 정보 노출을 방지합니다.

관련 CVE

참조

Last updated