부적절한 인증

Improper Authentication

설명

부적절한 인증은 사용하는 시스템에서 사용자의 신원을 확인하거나 증명하지 않거나, 불충분하게 증명함으로써 발생하는 취약점입니다. 이를 통해 공격자는 권한이 없는 데이터에 접근하거나 작업을 수행할 수 있습니다.

잠재적 영향

  1. 애플리케이션 데이터 읽기 (데이터 유출): 공격자가 인증 없이 애플리케이션 데이터를 접근할 수 있습니다.
  2. 권한 상승 혹은 신원 도용 (권한 오용): 권한이 없는 사용자가 더 높은 권한을 가지거나 다른 사용자의 신원을 도용할 수 있습니다.
  3. 무단 실행: 코드나 명령을 실행하는 기능이 노출되어 있다면 인증되지 않은 사용자가 이를 악용할 수 있습니다.

해결 방법

  1. 강력한 인증 메커니즘을 사용하여 사용자 또는 시스템의 신원을 증명
  2. Multi-Factor Authentication(다중 요소 인증)을 적용
  3. 모든 인증 관련 데이터를 안전하게 저장하고 전송(예: HTTPS 사용)

예시

변경 전

java
@PostMapping("/login")
public String login(String username, String password, HttpSession session) {
    if (username.equals("admin") && password.equals("admin")) {
        session.setAttribute("user", "admin");
        return "dashboard";
    }
    return "login";
}

변경 후

java
@PostMapping("/login")
public String login(String username, String password, HttpSession session) {
    User user = userService.authenticate(username, password);
    if (user != null) {
        session.setAttribute("user", user);
        return "dashboard";
    }
    return "login";
}

설명:

  • 변경 전: 이 코드는 사용자 인증 시 고정된 사용자명과 비밀번호를 사용하고 있습니다. 이를 통해 공격자가 인증 절차를 우회할 수 있습니다.
  • 변경 후: 사용자 이름과 비밀번호의 검증을 인증 서비스에 위임합니다. 메서드를 분리하는 것만으로 인증이 보장되지는 않으며, 서비스가 비밀번호 해시 검증과 실패 처리를 올바르게 구현해야 합니다.

관련 CVE

참조