Podatność w serwerze Centrifugo pozwala nieuwierzytelnionemu atakującemu wywołać nadmierne zużycie pamięci i CPU poprzez spreparowane skompresowane ramki WebSocket. Błąd dotyczy jednokierunkowego transportu WebSocket z włączoną kompresją i może prowadzić do odmowy usługi (DoS).
▸ Pokaż oryginał (EN)
Centrifugo is an open-source scalable real-time messaging server. Prior to 6.8.4, Centrifugo unidirectional WebSocket transport with uni_websocket.compression enabled enforced uni_websocket.message_size_limit against compressed wire-frame length in internal/websocket/conn.go advanceFrame, but ReadMessage used io.ReadAll after decompression without an output cap, allowing unauthenticated requests to /connection/uni_websocket to trigger large memory and CPU consumption. This issue is fixed in version 6.8.4.
Centrifugo sprawdzał limit rozmiaru wiadomości (uni_websocket.message_size_limit) względem długości skompresowanej ramki WebSocket w funkcji advanceFrame, jednak funkcja ReadMessage używała io.ReadAll do odczytu danych po dekompresji bez ograniczenia rozmiaru wyjściowego. Atakujący może wysłać niewielką, silnie skompresowaną ramkę do endpointu /connection/uni_websocket, która po dekompresji rozrasta się do bardzo dużych rozmiarów (atak typu zip bomb / CWE-409). Żądanie nie wymaga uwierzytelnienia, co znacznie obniża próg ataku. Skutkuje to nadmiernym zużyciem pamięci i CPU serwera.
Nieuwierzytelniony atakujący może doprowadzić do wyczerpania zasobów serwera (pamięci i CPU), powodując odmowę usługi (DoS) dla wszystkich użytkowników korzystających z instancji Centrifugo.
Należy zaktualizować Centrifugo do wersji 6.8.4 lub nowszej, w której problem został naprawiony. Jako obejście tymczasowe można wyłączyć kompresję jednokierunkowego transportu WebSocket (uni_websocket.compression).
Centrifugo w wersjach poprzedzających 6.8.4 z włączoną opcją uni_websocket.compression dla jednokierunkowego transportu WebSocket.
Podatność dotyczy wyłącznie konfiguracji z włączoną opcją uni_websocket.compression. Instalacje bez tej opcji nie są narażone. Poprawka dostępna w commicie 46d40e4ac3a5446c9745f8b219197166ae12a6e5.
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