Saludos a todos los que decidieron leer mi nuevo artículo sobre análisis de vulnerabilidad. La última vez, en una breve serie de tres artículos, hablé sobre las vulnerabilidades de Steam (
1 ,
2 y
3 ). En este artículo hablaré sobre las vulnerabilidades de un producto similar: Origin, que también es un iniciador para juegos. Las vulnerabilidades descubiertas se numeraron CVE-2019-19247 y CVE-2019-19248.

Esta vez no habrá juego con anban banana. La historia de la comunicación con la división de seguridad de Electronic Arts Inc inicialmente fue profesional. Cuando me contactaron, me dieron un número de registro, los informes fueron cuidadosamente examinados y confirmados. Ninguno de mis correos electrónicos fue ignorado, y para una pequeña discusión se organizó una confkall. El mantenimiento de estos informes fue muy simple para mí, por lo que muchas gracias a Adrian Stone, Elise Murphy y otros empleados de EA que trabajaron con mis informes.
Publicación de blog de seguridad y
asesoramiento .
Ahora a las vulnerabilidades. Encontré dos vulnerabilidades como "escalada de privilegios" (lpe - escalada de privilegios locales o eop - escalada de privilegios) en el cliente de Origin Windows. Este tipo de vulnerabilidad permite que cualquier usuario de Windows obtenga más derechos que los emitidos originalmente por el administrador. En este caso, estamos hablando de dos mejoras "típicas": de cualquier usuario a NT AUTHORITY \ SYSTEM (una cuenta con permisos máximos en el sistema operativo). La primera vulnerabilidad es bastante aburrida, por lo que en la siguiente sección la describiré brevemente. Pero el segundo fue bastante interesante, en su sección te diré exactamente cómo la busqué.
CVE-2019-19248
Esta vulnerabilidad consta de dos partes:
- Crear una carpeta en una ruta arbitraria (con derechos de Acceso total);
- Use la cláusula 1 para obtener los privilegios NT AUTHORITY \ SYSTEM.
Ahora sobre el primer punto con más detalle:
Preparación del medio ambiente
Es necesario cerrar el cliente de Origin y detener el Servicio de cliente de Origin (en teoría, el servicio en sí se detendrá si cierra el cliente, pero por las dudas).
Para la carpeta "C: \ ProgramData \ Origin", los derechos son "Acceso total", lo que nos permite eliminar completamente su contenido.
Link Building
Ahora crea un par de enlaces. El primer enlace será del tipo NTFS Reparse Point (NTFS Mount Point), el tipo de enlaces que apuntan de una carpeta a otra: “C: \ ProgramData \ Origin” <-> “\ RPC Control”. Para crear puntos de análisis no necesita derechos de administrador. Solo es necesario que la carpeta de origen esté vacía y que el usuario tenga permisos de escritura (se borraron en el último paso, los derechos se verificaron allí). "\ RPC Control" no es una carpeta en el sistema de archivos, sino un tipo especial de carpeta: un directorio de objetos. No puede verlo con un explorador habitual, pero puede hacer un punto de análisis allí, aparentemente debido a las abstracciones comunes que se usan en las entrañas de Windows.
Ahora crearemos el enlace simbólico habitual "\ RPC Control \ CatalogCache" <-> "C: \ Path \ To \ Target \ Folder". En el sistema de archivos, está prohibido crear enlaces simbólicos sin derechos de administrador, pero esta regla no se aplica a los directorios de objetos. Por lo tanto, nuestro enlace se creará con éxito. Como resultado de una combinación de estos dos enlaces, las llamadas a "C: \ ProgramData \ Origin \ CatalogCache" se redirigirán a "C: \ Path \ To \ Target \ Folder".
Lea más sobre dichos enlaces
aquí . En el mismo repositorio,
puede descargar utilidades para trabajar con enlaces.
Lanzamiento
En el último paso, ejecute el cliente. Al comienzo de su trabajo, lanzará el "Servicio de cliente de Origin" y, al encontrar que no hay una carpeta "C: \ ProgramData \ Origin \ CatalogCache", intentará crearlo. Como resultado de navegar a través de enlaces simbólicos, creará "C: \ Ruta \ A \ Destino \ Carpeta" y le dará a esta carpeta derechos de "Acceso total".
Lo que se requería obtener en el primer punto de operación. Pasemos a la segunda.
La operación de crear una carpeta en una ruta arbitraria
Aquí puedes trabajar de muchas maneras.
Simple y bastante confiable es crear la carpeta "C: \ Windows \ system32 \ LogonUI.exe.local". "LogonUI.exe" (una aplicación que se ejecuta desde NT AUTHORITY \ SYSTEM, es responsable del funcionamiento de la pantalla de selección de usuario y la pantalla de bloqueo) gracias al mecanismo .local-redirection ("redirección dotlocal"), cargará la biblioteca desde la ruta "C: \ Windows \ system32 \ LogonUI.exe.local \ amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.17134.648_none_fb45a0e93062a6d2 \ comctl32.dll ". En general, el mecanismo en sí es bastante común, por lo que puede tener muchos objetivos.
Una forma larga pero interesante es restar el hash de la contraseña del administrador mediante fraudes especiales. Más detalles
aquí .
Total
La vulnerabilidad se explota con bastante facilidad, solo necesita trabajar un poco en el segundo punto: encontrar el objetivo y escribir un archivo dll adecuado. Además, Matt Nelson también informó esta vulnerabilidad, y su escritura se puede encontrar
aquí .
CVE-2019-19247
Esta es una de mis vulnerabilidades favoritas. Muestra cuán cuidadosamente necesita relacionarse con la criptografía utilizada.
Todo comenzó con el hecho de que instalé el juego a través de Origin. Todo salió de alguna manera demasiado bien: se pueden iniciar un par de clics y después de unos minutos de descargar el juego. No de inmediato, pero entendí cuál era el problema: el juego se instaló a lo largo de la ruta "C: \ Archivos de programa \ Nombre del juego", pero no hizo una sola pregunta a través de UAC. Rápidamente verifiqué los derechos, todo era estándar: un usuario común no podía escribir en "C: \ Archivos de programa". Un poco más de investigación y descubrí que el juego no está "prescrito" por el propio cliente de Origin, sino por su Servicio de cliente de Origin.
Comencé a hacer suposiciones sobre cómo el cliente transmite información al servicio para verificar si algo puede ser explotado.
El método de transmisión de información resultó ser simple: una tubería con nombre. Aprendí sobre esto a partir de los registros de instalación: en texto plano se indicó que la tubería OriginClientService estaba aceptando comandos para trabajar con archivos y carpetas.
Abrió IDA, subió el cliente allí.
* trabajo realizado en IDA: 1 *Bastante rápido, descubrí que los comandos se enviaron a la tubería en general en forma de texto. Cerca de allí encontré una lista de comandos y, sin más preámbulos, envié un comando del tipo "copy" C: \ test \ payload.dll "" C: \ Windows \ pwn.dll "a la tubería. En previsión de un resultado rápido, verifico la carpeta "C: \ Windows" y no encuentro nada nuevo en ella. Pero hay algo nuevo en los registros: algunas palabras sobre el hecho de que el cliente en la tubería no pasó la verificación de firma digital.
Abrió IDA, subí el servicio allí.
* trabajo realizado en IDA: 2 *Descubrí que de todos modos no se esperan equipos de nadie. Cuando se conecta a una tubería, el servicio verifica quién está conectado a ella. El proceso pid se extrae de la conexión, la ruta al archivo ejecutable se extrae del pid, se verifica que la firma sea correcta y EA la emite.
Suena bien, pero no lo suficiente. Puede tomar el "Origin.exe" legal (archivo ejecutable del cliente), copiarlo en algún lugar de su carpeta. Coloque algunos dll de la lista de importación "Origin.exe" en esta carpeta. Por ejemplo, surgió version.dll. Llamé a este enfoque "inyección dll inversa": en una inyección dll normal, copiamos el dll en el archivo exe, pero ahora hemos hecho lo contrario. Escribo rápidamente proxy dll para version.dll, agrego código enviando el comando a la tubería. La carga útil todavía no se copia. Leemos los registros: "¿Qué significa que no se pueda descifrar el comando?". Me salté el cifrado.
Abrió IDA, subió el cliente allí.
* trabajos realizados en IDA: 3, bypass de firma: 1 *Como el cliente envía comandos cifrados en su trabajo habitual, entonces puedo. Allí miré, luego miré, el resultado es este: cifrado AES, inicializando un vector constante, la clave se lee del archivo. Prácticamente copiamos esta pieza e IDA en el código, compilamos, verificamos. De nuevo nada. Pero los registros nuevamente proporcionan información útil: no puede especificar Archivos de programa como la ruta de destino.
Abrió IDA, subí el servicio allí.
* trabajo realizado en IDA: 4, omisión de firma: 1, omisión de cifrado: 1 *Entonces, es cierto que hay comprobaciones para obtener un comando que resulta que los archivos no se pueden copiar en todas partes. Y las rutas con "\ .. \" no se pueden escribir. Nos fijamos en lo que otros equipos son.
Trabajando con el registro: nuevamente hay muchas restricciones. Pero lanzar archivos parece interesante. Al menos los controles no son particularmente visibles. Edite el código, envíe el comando "ExecuteProcess" C: \ test \ payload.exe "". Bueno, entiendes ... nada.
Los registros vuelven a hablar sobre la firma. Oh, ya lo ganamos. Indicamos en el código que llamamos a nuestro Origin.exe copiado para cargar nuestro proxy dll nuevamente, pero con derechos del sistema. Agregue controles y ejecute la consola. Comenzamos y aparece la consola con los derechos NT AUTHORITY \ SYSTEM, por fin todo funcionó.
* trabajo realizado en IDA: 4, omisión de firma: 2, omisión de cifrado: 1 *Por lo tanto, debe reiniciar, realizar una ejecución final y aún admirar la consola con los máximos derechos. Reiniciar, verificar y ... nada. ¿Cómo es eso? Simplemente funcionó.
Los diagnósticos muestran que el servicio de cliente de Origin no se ha iniciado, por lo que lo estoy iniciando. Pero no comienza. Más precisamente, comienza, pero se cierra inmediatamente. Inicio el cliente de Origin y el servicio se inicia normalmente. Después de eso, el exploit funciona correctamente de nuevo. Sería posible detenerse allí, pero este no es mi camino: quiero que el exploit funcione por completo.
Abrió IDA, subí el servicio allí.
* trabajo realizado en IDA: 5, omitir firma: 2, omitir cifrado: 1 *Resulta que al inicio comprueba con qué parámetros comenzó el servicio. No hay nada directamente interesante allí. Base64 del pid cifrado del proceso cuyo archivo se verifica mediante la firma. Suena complicado, pero ya hemos pasado por alto el cifrado y la firma también. Estamos escribiendo un código y un exploit está listo.
Total
El exploit está funcionando. El trabajo se realizó en IDA: 5 veces, omisión de firma: 3 veces, cifrado de omisión: 2 veces.
Conclusión
Vulnerabilidades solucionadas: los desarrolladores de EA introdujeron un modo de operación restringido especial para el cliente, que establece restricciones serias para trabajar con carpetas y canalizaciones de Origin.
Vulnerabilidades de la línea de tiempo:
1 de abril de 2019 : informe de vulnerabilidad de informes con tubería;
7 de abril de 2019 : envío de un informe de vulnerabilidad con una carpeta arbitraria;
... MUCHAS LETRAS (conté 40) ...
10 de diciembre de 2019 : divulgación acordada.
Gracias a todos por su atención, les deseo los mismos agentes de seguridad.
Este artículo en inglés.