지난번 공유드렸던 Apache Airflow 3.0.3 민감 필드 노출 취약점 (CVE-2025-54831) 과 관련해, 현재 보안팀 및 커뮤니티 차원에서 후속 논의가 진행 중입니다.
배경
배경에 대해서 간단하게 정리해보자면:
- Airflow 2 → 3 으로 전환 과정에서 민감 필드 정보 노출 모델이 변경됨
- Airflow 2에서는 Connection/Variable의 민감한 값(password, token 등)을 CLI와 API 모두에서 볼 수 있었음.
- Airflow 3에서는 API에서 민감정보를 마스킹(masking) 하도록 변경되었지만, 3.0.3에서 일시적으로 버그로 인해 노출되었음 → 이후 3.0.4에서 복구 및 CVE 발표.
현재(3.0.4 ~) 모델에서는:
- API/UI에서는 민감정보 읽기 불가 (write-only)
- 로컬 CLI만 민감정보 읽기 가능
현재 제기되고 있는 문제점
현재 구조의 보안 모델 자체는 타당하지만, 실제 구현상 일관성 문제가 발생하고 있다.
connections listCLI는 기본적으로 모든 값(민감값 포함) 을 출력- 반면
variables listCLI는 키만 출력 - UI에서 Variables export 시 마스킹(
****) 값이 노출되어 혼란 발생 - “import/export” 기능이 API/CLI/UI 간에 일관되지 않음
그래서 "어디까지 보여주는 것이 맞는가?"에 대한 명확한 기준이 필요해졌습니다.
https://lists.apache.org/thread/c79668yh42m5g7f7xck3oh6vft0z2kb6
제안된 변경사항들
- API는 절대 민감정보를 노출하지 않는다.
- 이는 서버단 정책이며, 클라이언트(
airflow-ctl)는 별도 검증 불필요.
- 이는 서버단 정책이며, 클라이언트(
- UI에서 import/export 기능 제거 또는 제한
- Export는 제거 (CLI에서만 가능)
- Import는 유지 가능 (민감정보 노출 없이 입력만 가능)
- airflow-ctl 도 동일한 정책 적용
- 어떤 경우에도 민감정보를 표시하지 않음.
expose_config옵션 수정"false"또는"non-sensitive-only"만 허용."true"는 거부됨.
- CLI 기본 출력 수정
- 기본적으로는 키 목록만 표시
--show-values옵션을 사용하면 전체 값(민감정보 포함) 표시 가능- 이때 “민감정보가 표시될 수 있음” 경고 문구를 출력
connections list --conn-id는connections get으로 통합
- CLI
get명령어는 기존대로 유지- 이건 주로 자동화나 스크립트용이므로 변경 없음.
현재까지의 합의점
합의된 부분
- API/UI에서는 절대 민감정보 노출하지 않음.
- export는 로컬 CLI 전용.
- import는 유지 가능.
- CLI 기본 출력은 키 목록만,
--show-values로 세부 출력. - 보안 정책은 서버 단에서 강제.
추가 논의/보류 사항
- CLI
list시 host/port 등 비민감정보를 부분적으로 보여줄지 여부. - Fernet 암호화 기반 export/import를 고려할지 여부.
- 문서 내에서 CLI/API/CTL 간 보안정책을 어떻게 구조화해 설명할지.
마무리하며
이번 논의는 Airflow의 민감정보 관리 모델을 명확히 정립해가는 단계라고 볼 수 있습니다.
Airflow 3를 기점으로 “민감정보는 절대 API/UI에서 노출되지 않는다”는 원칙이 확립되고, CLI·CTL·UI 전반에서 이를 일관성 있게 반영하기 위한 구체적 기준이 마련되고 있는데요.
이 결정은 단기적으로는 일부 사용자 불편을 초래할 수 있다고 보지만,
장기적으로는 보안 일관성 강화, 예상 가능한 동작, 문서화된 기준이라는 긍정적인 결과로 이어질 것으로 보입니다.
앞으로 남은 과제는 CLI의 출력 범위(비민감정보 포함 여부)와 암호화 기반 export/import 같은 세부 정책을 명확히 다듬고, 이를 Security Model 문서에 반영하여 누구나 혼란 없이 이해할 수 있도록 될 것으로 보입니다.
저희 사용자 입장에서는 이러한 변화의 방향을 미리 이해하고, 이에 맞게 조정해 나가는 것이 좋겠습니다 ![]()