Preorder drugiego tomu książki sekuraka: Wprowadzenie do bezpieczeństwa IT. -15% z kodem: sekurak-book
CVE-2022-0337 – podatność w Chrome warta ~45000zł, namierzona przez Maćka Pulikowskiego
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 przypadku ‘maciej-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)
Brawo Maciek :)
Brawo Maciek tylko szkoda ze sprzedales sie za jakies grosze ale coz twoj wybor