
Exploit de prueba de concepto para la ejecución de código arbitrario a través del esquema de URI DCP de Real Player, aprovechando la colocación de archivos y la omisión del control ActiveX.
Vulnerabilidad de ejecución remota de código arbitrario en el URI 'DCP://' de Real Player
Vídeo demo: https://youtu.be/AMODp3iTnqY
El esquema de URI 'DCP://' es un protocolo interno utilizado por Real Player para recuperar URL que mostrar en la pestaña del navegador del reproductor. Significa 'Data Cache Protocol' (Protocolo de caché de datos). Recuperará archivos de '%appdata%\real\realplayer'. Estos archivos son simples archivos '.ini' con el siguiente código:
El atributo 'offlineurl' parece ignorarse; sin embargo, es posible pasar URL arbitrarias, incluidas URL a archivos locales y URI 'Javascript:' no seguras.
Ejemplo: dcp://custom.ini
Esto potencialmente crea una condición universal de Cross Site Scripting (uXSS).
Real Player utiliza la funcionalidad de Microsoft Internet Explorer y expone propiedades y métodos a través de un medio especial específico de la aplicación:
El objeto 'external' expone varios métodos y propiedades personalizados.
No es posible recuperar archivos remotos, pero es posible usar directorios padre (..) para recuperar los archivos. Para ello podemos usar el método 'external::OpenURLInPlayerBrowser()'
Al combinar este problema con un problema de plantado de archivos (file planting) con el método 'external::RecordClip()', podemos plantar archivos '.ini' válidos (aunque sin extensión) en una ubicación predecible:
'Videos\RealPlayer Downloads'.
Al plantar 2 archivos y referenciarlos después mediante un URI 'DCP://', es posible referenciar una URL que pertenezca a un dominio arbitrario o a una "zona de seguridad" (zonas de seguridad de Windows) y luego inyectar código JavaScript.
El PoC utiliza código que consigue que el aviso de controles ActiveX no seguros sea "neutralizado" y ejecute MSHTA apuntando al segundo archivo, que tiene código para ejecutar 'cmd.exe'. Podría contener, por ejemplo, un EXE incrustado.
Para reproducir este problema, todo lo que necesitas es editar los archivos y reemplazar '%server%' por el nombre de host o IP real del servidor. También reemplaza '%username%' por el nombre de usuario real de Windows del objetivo en los archivos 'dcp1.txt' y 'rp_dcp.htm'
Nota: El nombre de usuario de Windows puede obtenerse mediante solicitudes a un servidor SMB o WebDAV.
Versiones afectadas: 16.0.3.51, Cloud 17.0.9.17, v.20.0.7.309 en cualquier versión de Windows (XP hasta 11)