Biblioteka rpcx w wersji do 1.9.3 zawiera podatność typu denial-of-service wynikającą z braku limitu rozmiaru dekompresowanych danych w protokole komunikacyjnym. Nieuprawniony atakujący może wysłać spreparowaną wiadomość skompresowaną gzip, która po dekompresji zajmuje gigabajty pamięci, doprowadzając serwer do awarii.
▸ Pokaż oryginał (EN)
rpcx through 1.9.3, fixed in commit 047aec1, contains a denial-of-service vulnerability in protocol.Message.Decode (protocol/message.go). When a message has the compression flag set, the payload is gzip-decompressed via util.Unzip with no limit on the decompressed output size. The only built-in size guard, protocol.MaxMessageLength, is checked against the compressed on-the-wire frame length, not the decompressed size, so it provides no protection. Because decoding (and decompression) occurs in readRequest before authentication, a single unauthenticated connection can send a small (under 2 MB) gzip-compressed message that expands to gigabytes of heap allocation, leading to out-of-memory conditions and service unavailability.
Gdy wiadomość przesyłana przez sieć ma ustawioną flagę kompresji, funkcja protocol.Message.Decode wywołuje util.Unzip bez żadnego limitu na rozmiar danych wyjściowych po dekompresji. Jedyne istniejące zabezpieczenie rozmiaru (protocol.MaxMessageLength) sprawdzane jest wyłącznie względem rozmiaru skompresowanej ramki sieciowej, a nie względem rozmiaru po dekompresji, przez co nie stanowi żadnej realnej ochrony. Co kluczowe, dekompresja zachodzi w funkcji readRequest jeszcze przed weryfikacją tożsamości klienta, co oznacza że dowolne nieuprawnione połączenie może wysłać wiadomość o rozmiarze poniżej 2 MB, która po dekompresji zajmuje gigabajty sterty (heap), prowadząc do wyczerpania pamięci (out-of-memory) i niedostępności usługi.
Atakujący bez żadnego uwierzytelnienia może doprowadzić do wyczerpania pamięci operacyjnej serwera i całkowitej niedostępności usługi (DoS). Atak może zostać przeprowadzony pojedynczym pakietem sieciowym.
Należy zaktualizować bibliotekę rpcx do wersji zawierającej commit 047aec18efa7d037105e2b72c36dd2ae05e1acc6 lub nowszej. Szczegóły dostępne w referencjach producenta na GitHub (issue #942, pull request #943).
Biblioteka rpcx w wersjach do 1.9.3 włącznie (poprawka wprowadzona w commicie 047aec1)
Podatność sklasyfikowana jako CWE-409 (Improper Handling of Highly Compressed Data — compression bomb). Atak nie wymaga uwierzytelnienia ani interakcji użytkownika (AV:N, PR:N, UI:N). Poprawka dostępna w repozytorium GitHub projektu smallnest/rpcx.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X