민감 정보의 평문 저장

Clear-text Storage of Sensitive Data

설명

비밀번호, 토큰, API 키 같은 인증 비밀을 보호하지 않고 평문으로 파일이나 직렬화 저장소에 저장하면 저장소 접근 권한을 얻은 공격자가 해당 값을 그대로 읽을 수 있습니다.

잠재적 영향

  • 계정 탈취, 세션 탈취, API 키 오남용으로 이어질 수 있습니다.
  • 로그, 백업, 임시 파일에 민감 값이 장기간 남을 수 있습니다.
  • 침해 사고 시 유출 범위가 애플리케이션 저장소 밖으로 확대될 수 있습니다.

해결 방법

  • 파일에는 민감 정보 자체가 아니라 불투명한 참조값만 저장합니다.
  • 저장이 반드시 필요하면 검증된 암호화 라이브러리로 암호화하고 키 관리를 분리합니다.
  • 비밀번호는 저장하지 말고 Argon2id, bcrypt, PBKDF2 같은 비밀번호 해시로 처리합니다.
  • 로그, JSON/YAML 설정 파일, 임시 파일에도 민감 값을 평문으로 남기지 않습니다.

예시

변경 전

python
from pathlib import Path
from flask import request

def bad_password_file():
    password = request.args.get("password")
    Path("/var/app/password.txt").write_text(password)

변경 후

python
from argon2 import PasswordHasher

def safe_password_hash(password):
    return PasswordHasher().hash(password)

설명:

  • 변경 전: 사용자 비밀번호를 평문 파일에 기록합니다.
  • 변경 후: 비밀번호 전용 해시로 처리하고 원문을 영속화하지 않습니다.

참조