Biblioteka Refit dla .NET Core, Xamarin i .NET jest podatna na CRLF injection poprzez atrybuty nagłówków HTTP (Header, HeaderCollection, Authorize). Podatność umożliwia wstrzyknięcie dodatkowych nagłówków HTTP lub przemyt całych żądań, co w aplikacjach webowych prowadzi do SSRF.
▸ Pokaż oryginał (EN)
Refit is an automatic type-safe REST library for .NET Core, Xamarin and .NET The various header-related Refit attributes (Header, HeaderCollection and Authorize) are vulnerable to CRLF injection. The way HTTP headers are added to a request is via the `HttpHeaders.TryAddWithoutValidation` method. This method does not check for CRLF characters in the header value. This means that any headers added to a refit request are vulnerable to CRLF-injection. In general, CRLF-injection into a HTTP header (when using HTTP/1.1) means that one can inject additional HTTP headers or smuggle whole HTTP requests. If an application using the Refit library passes a user-controllable value through to a header, then that application becomes vulnerable to CRLF-injection. This is not necessarily a security issue for a command line application like the one above, but if such code were present in a web application then it becomes vulnerable to request splitting (as shown in the PoC) and thus Server Side Request Forgery. Strictly speaking this is a potential vulnerability in applications using Refit and not in Refit itself. This issue has been addressed in release versions 7.2.22 and 8.0.0 and all users are advised to upgrade. There are no known workarounds for this vulnerability.
Atrybuty nagłówkowe Refit dodają wartości do żądań HTTP za pomocą metody `HttpHeaders.TryAddWithoutValidation`, która nie weryfikuje obecności znaków CRLF (\r\n) w przekazywanych wartościach. Jeśli aplikacja przekazuje do nagłówka wartość kontrolowaną przez użytkownika, atakujący może osadzić w niej sekwencję CRLF, co pozwala na dołączenie dowolnych nagłówków lub podzielenie żądania HTTP (request splitting). W protokole HTTP/1.1 taki atak może skutkować przemytem całych żądań HTTP do serwera docelowego lub serwerów pośrednich.
Atakujący może wstrzykiwać arbitralne nagłówki HTTP do wychodzących żądań, realizować request splitting oraz przeprowadzać ataki typu Server Side Request Forgery (SSRF), uzyskując dostęp do zasobów wewnętrznych niedostępnych bezpośrednio z zewnątrz.
Należy zaktualizować bibliotekę Refit do wersji 7.2.22 lub 8.0.0, w których problem został naprawiony. Producent wskazuje, że nie istnieją znane obejścia tej podatności – jedynym zalecanym działaniem jest aktualizacja.
Biblioteka Refit dla .NET Core, Xamarin i .NET – wszystkie wersje poprzedzające 7.2.22 oraz 8.0.0, w których stosowane są atrybuty Header, HeaderCollection lub Authorize z wartościami pochdzącymi od użytkownika.
Podatność sama w sobie dotyczy aplikacji korzystających z biblioteki Refit, które przekazują do nagłówków HTTP wartości kontrolowane przez użytkownika – nie każda aplikacja używająca Refit jest automatycznie narażona. Aplikacje konsolowe są zagrożone w mniejszym stopniu niż aplikacje webowe.
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/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