Biblioteka Wire do obsługi gRPC i protocol buffers nie weryfikuje, czy długość pola typu LENGTH_DELIMITED jest nieujemna przed wywołaniem skip(). Atakujący może przesłać spreparowany payload protobuf, powodując crash usługi (DoS).
▸ Pokaż oryginał (EN)
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.
Funkcje ByteArrayProtoReader32.skipGroup() oraz ProtoReader.skipGroup() w module wire-runtime akceptują zakodowaną przez varint wartość -128 jako poprawną długość pola LENGTH_DELIMITED. Wywołanie skip(-128) powoduje przesunięcie wewnętrznego wskaźnika pozycji na wartość ujemną. Kolejne wywołanie readByte() rzuca wyjątek ArrayIndexOutOfBoundsException zamiast oczekiwanego IOException lub ProtocolException. Skutkuje to niekontrolowanym zakończeniem działania usług korzystających z ProtoAdapter.decode(byte[]) przy przetwarzaniu niezaufanych danych wejściowych.
Atakujący bez uwierzytelnienia może doprowadzić do odmowy usługi (DoS) poprzez crash aplikacji lub usługi przetwarzającej niezaufane wiadomości protobuf. Nie stwierdzono wpływu na poufność ani integralność danych.
Należy zaktualizować bibliotekę Wire do wersji 6.3.0 lub 7.0.0-alpha03, w których wprowadzono walidację nieujemności długości pola przed wywołaniem skip(). Patche dostępne są w referencjach producenta na GitHub.
Biblioteka Wire (square/wire) w wersjach prior to 6.3.0 oraz prior to 7.0.0-alpha03 — dotyczy komponentu wire-runtime na platformach Android, Kotlin, Swift i Java.
Podatność dotyczy wyłącznie ścieżki przetwarzania niezaufanych payloadów protobuf przez ProtoAdapter.decode(byte[]). Usługi nieprzetwarzające danych od niezaufanych klientów mają obniżone ryzyko. Poprawka wprowadzona w PR #3595 i #3597 w repozytorium square/wire.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HSquareup Wire
APPSquareup7.0.0< 6.3.0
Powiązane podatności
XXE w Squareup Retrofit umożliwiające odczyt plików i SSRF
Command injection w Squareup git-fastclone — wykonanie dowolnych poleceń
Square Retrofit version versions from (including) 2.0 and 2.5.0 (excluding) contains a Directory Traversal vul...
git-fastclone before 1.0.1 permits arbitrary shell command execution from .gitmodules. If an attacker can inst...
A flaw was found in Red Hat's AMQ-Streams, which ships a version of the OKHttp component with an information d...