🇰🇷 한글 설명
TensorFlow의 UnsortedSegmentJoin 연산에서 num_segments 텐서 인자 값을 조작하여 서비스 거부(DoS) 공격을 수행할 수 있습니다. 해당 구현체가 num_segments 텐서가 유효한 스칼라 값이라고 가정하기 때문에, 빈 텐서가 입력될 경우 프로세스가 강제 종료됩니다.
💡 쉬운 설명
머신러닝 도구인 TensorFlow에서 특정 값을 잘못 입력하면 프로그램이 갑자기 꺼지게 만들 수 있는 취약점입니다. 공격자가 의도적으로 비어있는 데이터를 보내 시스템을 멈추게 할 수 있습니다.
🇺🇸 원문 (English)
TensorFlow is an end-to-end open source platform for machine learning. An attacker can cause a denial of service by controlling the values of `num_segments` tensor argument for `UnsortedSegmentJoin`. This is because the implementation(https://github.com/tensorflow/tensorflow/blob/a2a607db15c7cd01d754d37e5448d72a13491bdb/tensorflow/core/kernels/unsorted_segment_join_op.cc#L92-L93) assumes that the `num_segments` tensor is a valid scalar. Since the tensor is empty the `CHECK` involved in `.scalar<T>()()` that checks that the number of elements is exactly 1 will be invalidated and this would result in process termination. The fix will be included in TensorFlow 2.5.0. We will also cherrypick this commit on TensorFlow 2.4.2, TensorFlow 2.3.3, TensorFlow 2.2.3 and TensorFlow 2.1.4, as these are also affected and still in supported range.
📍 영향받는 시스템
TensorFlow 2.5.0 미만 버전 (2.4.2, 2.3.3, 2.2.3, 2.1.4 포함)
⚔️ 공격 벡터
UnsortedSegmentJoin 연산의 num_segments 인자에 빈 텐서를 전달하여 프로세스 종료 유도
🛡️ 대응 방법
TensorFlow를 2.5.0 이상 버전으로 업데이트하거나, 사용 중인 지원 버전의 보안 패치(2.4.2, 2.3.3 등)를 적용하십시오.
🔧 검증 코드
출력된 TensorFlow 버전이 2.5.0 미만인지 확인하여 취약 여부를 판단합니다.
pip show tensorflow | grep Version