Pół roku temu, 9 lipca 2020 roku, w usługach przekazywania opinii Google została odkryta luka, którą dopiero niedawno Google oficjalnie ogłosiło i załatało. Badaczem podatności odpowiedzialnym za znalezisko jest Sreeram KL, który w ramach programu Google Vulnerability Reward otrzymał narodę 3133 USD.
Podatność mogła być wykorzystywana przez cyberprzestępców do potencjalnej kradzieży zrzutów ekranu poufnych dokumentów Google Docs tylko przez osadzanie linków do nich w złośliwej witrynie.

Wiele produktów Google, w tym Dokumenty, jest wyposażonych w opcję „Prześlij opinię” lub „Pomoc w ulepszaniu Dokumentów”, która umożliwia użytkownikom przesyłanie opinii wraz z opcją dołączenia zrzutu ekranu – usługa, która jest automatycznie ładowana do zgłoszenia w celu wyróżnienia określonych problemów.

Jednak zamiast powielać tę samą funkcjonalność w swoich usługach, funkcja „feedback” jest wdrażana w głównej witrynie Google („www.google.com”) i integrowana z innymi domenami za pośrednictwem elementu iframe, który ładuje zawartość wyskakującego okienka z “feedback.googleusercontent.com.”


Na czym polega problem?

Wyobraźmy sobie, że korzystamy z Dokumentów Google i zamierzamy przesłać opinie. W tym celu należy kliknąć opcję „Pomoc” -> „Prześlij opinię”. Następnie zobaczymy wyskakujący iframe i magicznie ładujący zrzut ekranu dokumentu, nad którym pracowaliśmy. Ponieważ źródło iframe (www.google.com) różni się pochodzeniem w dokumentach Google (docs.google.com), aby pomyślnie wyrenderować zrzut ekranu, musi istnieć komunikacja między źródłami. PostMessage, wkracza do gry! Przepływ pracy jest taki, że dokumenty Google wysyłają wartości RGB wszystkich swoich pikseli do głównej ramki iframe www.google.com za pośrednictwem PostMessage, która przekierowuje te wartości RGB do jego iframe feedback.googleusercontent.com, który następnie renderuje obraz z przesłanych pikseli i odsyła swój kod URI zakodowany w base64 do głównego elementu iframe. Wszystko widać na poniższym obrazku.

Po zakończeniu tego procesu musimy napisać opis opinii, a po kliknięciu wyślij opis wraz ze zdjęciem (data-uri) jest wysyłany za pomocą PostMessage na adres https://www.google.com.

Jednak „łowca bugów” Sreeram zidentyfikował błąd w sposobie przekazywania takich wiadomości do „feedback.googleusercontent.com”, umożliwiając w ten sposób atakującemu zmianę ramki na dowolną, zewnętrzną witrynę internetową, a następnie kradzież i przejęcie zrzutów ekranu z dokumentów, które były przeznaczone do przesłania na serwery Google.

Wada wynika z braku nagłówka X-Frame-Options w domenie Google Docs, co umożliwiło zmianę docelowego pochodzenia wiadomości i wykorzystanie komunikacji między źródłami między stroną a zawartą w niej ramką.


Na czym polega problem?

Chociaż atak wymaga pewnej formy interakcji użytkownika – np. kliknięcia przycisku „Wyślij opinię”, exploit może z łatwością wykorzystać tę słabość do przechwycenia adresu URL przesłanego zrzutu ekranu i przeniesienia go do złośliwej witryny.

Można to osiągnąć, osadzając plik Dokumentów Google w ramce iFrame w fałszywej witrynie internetowej i przechwycić wyskakującą ramkę z informacją zwrotną w celu przekierowania zawartości do domeny wybranej przez atakującego.

Rada dla deweloperów pod kątem bezpieczeństwa jest prosta – Zawsze określaj dokładne miejsce docelowe wiadomości, kiedy używasz PostMessage i nie stosuj znaku „*” do wysyłania danych do innych okien. Złośliwa witryna może zmienić lokalizację okna bez Twojej wiedzy, a co za tym idzie, przechwycić przekazywaną wiadomość.

Podziel się z innymi tym artykułem!