🇰🇷 한글 설명
Wire는 Android, Kotlin, Swift, Java용 gRPC 및 Protocol Buffers 라이브러리입니다. 6.3.0 및 7.0.0-alpha03 이전 버전의 wire-runtime에서 ByteArrayProtoReader32.skipGroup()과 ProtoReader.skipGroup()이 LENGTH_DELIMITED 필드 길이의 음수 여부를 검증하지 않아, 조작된 입력으로 서비스가 비정상 종료될 수 있습니다.
💡 쉬운 설명
외부에서 받은 특수하게 조작된 데이터를 Wire 라이브러리로 해석하면 프로그램이 예상치 못한 오류로 멈출 수 있습니다. 이로 인해 서비스가 중단되거나 가용성이 떨어질 수 있습니다.
🇺🇸 원문 (English)
Wire provides gRPC and protocol buffers for Android, Kotlin, Swift, and Java. Prior to 6.3.0 and 7.0.0-alpha03, ByteArrayProtoReader32.skipGroup() and ProtoReader.skipGroup() in wire-runtime do not validate that a LENGTH_DELIMITED field length is non-negative before skip(), allowing a crafted protobuf varint encoding -128 as a signed Int to make skip(-128) move the internal position negative and make the next readByte() throw ArrayIndexOutOfBoundsException instead of the documented IOException or ProtocolException, which can crash services using ProtoAdapter.decode(byte[]) on untrusted payloads. This issue is fixed in versions 6.3.0 and 7.0.0-alpha03.
📍 영향받는 시스템
Wire 라이브러리 6.3.0 미만 및 7.0.0-alpha03 미만 버전을 사용하는 Android, Kotlin, Swift, Java 애플리케이션
⚔️ 공격 벡터
공격자가 음수로 해석되는 varint 값을 포함한 조작된 protobuf 페이로드를 ProtoAdapter.decode(byte[])에 전달하여 ArrayIndexOutOfBoundsException을 유발
🛡️ 대응 방법
wire-runtime을 6.3.0 이상 또는 7.0.0-alpha03 이상으로 업그레이드
🔧 검증 코드
출력된 버전이 6.3.0 미만이거나 7.0.0-alpha03 미만이면 취약하므로 업그레이드가 필요하며, 버전 정보가 없으면 다른 빌드 파일이나 의존성 트리를 추가로 확인해야 합니다.
grep -rE 'com.squareup.wire:wire-runtime' --include='*.gradle' --include='*.gradle.kts' --include='*.toml' . 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