CVE-2026-78551
WysokieCVSS 8.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 34 - wyżej niż 34% wszystkich znanych CVE
Streszczenie
Podatność w RansomLook umożliwia nieuwierzytelnionemu atakującemu enumerację nazw użytkowników, nieograniczone ataki siłowe na hasła oraz potencjalne wyczerpanie zasobów aplikacji. Problem wynika z różnic w czasie odpowiedzi dla istniejących i nieistniejących nazw użytkowników oraz braku ograniczeń liczby nieudanych prób logowania.
Ocena ryzyka
Atakujący może zdobyć listę ważnych kont, przeprowadzić ataki brute-force lub słownikowe, a także przeciążyć aplikację, powodując odmowę usługi (DoS) dla wszystkich użytkowników.
Rekomendacja
Należy natychmiast zaktualizować RansomLook do wersji zawierającej poprawki: zawsze wykonuj weryfikację hasła z losowym hasłem dla nieistniejących użytkowników, wdróż limit prób logowania (5 prób w 5 minut, blokada na 1 godzinę) oraz skonfiguruj zaufane nagłówki X-Forwarded-For.
Inne podatności w RansomLook
Zobacz wszystkie- CVE-2026-78555Krytyczne
RansomLook ujawniał pełne klucze API w źródle HTML uwierzytelnionej strony administracyjnej /admin/apikeys. Interfejs pokazywał tylko skróconą reprezentację klucza, ale pełny token był osadzony w ukrytych polach formularza używanych do akcji włączania/wyłączania, dostępu prywatnego i usuwania.
- CVE-2026-78387Krytyczne
RansomLook zawiera słabość autoryzacji w internetowym edytorze konfiguracji dostępnym przez punkt końcowy /admin/config. Punkt końcowy wymaga uwierzytelnionej sesji, ale nie przeprowadza jawnej kontroli uprawnień administratora przed umożliwieniem dostępu do funkcji zarządzania konfiguracją. Uwierzytelniony użytkownik o niskich uprawnieniach może modyfikować plik config/generic.json, zmieniając ustawienia powiadomień, LDAP, SMTP i ogólne ustawienia aplikacji.
- CVE-2026-78372Krytyczne
RansomLook nie egzekwuje spójnie kontroli autoryzacji przy dostępie do grup, rynków i notatek okupu oznaczonych jako prywatne. Nieuwierzytelniony lub nieautoryzowany zdalny atakujący może uzyskać dostęp do informacji związanych z prywatnymi encjami przez kilka widoków internetowych i punktów końcowych API. Funkcjonalność /compare może być również zapytana bezpośrednio z nazwą prywatnej encji, umożliwiając nieautoryzowanemu użytkownikowi pobranie informacji takich jak liczba postów, sumy luster i czas działania, nawet gdy encja jest wykluczona z normalnego interfejsu użytkownika.
- CVE-2026-78370Krytyczne
RansomLook zawiera wadę autoryzacji w starszej funkcji eksportu bazy danych, która może pozwolić nieuwierzytelnionym zdalnym użytkownikom na pobranie informacji przeznaczonych do pozostania prywatnymi. Punkt końcowy /export/<database> umożliwia eksport wybranych wewnętrznych baz danych bez wymagania uwierzytelnienia. Chociaż dla niektórych baz encji wykonywane jest ograniczone filtrowanie, inne eksportowalne bazy są zwracane bezpośrednio bez spójnego stosowania ograniczeń dostępu do prywatnych encji. W rezultacie informacje związane z grupami, rynkami, postami lub innymi rekordami oznaczonymi jako prywatne mogą być zawarte w eksporcie dostępnym dla nieuwierzytelnionego żądającego.
- CVE-2026-78553Wysokie
RansomLook utworzył klucz podpisywania sesji Flask bez ograniczenia uprawnień pliku, co skutkuje uprawnieniami takimi jak 0644. Inni lokalni użytkownicy mogą odczytać sekret kryptograficzny, co pozwala na generowanie ważnych ciasteczek sesyjnych i podszywanie się pod uwierzytelnionych użytkowników, w tym administratora.
- CVE-2026-78391Wysokie
RansomLook zawiera podatność na trwały atak XSS w widoku szczegółów portfela kryptowalut. Adresy kryptowalut i nazwy blockchainów pochodzące z zewnętrznych źródeł, w tym publicznego feedu ransomwhe.re, były przechowywane bez wystarczającej walidacji i osadzane bezpośrednio w atrybucie onclick JavaScript. Mimo zastosowania autoescapingu Jinja, dane niezaufane umieszczone w stringu JavaScript wewnątrz atrybutu HTML mogły zostać zdekodowane przez parser HTML i wykonane jako kod.
- CVE-2026-78386Wysokie
RansomLook ujawnia wrażliwą konfigurację skrobania po stronie operatora przez nieuwierzytelnione odpowiedzi API. Rekordy lokalizacji związane z grupami ransomware i rynkami są zwracane prawie w całości nieuwierzytelnionym wywołującym, jeśli lokalizacja nie jest oznaczona jako prywatna. Rekordy te mogą zawierać wewnętrzne pola, takie jak nagłówki uwierzytelniające, ciasteczka sesji, skrypty inicjujące i szczegóły środowiska przeglądarki.
- CVE-2026-78385Wysokie
RansomLook zawiera niewystarczającą walidację zasobów w funkcji generowania analiz PDF. Dokumenty analiz są konwertowane z Markdown do HTML i przekazywane do WeasyPrint w celu renderowania PDF. Przed poprawką WeasyPrint używał domyślnego pobieracza URL, co pozwalało na nieograniczone rozwiązywanie referencji do zasobów zawartych w analizie.
- CVE-2026-78381Wysokie
RansomLook zawiera podatność typu path traversal w obsłudze pola screen powiązanego z postami grupowymi. Handler API GroupPost.get łączy wartość screen kontrolowaną przez bazę danych bezpośrednio z katalogiem source/ aplikacji i otwiera wynikową ścieżkę bez weryfikacji, czy rozwiązany plik pozostaje w zamierzonym katalogu. Złośliwa instancja nadrzędna może dostarczyć sekwencje traversal, takie jak ../config/generic.json, co prowadzi do odczytu dowolnych plików.
- CVE-2026-78380Wysokie
Podatność w RansomLook polega na braku egzekwowania ustawień prywatności grup i rynków ransomware podczas dystrybucji nowo zebranych postów ofiar do zewnętrznych kanałów powiadomień. Logika po przetworzeniu sprawdza tylko, czy pojedynczy post jest oznaczony jako prywatny, ale nie weryfikuje, czy grupa lub rynek, do którego post należy, jest skonfigurowany jako prywatny. W rezultacie informacje o ofiarach z prywatnych grup lub rynków mogą być automatycznie publikowane przez włączone kanały Rocket.Chat, Mastodon, Bluesky i e-mail, a także dodawane do publicznego feedu MISP.
Oryginalny opis (angielski, źródło NVD)
RansomLook contains multiple weaknesses in its authentication endpoint that allow an unauthenticated remote attacker to enumerate valid usernames, perform unrestricted password-guessing attacks, and potentially exhaust application worker resources. For local authentication, the login implementation previously checked whether a submitted username existed before invoking the password hash verification function. Requests containing a nonexistent username therefore returned significantly faster than requests for valid accounts, for which the computationally expensive password verification routine was executed. A remote attacker could measure these response-time differences to determine which usernames correspond to valid RansomLook accounts. In addition, the /login endpoint did not restrict the number or frequency of failed authentication attempts. An attacker could consequently perform password brute-force, dictionary, password-spraying, or credential-stuffing attacks against known accounts without server-side throttling. For valid usernames, each authentication attempt also invokes the password key-derivation function, which consumes a significant amount of CPU time. A sufficiently high rate of login attempts could therefore occupy the application's synchronous Gunicorn workers and cause a denial of service affecting the entire application. The issue has been addressed by always performing password verification using a randomly generated dummy password hash when the supplied username does not exist, eliminating the username-dependent timing discrepancy. Failed authentication attempts are additionally rate-limited per client IP address using Valkey/Redis, with five failed attempts within five minutes resulting in a one-hour block. The reverse-proxy configuration was also updated so that the application derives the client address from a trusted X-Forwarded-For value that cannot be overridden by a client-supplied header.

