CVE-2023-24055 - błąd czy feature?

Przykład użycia systemu triggerów w KeePass do automatycznego eksportu haseł użytkownika.

Opublikowano 25.01.2023 17:44

TL;DR: Jeżeli atakujący posiada dostęp do pliku konfiguracyjnego KeePass.config.xml może użyć złośliwego triggera do eksportu haseł użytkownika.

To udokumentowana funkcja KeePassa a nie żaden nowy błąd. Jeśli ktoś ma dostęp do Twojego komputera - to masz przechlapane. I żaden menadżer haseł tutaj nie pomoże.

Triggery

Triggery to funkcja KeePassa, która pozwala na automatyzowanie niektórych czynności.

  • Możesz w ten sposób automatycznie wysłać kopię bazy do chmury po każdej zmianie.
  • Możesz automatycznie zapisywać plik z bazą gdy coś zmienisz.
  • Możesz wyeksportować zawartość bazy do jakiegoś pliku.

Spróbujmy wykorzystać tą ostatnią funkcję i stwórzmy swój własny pierwszy "exploit".

GUI

  1. Przechodzimy do zakładki Tools->Triggers.
  2. Kliknij przycisk Add.
  3. Nazwij swój złośliwy trigger.
  4. Przejdź do zakładki Events. Kliknij Add.
  5. Chcemy aby baza była eksportowana przy otwarciu. Wybieramy więc Opened database file.
  6. Przejdź do zakładki Actions. Kliknij Add.
  7. Wybierz Export active database. W polu File podaj ścieżkę gdzie chcesz zapisać wyeksportowane hasła. Jako File format podaj KeePass CSV (1.x).
  8. Zapisz zmiany i wyłącz KeePassa.
  9. Uruchom go ponownie i podaj hasło główne. W tym momencie na dysku pojawi się plik C:\test\bug.csv z Twoimi hasłami.
"Account","Login Name","Password","Web Site","Comments"
"Mój blog","kacper","moje_tajne_haslo","",""

Czy to błąd?

POC dla CVE-2023-24055 zawiera dodatkową akcję - wysłanie zawartości pliku na zewnętrzny serwer przy pomocy powershella. To po prostu użycie triggera execute command line. To też da się "wyklikać" z GUI.

Jeśli ktoś może modyfikować pliki na Twoim dysku to równie dobrze może zmienić zawartość KeePass.exe. A zmodyfikowana wersja programu może być złośliwa i nie trzeba do tego wykorzystywać pliku z konfiguracją.

Błąd został zgłoszony do twórców. Cały wątek znajdziesz tutaj.

  1. To nie jest nowa technika. Udało mi się znaleźć wpis z 2016 roku gdzie ktoś opisywał bardzo podobne wykorzystanie triggerów.
  2. Istnieje wątek z 2022 gdzie użytkownicy proszą o stworzenie specjalnej wersji programu bez niektórych opcji. Autor odmówił i opublikował plik KeePass.config.enforced.xml, który pozwala na wyłączenie niektórych opcji.
  3. W dokumentacji znajduje się ostrzeżenie, że osoba posiadająca możliwość zapisu pliku konfiguracyjnego może go zmodyfikować w złym celu.
  4. Jeśli ktoś może modyfikować pliki na Twoim komputerze - to masz problem. Jeśli może je edytować to równie dobrze może je kopiować/wysyłać/kasować.
  5. Menadżer nie chroni przed wszystkimi atakami. Jeśli ktoś ma fizyczny dostęp do Twojego komputera to menadżer nie pomoże. Nawet jeśli nie użyje techniki opisywanej w tym wpisie może użyć innej. Zainstalować keylogger - czyli oprogramowanie monitorujące wciśnięte klawisze. Albo program, który sprawdza co kopiujesz do schowka. Pomysłów jest wiele.

Co robić

  1. Możesz użyć Enforced Configuration. Zapisujesz plik KeePass.config.enforced.xml w miejscu z uprawnieniami tylko do odczytu. Wtedy zmienienie konfiguracji nie jest takie proste. Bo jeśli nie masz uprawnień do zapisu - to nie zmienisz treści pliku. Ale warto pamiętać, że użytkownik może pobrać wersję portable i uruchomić ją z innego katalogu. Wtedy uruchomi się jego konfiguracja - a nie Twoja.
  2. W konfiguracji możesz wyłączyć triggery, pluginy i tłumaczenia:
<?xml version="1.0" encoding="utf-8"?>
<Configuration xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Application>
        <LanguageFile />
        <TriggerSystem>
            <Enabled>false</Enabled>
        </TriggerSystem>
    </Application>
    <Security>
        <Policy>
            <Plugins>false</Plugins>
        </Policy>
    </Security>
</Configuration>
  1. W Options->policy możesz odznaczyć Export - No Key Repeat. Teraz gdy ktoś spróbuje wyeksportować zawartość bazy przy pomocy triggerów - zostaniesz poproszony o hasło główne jeszcze raz.
  2. Jeśli nie używasz eksportu - możesz całkowicie wyłączyć tą funkcję odznaczając checkbox Export. Chociaż to nic nie zmienia. Bo atakujący może stworzyć trigger, który ściągnie i uruchomi inny złośliwy plik - no chyba, że je wyłączyłeś. Patrz punkt 1.

#bledy