🇰🇷 한글 설명
Wire 라이브러리의 protobuf 리더가 공격자가 제어하는 데이터 길이를 논리적 메시지 경계와 일관되게 검증하지 않는 취약점이 발견되었습니다. 이로 인해 잘못된 protobuf 바이트를 제공할 경우 예외 발생, 경계 초과 동작 또는 과도한 메모리 할당이 발생하여 서비스 거부(DoS) 상태에 빠질 수 있습니다.
💡 쉬운 설명
데이터를 읽는 과정에서 숫자를 잘못 계산하여 프로그램이 예상치 못한 동작을 하거나 멈추게 만드는 결함입니다. 공격자가 조작된 데이터를 보내면 앱이 갑자기 종료되거나 서버가 응답하지 않을 수 있습니다.
🇺🇸 원문 (English)
Wire provides gRPC and protocol buffers for Android, Kotlin, Swift, and Java. Prior to 6.4.5 and 7.0.0-alpha04, Wire protobuf readers do not consistently validate attacker-controlled lengths against the current logical message boundary before advancing cursors, pointers, limits, slices, or allocations. In Kotlin, ProtoAdapter.decode(ByteArray) and ProtoAdapter.decode(ByteString) use ByteArrayProtoReader32.internalNextLengthDelimited(), where a positive oversized length can wrap pos + length to a negative limit and escape the existing negative-length check. Related ProtoReader, ReadBuffer.readVarint(), ReadBuffer.verifyAdditional(count:), packed-repeated, nested-message, and ProtoDecoder.decodeSizeDelimited(_:from:) paths can cross logical boundaries, perform pointer arithmetic, reserve capacity, or convert an unrepresentable size before proving the requested bytes exist. An attacker who supplies malformed protobuf bytes can cause unchecked exceptions, traps, out-of-bounds behavior, or excessive allocation, resulting in denial of service without known confidentiality, integrity, or code-execution impact. This issue is fixed in versions 6.4.5 and 7.0.0-alpha04.
📍 영향받는 시스템
Wire versions prior to 6.4.5 and 7.0.0-alpha04
⚔️ 공격 벡터
조작된 protobuf 바이트 데이터를 전송하여 라이브러리의 길이 검증 로직을 우회함
🛡️ 대응 방법
Wire 라이브러리를 6.4.5 또는 7.0.0-alpha04 이상의 버전으로 업데이트하십시오.
🔧 검증 코드
프로젝트 설정 파일에서 사용 중인 Wire 라이브러리의 버전을 확인하여 취약한 버전인지 판단합니다.
grep -E 'Wire' build.gradle.kts 2>/dev/null || grep -E 'Wire' build.gradle 2>/dev/null
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
💻 영향받는 소프트웨어
Microsoft Edge for Android