TL;DR

  • Eclipse Ditto 1.3.0~3.9.6의 비기본 ImplicitThingCreationMessageMapper는 메시지 헤더 값을 JSON 템플릿에 이스케이프 없이 삽입해, 조건이 충족되면 공격자가 디지털 트윈의 접근 정책을 임의로 지정할 수 있는 취약점임.
  • 큰따옴표가 포함된 헤더 값으로 JSON 구조를 주입해 관리자 설정 policyId를 덮어쓸 수 있음.
  • 공격자는 새로 생성된 디지털 트윈에 대한 전체 읽기·쓰기 권한을 얻고 정당한 소유자의 접근을 차단할 수도 있음.
  • 악용에는 해당 매퍼 사용과 공격자가 제어하는 헤더를 템플릿에 반영하는 설정이 필요하며, 정책 재정의에는 연결 주체의 정책 생성 권한도 필요함.
  • 심각도는 CVSS 4.0 7.6(높음)이며, 정책 생성 권한 없이 엔터티 생성만 허용하는 설정에서는 정책 재정의 영향이 발생하지 않음.

취약점 개요

  • Eclipse Ditto 연결 서비스의 ImplicitThingCreationMessageMapper는 수신 메시지 헤더에서 확인한 자리표시자 값(예: {{ header:device_id }})을 사전 설정된 JSON 사물 템플릿에 가공되지 않은 문자열로 대입한 뒤 결과를 JSON으로 파싱함.
  • 자리표시자 처리기가 JSON 이스케이프를 하지 않고 주변 JSON 문자열 문맥도 인식하지 않아, 값에 큰따옴표가 포함되면 문자열 경계를 벗어나 추가 JSON 구조를 주입할 수 있음.
  • 취약 버전은 Eclipse Ditto 1.3.0부터 3.9.6까지임.

공격 영향 및 조건

  • 연결이 해당 매퍼를 사용하고, 템플릿이 발행 장치에서 제어 가능한 헤더 값을 반영하는 경우 연결에 메시지를 발행할 수 있는 공격자가 인라인 _policy 객체를 주입할 수 있음.
  • 제어 가능한 헤더의 예시는 MQTT 5 사용자 속성, AMQP 1.0 애플리케이션 속성, Kafka 레코드 헤더임.
  • 인라인 정책은 관리자가 설정한 policyId를 덮어써 새 디지털 트윈에 임의의 접근 제어 정책을 지정함. 그 결과 공격자가 트윈에 대한 전체 읽기·쓰기 권한을 얻고 정당한 소유자의 접근 권한을 취소할 수도 있으며, 관리자 개입은 필요하지 않음.
  • 악용 조건은 비기본 ImplicitThingCreationMessageMapper 사용과 공격자 제어 헤더를 템플릿에 반영하는 설정임. 정책 재정의 영향이 발생하려면 연결의 권한 주체가 정책을 생성할 수 있어야 하며, 이는 기본 설정임.
  • entity-creation 설정으로 연결 주체의 권한을 사물 생성만으로 제한한 배포 환경은 정책 재정의 영향에 해당하지 않음.

심각도 및 분류

  • CVSS 4.0 점수는 7.6(높음)이며, 공격 벡터는 네트워크, 공격 복잡도는 낮음, 공격 요건은 있음, 필요한 권한은 낮음, 사용자 상호작용은 없음으로 평가됨.
  • 취약점은 CWE-1336(템플릿 엔진 특수 요소의 부적절한 무력화), CWE-116(출력의 부적절한 인코딩 또는 이스케이프), CWE-74(다운스트림 구성 요소 입력의 부적절한 무력화)에 해당함.
  • CISA 조정자 평가는 익스플로잇 상태 PoC, 자동화 가능성 아니요, 기술적 영향 전체임.

참고 자료