
Plex media server lokale Privilegieneskalation poc - CVE-2021-42835
Plex Media Server für Windows vor Version 1.25.0.5282 ist anfällig für Time-Of-Check-Time-Of-Use (TOCTOU), was es Benutzern mit niedrigen Privilegien ermöglicht, SYSTEM-Privilegien zu erlangen.
Tomer Peled, Netanel Cohen und Amir Shen, Sicherheitsforscher von BugSec.
Plex für Windows verwendet PlexUpdateService.exe, um neue Updates zu installieren. Der Dienst läuft im SYSTEM-Kontext. Bei der Installation eines Updates überprüft der Dienst zuerst die Dateiintegrität und die digitale Signatur; nur wenn die Prüfungen erfolgreich waren, wird das Update installiert.
Bei diesem Prozess gab es nach der Integritäts- und Signaturprüfung einen Designfehler, der die Update-Datei unsachgemäß behandelte. Die Datei wurde geschlossen und später zur Installation wieder geöffnet.
Diese Schwachstelle erlaubt es einem Angreifer, die Update-Datei durch eine bösartige auszutauschen, sobald der Dienst die Integritäts- und Signaturprüfung abgeschlossen hat, was zur Codeausführung im SYSTEM-Kontext führt.
Dieser POC verwendet Tools, die von James Forshaw mit geringfügigen Änderungen entwickelt wurden. Das Original finden Sie hier - https://github.com/googleprojectzero/symboliclink-testing-tools
Um dies zu erreichen, haben wir einen Junction-Ordner verwendet, der zuerst auf einen Ordner mit einer gültigen Update-Datei zeigt und dann auf einen Ordner mit der bösartigen Datei umgeschaltet wird.
Wir haben festgestellt, dass die Dateizugriffsreihenfolge wie folgt war:
Wir haben einen Mountpunkt im Junction-Ordner erstellt, der auf einen Ordner mit der gültigen Update-Datei zeigt. Setzen Sie einen opLock auf cacert.pem mit einer Callback-Funktion. Sobald darauf zugegriffen wird, ändern wir den Mountpunkt auf den bösartigen Ordner.
Zusätzlich haben wir einen RPC-Client erstellt, der das Update auslöst.
PlexClient/PlexClient.cpp replace ROOTDIR with your path.
const wchar_t* pszString = L"<ROOTDIR>\\PlEXcalaison\\TOCTOU\\junction\\plex.exe"; // Path to the update file.
PlEXcalaison/BaitAndSwitch/BaitAndSwitch.cpp replace ROOTDIR with your path.
static LPCWSTR junction = L"<ROOTDIR>\\PlEXcalaison\\TOCTOU\\junction"; // Path to junction folder , MAKE SURE IT IS EMPTY !
static LPCWSTR target1 = L"<ROOTDIR>\\PlEXcalaison\\TOCTOU\\valid"; // Path to folder contains the valid update file.
static LPCWSTR target2 = L"<ROOTDIR>\\PlEXcalaison\\TOCTOU\\malicious"; // Path to folder contains the malicious file - MUST BE THE SAME NAME AS THE UPDATE FILE.
static LPCWSTR cacert = L"C:\\Program Files (x86)\\Plex\\Plex Media Server\\Resources\\cacert.pem"; // Path to cacert.pem - can be found in plex directory.
https://ir-on.io/2021/12/02/local-privilege-plexcalation/
https://forums.plex.tv/t/security-regarding-cve-2021-42835/761510