-15% na nową książkę sekuraka: Wprowadzenie do bezpieczeństwa IT. Przy zamówieniu podaj kod: 10000

CVE-2022-0337 – podatność w Chrome warta ~45000zł, namierzona przez Maćka Pulikowskiego

02 czerwca 2022, 11:12 | W biegu | komentarze 2

Istotną podatność w przeglądarkach internetowych Google Chrome, Microsoft Edge i Opera wykrył niedawno Maciej Pulikowski. Raport na ten temat został zaakceptowany, a za zgłoszenie przekazano nagrodę w wysokości 10 000 USD, w ramach programu Google Bug Bounty. Jest to już 7 podatność w Chromium zgłoszona przez tego autora. Błąd bezpieczeństwa został załatany w Chromium 97.

Na czym polegała podatność?

CVE-2022-0337 to błąd umożliwiający wyciek systemowych zmiennych środowiskowych w przeglądarkach Google Chrome, Microsoft Edge oraz Opera działającej w  systemie operacyjnym Windows.

Zmienne środowiskowe to wartości tekstowe ustawione poza programem, w systemie operacyjnym lub w pliku konfiguracyjnym. Podatność dotyczyła tylko wartości ustawionych w systemie operacyjnym Windows. Aplikacje najczęściej przytrzymują w nich sekrety, tokeny, hasła lub ścieżki do zasobów.

Ofiara musiała wejść na stronę i po wykonaniu prostej akcji – przytrzymania entera, mogła doprowadzić do wycieku swoich sekretów trzymanych w zmiennych środowiskowych.

Poniżej możemy zobaczyć prezentacje wideo ataku:

Gdzie znajdował się błąd?

Podatność znajdowała się w File System API, a dokładnie w funkcji window.showSaveFilePicker.

Poniżej prosty przykład wywołania błędu w konsoli przeglądarki:

let a = await window.showSaveFilePicker({suggestedName:’%username%’}); a.name;

Po akceptacji zapisu pliku zostanie zwrócona wartość, która jest przetrzymywana w %username%, w tym przypadkumaciej-pc, a powinna zostać zwrócona ponownie ‘%username%’.

W podobny sposób atakujący mógł przygotować odpowiedni plik HTML, który podstępnie pobierze sekret trzymany w zmiennej środowiskowej i wyśle ją na wskazany serwer. 

Dokładny opis exploita opublikowano na:https://github.com/Puliczek/CVE-2022-0337-PoC-Google-Chrome-Microsoft-Edge-Opera

Dlaczego jest to „wysoka” luka bezpieczeństwa?

Oprócz podstawowych systemowych zmiennych środowiskowych takich jak %username%, %userdomain% czy %windir%, mogą pojawić się dodatkowe zmienne wykorzystywane przez aplikacje, np.:

  • GOOGLE_API_KEY
  • GITHUB_TOKEN 
  • BINANCE_SECRET
  • AZURE_CLIENT_SECRET
  • AWS_SECRET_ACCESS_KEY

Atakujący, dzięki pozyskaniu takich kluczy, mógłby uzyskać np. pełen dostęp do chmury Azure, AWS czy GCP albo dostęp do konta użytkownika giełdy kryptowalut binance.

Swoje zmienne środowiskowe w Windows można sprawdzić za pomocą komendy w powershellu:

dir env:

Więcej ciekawych sekretów w env znajdziemy tutaj:

https://github.com/Puliczek/awesome-list-of-secrets-in-environment-variables

Poprawka w silniku Chromium (open-source)

Maciej Pulikowski sam napisał  poprawkę do silnika Chromium (c++), która usuwała błąd, zamieniając znaki % na _ dzięki czemu winapi już nie zwracało wartości zmiennych środowiskowych. Rozwiązanie zostało przedstawione programistom z Google, a na jego podstawie napisano poprawkę, która pojawiła się w Chromium 97.

~ Maciej Pulikowski (@pulik_io)

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

  1. Kamil

    Brawo Maciek :)

    Odpowiedz
  2. Jacek

    Brawo Maciek tylko szkoda ze sprzedales sie za jakies grosze ale coz twoj wybor

    Odpowiedz

Odpowiedz na Kamil