🇰🇷 한글 설명
Apache Airflow의 로그 서버가 JWT의 sub 클레임을 검증할 때 Python의 `str.lstrip()` 함수를 사용하여 경로를 처리하는 과정에서 발생하는 취약점입니다. 이로 인해 특정 DAG에 대한 권한을 가진 인증된 워커가 문자 집합 기반의 잘못된 매칭을 통해 다른 DAG의 로그에 접근할 수 있습니다. 결과적으로 격리된 로그 데이터가 유출될 수 있습니다.
💡 쉬운 설명
로그를 볼 수 있는 권한을 가진 사용자가 이름이 비슷한 다른 작업의 로그까지 몰래 볼 수 있는 보안 허점이 발견되었습니다. 특정 글자들의 조합이 겹치면 권한 검증이 제대로 이루어지지 않아 정보가 유출될 수 있습니다.
🇺🇸 원문 (English)
Exploitation requires the attacker to already be an authenticated Airflow worker holding a valid Log-server JWT issued for at least one Dag. Apache Airflow's Log server authorized JWT tokens against Dag IDs by applying Python's `str.lstrip()` to the requested path segment when verifying the JWT's `sub` claim. `str.lstrip()` strips any of a *set* of characters from the left (not a prefix), so a JWT issued for a Dag named e.g. `dag_a` would authorize log access to any other Dag whose name began with any subset of the characters `{d, a, g, _}` (e.g. `dag_attacker`, `aaaa_target`, `_dag_secret`). Such an authenticated worker could enumerate and read worker logs of other Dags whose names happened to share that character-class prefix, leaking task output and error traces beyond the documented per-Dag isolation boundary. Affects deployments relying on per-Dag log-access scoping (multi-team, shared-executor, shared-worker topologies). Users are advised to upgrade to `apache-airflow` 3.2.2 or later.
📍 영향받는 시스템
Apache Airflow 3.2.2 미만 버전 (per-Dag 로그 접근 제어를 사용하는 환경)
⚔️ 공격 벡터
인증된 Airflow 워커가 특정 DAG의 JWT를 사용하여 문자 집합 매칭 취약점을 이용한 타 DAG 로그 요청
🛡️ 대응 방법
Apache Airflow를 3.2.2 이상의 버전으로 업그레이드하십시오.
🔧 검증 코드
출력된 버전이 3.2.2 미만인 경우 해당 취약점에 노출되어 있습니다.
pip show apache-airflow | grep Version