설정 파일에 빈 비밀번호 사용

Empty Password in Configuration File

설명

구성 객체나 설정 파일에서 password/passphrase 값을 빈 문자열("") 또는 빈 템플릿 리터럴(``)로 두면 인증이 사실상 꺼진 상태가 되어 누구나 연결을 시도할 수 있습니다. 공격자는 빈 비밀번호로 DB, 메시지 브로커, SMTP 등 백엔드 서비스에 직접 접속하거나, 애플리케이션의 내부 통신 자격 증명을 악용하여 무단 접근, 데이터 탈취, 서비스 오남용을 할 수 있습니다.

잠재적 영향

  • 무단 접근: 빈 비밀번호로 서비스나 데이터베이스에 직접 로그인이 가능해집니다.

  • 데이터 유출/변조: 인증 없이 민감 정보 조회, 덮어쓰기, 삭제가 가능합니다.

  • 권한 오남용 및 서비스 오남용: 메일 발송, 큐 소비/게시, 관리 API 호출 등 시스템 리소스를 악용할 수 있습니다.

  • 규정 위반 및 감사 실패: 기본 보안 통제가 우회되어 컴플라이언스 요구사항을 충족하지 못할 수 있습니다.

해결 방법

  • 빈 비밀번호 금지: password/passphrase를 절대 빈 문자열로 설정하지 않습니다. 최소 길이, 복잡도 정책을 적용하세요.

  • Secret 관리: 코드/리포지토리에 비밀번호를 하드코딩하지 말고 환경 변수, Secret Manager(KMS, AWS Secrets Manager 등) 또는 Vault를 사용하세요.

  • 로딩 시 검증: 애플리케이션 시작 시 비밀번호가 설정되었는지 검사하고, 비어 있거나 기본값이면 즉시 실패(fail fast) 처리하세요.

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

취약한 코드

안전한 코드

설명:

  • 취약한 코드: password를 빈 문자열로 설정하면 데이터베이스가 인증 없이 접속을 허용할 수 있어 외부/내부 사용자가 손쉽게 무단으로 연결하여 데이터 조회·수정·삭제를 수행할 수 있습니다. 이는 인증 및 접근 통제를 사실상 비활성화하는 위험한 설정입니다.

  • 안전한 코드: 비밀번호를 코드에 하드코딩하지 않고 환경 변수에서 안전하게 불러오며, 런타임에 값이 비어 있으면 애플리케이션을 즉시 중단하여 오동작을 방지합니다. 이렇게 하면 빈 비밀번호 사용을 구조적으로 차단하고, 시크릿 노출 가능성을 줄일 수 있습니다.

참조

Last updated