
Plex media server escalada de privilegios local poc - CVE-2021-42835
Plex Media Server para Windows anterior a la versión 1.25.0.5282, vulnerable a Time Of Check Time Of Use (TOCTOU) que permite a usuarios con pocos privilegios obtener privilegios de SYSTEM.
Tomer Peled, Netanel Cohen y Amir Shen, investigadores de seguridad de BugSec.
Plex para Windows usa PlexUpdateService.exe para instalar nuevas actualizaciones. El servicio se ejecuta en el contexto de SYSTEM. Al instalar una actualización, el servicio primero verifica la integridad del archivo y la firma digital, solo si las comprobaciones son exitosas se instalará la actualización.
En este proceso, después de la verificación de integridad y firma, hubo un fallo de diseño que manejaba el archivo de actualización de manera incorrecta. El archivo se cerraba y se reabría más tarde para la instalación.
Esta falla permite a un atacante intercambiar el archivo de actualización por uno malicioso tan pronto como el servicio termina de verificar la integridad y la firma, lo que resulta en ejecución de código en el contexto de SYSTEM.
Este PoC utiliza herramientas desarrolladas por James Forshaw con ligeras modificaciones. El original se puede encontrar aquí - https://github.com/googleprojectzero/symboliclink-testing-tools
Para lograr lo anterior, utilizamos una carpeta Junction que primero apuntará a una carpeta que contiene un archivo de actualización válido y luego cambiará a una carpeta que contiene el archivo malicioso.
Encontramos que el orden de acceso a los archivos era el siguiente:
Creamos un punto de montaje en la carpeta junction para que apunte a una carpeta que contiene el archivo de actualización válido. Establecimos un opLock en cacert.pem con una función de devolución de llamada; tan pronto como se accede, cambiamos el punto de montaje a la carpeta maliciosa.
Además, creamos un cliente RPC que activará la actualización.
const wchar_t* pszString = L"<ROOTDIR>\\PlEXcalaison\\TOCTOU\\junction\\plex.exe"; // Path to the update file.
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