W Eclipse Jetty w wersjach 9.4.27.v20200227 do 9.4.29.v20200521 błędna obsługa zbyt dużych nagłówków odpowiedzi HTTP powoduje dwukrotne zwolnienie tego samego bufora pamięci (ByteBuffer). W efekcie dane należące do jednego klienta mogą zostać odczytane przez innego klienta, co stanowi poważne zagrożenie dla poufności.
▸ Pokaż oryginał (EN)
In Eclipse Jetty, versions 9.4.27.v20200227 to 9.4.29.v20200521, in case of too large response headers, Jetty throws an exception to produce an HTTP 431 error. When this happens, the ByteBuffer containing the HTTP response headers is released back to the ByteBufferPool twice. Because of this double release, two threads can acquire the same ByteBuffer from the pool and while thread1 is about to use the ByteBuffer to write response1 data, thread2 fills the ByteBuffer with other data. Thread1 then proceeds to write the buffer that now contains different data. This results in client1, which issued request1 seeing data from another request or response which could contain sensitive data belonging to client2 (HTTP session ids, authentication credentials, etc.). If the Jetty version cannot be upgraded, the vulnerability can be significantly reduced by configuring a responseHeaderSize significantly larger than the requestHeaderSize (12KB responseHeaderSize and 8KB requestHeaderSize).
Gdy Jetty napotyka zbyt duże nagłówki odpowiedzi HTTP, rzuca wyjątek generujący błąd HTTP 431, a używany ByteBuffer zostaje zwolniony z powrotem do puli ByteBufferPool dwukrotnie (double release, CWE-672/CWE-675). Ponieważ ten sam bufor trafia dwukrotnie do puli, dwa różne wątki mogą jednocześnie pobrać ten sam obiekt ByteBuffer. Wątek pierwszy przystępuje do zapisu danych odpowiedzi pierwszego klienta, jednak w tym czasie wątek drugi nadpisuje zawartość bufora swoimi danymi. W rezultacie wątek pierwszy wysyła klientowi pierwszemu dane należące do zupełnie innego żądania lub odpowiedzi.
Atakujący lub nieuprawniony klient może odczytać wrażliwe dane należące do innych użytkowników, w tym identyfikatory sesji HTTP, dane uwierzytelniające oraz inne informacje przesyłane w nagłówkach i treści odpowiedzi. Możliwe jest również nieautoryzowane przejęcie sesji innych użytkowników.
Należy zaktualizować Eclipse Jetty do wersji wyższej niż 9.4.29.v20200521, w której błąd został naprawiony. Jeśli aktualizacja nie jest możliwa, producent zaleca jako obejście skonfigurowanie parametru responseHeaderSize na wartość znacznie wyższą niż requestHeaderSize (np. responseHeaderSize=12KB przy requestHeaderSize=8KB), co istotnie ogranicza ryzyko wystąpienia podatności.
Eclipse Jetty w wersjach 9.4.27.v20200227 do 9.4.29.v20200521
Producent udostępnił oficjalne obejście (workaround) polegające na zwiększeniu responseHeaderSize względem requestHeaderSize, dedykowane dla środowisk, w których natychmiastowa aktualizacja nie jest możliwa. Szczegóły błędu dostępne w Eclipse Bugzilla pod numerem 564984.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:LEclipse Jetty
APPEclipse9.4.279.4.289.4.29
Powiązane podatności
Eclipse Jetty — pominięcie autoryzacji przez HTTP Request Smuggling
Eclipse Jetty: integer overflow w parsowaniu chunk length — obejście autoryzacji
Eclipse Jetty: ominięcie zabezpieczeń przez nieprawidłową normalizację ścieżek URL (Windows)
The HTTP/2 protocol allows a denial of service (server resource consumption) because request cancellation can ...
Eclipse Jetty: Błędne kodowanie hasła w Digest auth umożliwia obejście uwierzytelnienia