🇰🇷 한글 설명
Apache ZooKeeper에서 ACL 체크 누락으로 인해 발생하는 정보 노출 취약점입니다. 공격자가 존재하지 않는 경로에 exists-watch를 등록한 후, 해당 경로가 제한된 ACL과 함께 생성될 때 재연결을 통해 ACL이 적용된 경로 정보를 알아낼 수 있습니다. 이는 CVE-2024-23944에 대한 불완전한 수정으로 인해 발생하며, znode 경로에 포함된 사용자 이름이나 로그인 ID와 같은 민감한 정보가 노출될 수 있습니다.
💡 쉬운 설명
보안 설정이 걸려 있는 파일의 이름을 몰래 알아낼 수 있는 취약점입니다. 파일의 내용은 볼 수 없지만, 파일 이름에 포함된 아이디나 사용자 정보가 노출될 위험이 있습니다.
🇺🇸 원문 (English)
Information disclosure via SetWatches reconnect replay in Apache ZooKeeper due to missing ACL check. An attacker can discover ACL-restricted paths by registering exists-watches on non-existent paths, then reconnecting after the paths are created with restricted ACLs. Issue is caused by incomplete fix for CVE-2024-23944 (ZOOKEEPER-4799). The fix added ACL checking to WatchManager.triggerWatch(). However, DataTree.setWatches() — the SetWatches/SetWatches2 reconnect replay handler — still calls watcher.process(event) with null ACL, bypassing the check entirely. It's important to note that only the path is exposed by this vulnerability, not the data of znode, but since znode path can contain sensitive information like user name or login ID, this issue is potentially critical.
Users are recommended to upgrade to version 3.9.6, 3.8.7 which fixes the issue.
📍 영향받는 시스템
Apache ZooKeeper (3.9.6 및 3.8.7 미만 버전)
⚔️ 공격 벡터
존재하지 않는 경로에 watch를 등록한 후, 경로 생성 시 재연결을 통해 ACL 제한이 걸린 경로를 탐색
🛡️ 대응 방법
Apache ZooKeeper를 3.9.6 또는 3.8.7 이상의 버전으로 업그레이드
🔧 검증 코드
출력된 버전이 3.9.6 또는 3.8.7보다 낮은지 확인하여 취약 여부를 판단합니다.
zkServer.sh version 2>/dev/null | grep -E '3\.[0-9]\.'