GWS - App Scripts
Skrypty aplikacji
Skrypty aplikacji to kod, który zostanie uruchomiony, gdy użytkownik z uprawnieniami edytora uzyska dostęp do dokumentu, z którym skrypt aplikacji jest powiązany i po zaakceptowaniu monitu OAuth. Mogą one również być ustawione do wykonywania się co jakiś czas przez właściciela skryptu aplikacji (Persistencja).
Utwórz skrypt aplikacji
Istnieje kilka sposobów tworzenia skryptu aplikacji, chociaż najczęstsze to z dokumentu Google (dowolnego typu) oraz jako samodzielny projekt:
Scenariusz skryptu aplikacji
Utwórz arkusz Google z skryptem aplikacji
Zacznij od utworzenia skryptu aplikacji, moja rekomendacja dla tego scenariusza to utworzenie arkusza Google i przejście do Rozszerzenia > Skrypty aplikacji
, co spowoduje otwarcie nowego skryptu aplikacji powiązanego z arkuszem.
Wyciek tokena
Aby udostępnić dostęp do tokenu OAuth, musisz kliknąć Usługi +
i dodać zakresy takie jak:
AdminDirectory: Dostęp do użytkowników i grup katalogu (jeśli użytkownik ma wystarczające uprawnienia)
Gmail: Dostęp do danych gmaila
Drive: Dostęp do danych dysku
Google Sheets API: Tak, aby działał z wyzwalaczem
Aby samodzielnie zmienić potrzebne zakresy, możesz przejść do ustawień projektu i włączyć: Pokaż plik manifestu "appsscript.json" w edytorze
.
Aby przechwycić żądanie, wystarczy uruchomić:
Uprawnienia żądane do wykonania skryptu aplikacji:
Wraz z zewnętrznym żądaniem, monit OAuth również poprosi o zgodę na dotarcie do zewnętrznych punktów końcowych.
Tworzenie wyzwalacza
Po odczytaniu aplikacji, kliknij ⏰ Wyzwalacze, aby utworzyć wyzwalacz. Jako funkcję wybierz getToken
, uruchamianą podczas wdrożenia Head
, w źródle zdarzenia wybierz Z arkusza kalkulacyjnego
, a typ zdarzenia wybierz Przy otwarciu
lub Przy edycji
(zgodnie z potrzebami) i zapisz.
Zauważ, że możesz sprawdzić uruchomienia skryptów aplikacji w karcie Wykonania, jeśli chcesz coś debugować.
Udostępnianie
Aby uruchomić skrypt aplikacji, ofiara musi połączyć się z dostępem Edytora.
Token używany do wykonania skryptu aplikacji będzie tym twórcy wyzwalacza, nawet jeśli plik jest otwarty jako Edytor przez innych użytkowników.
Nadużycie dokumentów udostępnionych wraz ze mną
Jeśli ktoś udostępnił ci dokument z skryptami aplikacji i wyzwalaczem korzystając z opcji Head skryptu aplikacji (a nie z wdrożeniem stałym), możesz zmodyfikować kod skryptu aplikacji (dodając na przykład funkcje kradzieży tokenów), uzyskać do niego dostęp, a skrypt aplikacji zostanie wykonany z uprawnieniami użytkownika, który udostępnił ci dokument! (zauważ, że token OAuth właściciela będzie miał zakresy dostępu określone podczas tworzenia wyzwalacza).
Powiadomienie zostanie wysłane do twórcy skryptu wskazującego, że ktoś zmodyfikował skrypt (A co powiesz na wykorzystanie uprawnień gmail do wygenerowania filtra w celu zapobieżenia alertowi?)
Jeśli atakujący zmodyfikuje zakresy skryptu aplikacji, aktualizacje nie zostaną zastosowane do dokumentu, dopóki nie zostanie utworzony nowy wyzwalacz z wprowadzonymi zmianami. Dlatego atakujący nie będzie mógł ukraść tokenu twórcy z większymi zakresami niż te, które ustawił w utworzonym przez siebie wyzwalaczu.
Kopiowanie zamiast udostępniania
Gdy tworzysz link do udostępnienia dokumentu, tworzony jest link podobny do tego: https://docs.google.com/spreadsheets/d/1i5[...]aIUD/edit
Jeśli zmienisz końcówkę "/edit" na "/copy", zamiast uzyskać do niego dostęp, Google zapyta, czy chcesz wygenerować kopię dokumentu:
Jeśli użytkownik utworzy kopię i uzyska do niej dostęp, zawartość dokumentu i skrypty aplikacji zostaną skopiowane, jednak wyzwalacze nie, dlatego nic nie zostanie wykonane.
Udostępnianie jako aplikacja internetowa
Zauważ, że możliwe jest również udostępnienie skryptu aplikacji jako aplikacji internetowej (w Edytorze skryptu aplikacji, wdroż jako aplikację internetową), ale pojawi się alert taki jak ten:
Następnie pojawi się typowy monit OAuth pytający o wymagane uprawnienia.
Testowanie
Możesz przetestować zebrany token, aby wyświetlić maile za pomocą:
Lista kalendarza użytkownika:
Skrypt aplikacji jako trwałość
Jedną z opcji trwałości byłoby utworzenie dokumentu i dodanie wyzwalacza dla funkcji getToken oraz udostępnienie dokumentu atakującemu, aby za każdym razem, gdy atakujący otworzy plik, wyciekł token ofiary.
Możliwe jest również utworzenie skryptu aplikacji i ustawienie wyzwalacza co X czasu (na przykład co minutę, godzinę, dzień...). Atakujący, który skompromitował dane uwierzytelniające lub sesję ofiary, mógłby ustawić wyzwalacz czasowy skryptu aplikacji i wyciekać bardzo uprzywilejowany token OAuth codziennie:
Po prostu utwórz skrypt aplikacji, przejdź do Wyzwalaczy, kliknij Dodaj wyzwalacz i wybierz jako źródło zdarzenia Wyzwalany czasem, a następnie wybierz opcje, które najlepiej Ci odpowiadają:
Spowoduje to wysłanie alertu bezpieczeństwa e-mailem oraz powiadomienie push na Twój telefon komórkowy o tym.
Pomijanie niezweryfikowanego monitu o udostępnionym dokumencie
Co więcej, jeśli ktoś udostępnił Ci dokument z uprawnieniami edytora, możesz generować skrypty aplikacji wewnątrz dokumentu, a WŁAŚCICIEL (twórca) dokumentu będzie właścicielem skryptu aplikacji.
Oznacza to, że twórca dokumentu będzie widoczny jako twórca dowolnego skryptu aplikacji, który ktokolwiek z uprawnieniami edytora utworzy wewnątrz niego.
Oznacza to również, że skrypt aplikacji będzie zaufany przez środowisko Workspace twórcy dokumentu.
Oznacza to również, że jeśli skrypt aplikacji już istniał i ludzie udzielili dostępu, każdy z uprawnieniami Edytora na dokumencie może go modyfikować i nadużywać tego dostępu.
Aby nadużyć tego, potrzebujesz również, aby ludzie wywołali skrypt aplikacji. I jednym sprytnym trikiem jest opublikowanie skryptu jako aplikacji internetowej. Gdy ludzie, którzy już udzielili dostępu do skryptu aplikacji, wejdą na stronę internetową, wywołają skrypt aplikacji (to również działa za pomocą tagów <img>
).
Last updated