🇰🇷 한글 설명
Apache Storm 2.8.6 미만 버전에서 Nimbus Thrift API로 전달되는 토폴로지 자격 증명(TGT)을 역직렬화할 때 클래스 필터링 없이 ObjectInputStream.readObject()를 사용하여 신뢰할 수 없는 데이터 역직렬화 취약점이 존재합니다. 인증된 사용자가 조작된 직렬화 객체를 전송하면 Nimbus 및 Worker JVM에서 원격 코드 실행이 가능합니다.
💡 쉬운 설명
Apache Storm이 외부에서 받은 인증 정보를 검사 없이 해석하는 결함이 있습니다. 토폴로지 제출 권한이 있는 사용자가 악성 데이터를 보내면 서버에서 임의의 코드가 실행될 수 있습니다.
🇺🇸 원문 (English)
Deserialization of Untrusted Data vulnerability in Apache Storm.
Versions Affected:
before 2.8.6.
Description:
When processing topology credentials submitted via the Nimbus Thrift API, Storm deserializes the base64-encoded TGT blob using ObjectInputStream.readObject() without any class filtering or validation. An authenticated user with topology submission rights could supply a crafted serialized object in the "TGT" credential field, leading to remote code execution in both the Nimbus and Worker JVMs.
Mitigation:
2.x users should upgrade to 2.8.6.
Users who cannot upgrade immediately should monkey-patch an ObjectInputFilter allow-list to ClientAuthUtils.deserializeKerberosTicket() restricting deserialized classes to javax.security.auth.kerberos.KerberosTicket and its known dependencies. A guide on how to do this is available in the release notes of 2.8.6.
Credit: This issue was discovered by K.
📍 영향받는 시스템
Apache Storm 2.8.6 미만 2.x 버전 (Nimbus 및 Worker 노드)
⚔️ 공격 벡터
토폴로지 제출 권한을 가진 인증 사용자가 TGT 자격 증명 필드에 조작된 직렬화 객체를 담아 Nimbus Thrift API로 전송
🛡️ 대응 방법
Apache Storm 2.8.6 이상으로 업그레이드하거나, 임시 조치로 ClientAuthUtils.deserializeKerberosTicket()에 ObjectInputFilter 허용 목록을 적용
🔧 검증 코드
출력된 버전이 2.8.6 미만이면 취약하며, 2.8.6 이상이면 패치된 것입니다. 명령어가 실패하면 Storm이 PATH에 없는 것이므로 설치 경로에서 직접 확인이 필요합니다.
storm version 2>/dev/null | head -n 1