피드로 돌아가기
The Python exception that leaked tenant secrets
Dev.toDev.to
Security

자동 직렬화 엔진의 __repr__ 관리를 통한 Tenant Secret 유출 원천 차단

The Python exception that leaked tenant secrets

Joanne Skiles2026년 6월 29일11intermediate

Context

Python dataclass 및 Pydantic 모델의 자동 field-level repr 생성 기능이 Production 환경에서 Tenant Config Secret을 Plain Text로 로그에 노출시킨 사례. 단순한 Exception Handler의 문제가 아닌, 객체 직렬화 시점에 이미 Secret이 문자열로 포함되는 구조적 결함에 기인함.

Technical Solution

  • 프레임워크 기반의 자동 repr 생성 의존도를 제거하고 명시적 메서드 정의를 통한 직렬화 제어
  • 민감 정보 제외 및 식별자(tenant_id)만 포함하는 Custom repr 설계로 로그 노출 범위 제한
  • Pydantic의 SecretStr 타입을 도입하여 필드 레벨에서 마스킹 처리
  • f-string 기반의 메시지 구성 시 객체 전체가 아닌 특정 필드만 선택적으로 참조하도록 강제
  • 객체 생성 단계에서 reprstr 계약을 정의하여 하위 로깅 레이어의 의존성 제거

- Secret을 다루는 모델 설계 시 __repr__와 __str__를 명시적으로 오버라이딩하여 민감 정보 노출 방지 - Pydantic 사용 시 SecretStr 또는 Field(repr=False) 설정을 통해 필드별 마스킹 적용 - repr() 결과물에 Secret 값들이 포함되지 않음을 검증하는 단위 테스트 케이스 작성 - Logging Layer에서 structlog 프로세서 등 Sanitizing 필터를 통한 2차 방어선 구축

원문 읽기