데이터베이스 비밀번호 미설정 (Empty Database Password)

Missing Authentication for Critical Function (Database)

설명

애플리케이션이 데이터베이스에 연결할 때 비밀번호 없이 인증을 수행하면, 누구나 해당 데이터베이스에 접근할 수 있는 보안 취약점이 발생할 수 있습니다. 특히, 비밀번호가 없는 경우 공격자가 데이터베이스에 무단으로 접근하여 중요한 데이터를 조회, 수정, 삭제할 가능성이 높습니다.

잠재적 영향

  • 데이터 유출: 누구나 인증 없이 데이터베이스에 접속하여 민감한 정보를 조회할 수 있음.

  • 데이터 조작: 공격자가 데이터베이스에 연결하여 데이터 삽입, 수정, 삭제가 가능함.

  • 권한 상승: 권한이 없는 사용자가 데이터베이스의 설정을 변경할 가능성이 있음.

해결 방법

  1. 데이터베이스 비밀번호 설정 필수화

    • 데이터베이스 사용자 계정에 강력한 비밀번호를 설정합니다.

  2. 비밀번호를 코드 내에 하드코딩하지 않기

    • 환경 변수 또는 보안 저장소(KMS, HashiCorp Vault 등)를 활용하여 비밀번호를 안전하게 관리합니다.

  3. 최소 권한 원칙 적용

    • 데이터베이스 사용자에게 필요한 최소한의 권한만 부여합니다.

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

취약한 코드

안전한 코드

설명:

  • 취약한 코드:

    • 비밀번호를 빈 문자열("")로 설정하여 누구나 인증 없이 데이터베이스에 접근 가능.

  • 안전한 코드:

    • System.getenv("DB_USER")System.getenv("DB_PASSWORD")을 사용하여 환경 변수에서 비밀번호를 안전하게 로드.

    • 비밀번호가 설정되지 않은 경우 예외를 발생시켜 보안 강화.

참조

Last updated