Wire: skipGroup() missing negative-length check allows 10-byte payload to crash any Wire-decoding service
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.3.0, 7.0.0-alpha03
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: poc
- Automatable: yes
- Technical impact: partial
Summary
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.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: poc · Automatable: yes · Technical impact: partial
- Record last updated
Affected versions
- square wire
fixed in 6.3.0; From 7.0.0-alpha01 · fixed in 7.0.0-alpha03
- com.squareup.wire:wire-runtime-jvmMaven
fixed in 6.3.0
- com.squareup.wire:wire-runtimeMaven
fixed in 6.3.0
- com.squareup.wire:wire-runtimeMaven
From 7.0.0-alpha01 · fixed in 7.0.0-alpha03
- com.squareup.wire:wire-runtime-jvmMaven
From 7.0.0-alpha01 · fixed in 7.0.0-alpha03