Quick answers
- Is CVE-2026-63126 exploited in the wild?
- No. Junglewise Threat Intelligence has no report of CVE-2026-63126 being exploited in the wild.
- How severe is CVE-2026-63126?
- High severity, with a CVSS score of 7.5, published 16 September 2026.
- Which products and versions are affected?
- com.squareup.wire:wire-runtime (Maven) ECOSYSTEM:introduced=0,fixed=6.4.5.
- Is there a fix for CVE-2026-63126?
- Yes. com.squareup.wire:wire-runtime (Maven): upgrade to 6.4.5 or later. Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.
- How is CVE-2026-63126 attacked?
- It is attacked over the network, in a software library.
- Am I affected by CVE-2026-63126?
- Check whether you run com.squareup.wire:wire-runtime (Maven) at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.
How to fix
- com.squareup.wire:wire-runtime (Maven): upgrade to 6.4.5 or later
# set com.squareup.wire:wire-runtime to 6.4.5 in your pom.xml or build.gradle
Technical details
Wire's protobuf decoders mix untrusted length decoding, validation, and cursor advancement in the wrong order. In Kotlin's ByteArrayProtoReader32.internalNextLengthDelimited(), an attacker-controlled varint length is read into a signed 32-bit Int. The original code rejected only negative lengths (< 0 check), but a length of 2147483647 passes this check and then overflows when added to the current position: pos + length wraps around to a negative limit. This invalid limit bypasses the subsequent if (limit > pushedLimit) guard and propagates to downstream string, bytes, skip, and scalar-read operations as an invalid range, triggering unchecked exceptions like IllegalArgumentException ("startIndex > endIndex") or ArrayIndexOutOfBoundsException. Swift's ReadBuffer.readVarint() dereferences pointer.pointee before validating that a byte exists, enabling out-of-bounds reads. Nested-message and packed-repeated decoders compute end pointers before proving the buffer contains the requested bytes. Size-delimited decoders convert untrusted UInt64 sizes to Int without overflow checking, risking traps on platforms where the value is unrepresentable. The fix enforces a uniform invariant: every decoded byte count must be non-negative and must fit within the current logical message boundary before any cursor, pointer, allocation, or slice is advanced. Patches: Kotlin (6.4.5, 7.0.0-alpha04), Swift runtime hardened in PR #3635.
Affected products
- Square Wire 6.4.4 and earlier; 7.0.0-alpha01 to 7.0.0-alpha03
Identifiers
- CVE-2026-63126
- GHSA-9rm7-3qhh-h2mc
Timeline
- 2026-09-17: disclosed
- 2026-07-14: advisory: CVE-2026-63126 published
- 2026-09-17: patched: Patched in Wire 6.4.5 and 7.0.0-alpha04 via commit 25ebcabb9ab7f12d1d77af75ecbc51726fddc015 (PR #3635)