Reconocer la escalada de privilegios en ABBYY FineReader

El ciclo de cómo encuentro vulnerabilidades de escalada de privilegios en las aplicaciones de Windows continúa. En la serie anterior: Steam ( CVE-2019-14743 , CVE-2019-15316 , CVE-2019-17180 ) y Origin ( CVE-2019-19247, CVE-2019-19248 ). Pero hoy no estamos hablando de un lanzador de juegos, sino del paquete de software de aplicación ABBYY FinerReader.



Resumen: le diré cómo, gracias al componente que verifica la licencia, en 10 minutos puede elevar sus derechos desde el nivel de usuario a NT AUTHORITY \ SYSTEM. A la vulnerabilidad se le asignó el identificador CVE-2019-20383, un enlace al sitio web de ABBYY .

Servicio de inteligencia


Descargué la versión de prueba de FineReader del sitio web de ABBYY y la verifiqué rápidamente para ver si tiene sentido elegir el producto para aumentar los privilegios. Sí, el producto incluye un servicio que, a juzgar por el nombre "servidor de licencias de red ABBYY", está asociado con las licencias y se inicia de manera predeterminada desde el usuario NT AUTHORITY \ SYSTEM. Comencé ProcMon comenzó a observar el comportamiento del servicio.

Me llamó la atención el archivo ubicado en la ruta "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \ Licensing.cnt". El servicio lee algo de él, le escribe algo, en general, el archivo parecía un candidato interesante para experimentos. Considere la carpeta "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses". La ACL heredada de acceso total de la carpeta principal ("C: \ ProgramData \ ABBYY \ FineReader \ 15") es válida para esta carpeta, lo que significa que puede eliminar todo su contenido, incluido el archivo "Licensing.cnt".

El servicio, al descubrir la ausencia del archivo, trató de crearlo, y de una manera un poco extraña. Creó un archivo con el formato "tmpXXXX-YYYYYYYYY.tmp", escribió algunos datos y luego lo renombró como "Licensing.cnt".

Aquí está el registro de ProcMon en el que esta operación se realiza dos veces.



Primero, sucede a las 20:36, y luego a las 20:46. Entre estas marcas de tiempo, el archivo se eliminó nuevamente para crearse nuevamente.

El rectángulo 1 indica la situación cuando el servicio ha detectado la ausencia de un archivo. Rectángulo 2: crea un archivo temporal. Rectángulo 3: cambie el nombre del archivo temporal. Rectángulo 4: repita las operaciones después de 10 minutos.

Considere el formato del nombre "tmpXXXX_YYYYYYYYY.tmp". Como parte de un proceso en ejecución, XXXX siempre será constante, además, de hecho, este es el identificador del hilo que realiza este trabajo. YYYYYYYYY no permanece constante, pero si observamos dos inicios vecinos (valores: 430210515 y 430810515), parece que esto es solo una marca de tiempo, la diferencia entre los números 600000, sorprendentemente coincide con 10 minutos de la diferencia. Algunas pruebas más confirman nuestra suposición.
Para resumir esta parte. Cualquier usuario puede eliminar el archivo "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \ Licensing.cnt", luego puede solicitar a menudo el contenido de la carpeta "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses" en en algún momento, encuentre un archivo llamado "tmpXXXX_YYYYYYYYY.tmp". Ahora el usuario estará preparado, después de eliminar el archivo, sabrá exactamente en qué momento y con qué nombre se creará el archivo la próxima vez.

Ahora jugaremos con enlaces simbólicos


Cómo crear enlaces simbólicos sin derechos de administrador
, . . , , «C:\abc\1» «C:\def\2».

NTFS reparse point ( NTFS mount point) «C:\abc» «\RPC Control\". «\RPC Control\» – , , , . , , , , . NTFS reparse point , , . - , - .

. "\RPC Control\1" <-> «C:\def\2». , «C:\abc\1», «C:\def\2».

Inicialmente, el proceso de creación de un archivo de licencia se ve así:



cuando conocemos el momento exacto de la siguiente operación, podemos crear los siguientes enlaces simbólicos (omitiremos el nombre de la carpeta de origen "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \"): Donde YYYYYYYYA, YYYYYYYYB, YYYYYYYYC, ... YYYYYYYYYZ: estas son marcas de tiempo diferentes en YYYYYYYYYY + 10 minutos (en caso de que la marca de tiempo llegue un poco tarde). A continuación, cree el enlace: tenga en cuenta que ninguno de estos archivos existe realmente. Esto es necesario para que, al referirse, por ejemplo, a tmpXXXX_YYYYYYYYB.tmp, ocurran dos redireccionamientos y, como resultado, el servicio funcione con el archivo "C: \ test \ l2 \ nope". Tan pronto como descubramos la creación del archivo "C: \ test \ l2 \ nope", debemos crear inmediatamente dos nuevos enlaces simbólicos:

tmpXXXX_YYYYYYYYA.tmp <-> C:\test\l1\proxy
tmpXXXX_YYYYYYYYB.tmp <-> C:\test\l1\proxy
tmpXXXX_YYYYYYYYC.tmp <-> C:\test\l1\proxy

tmpXXXX_YYYYYYYYZ.tmp <-> C:\test\l1\proxy






C:\test\l1\proxy <-> C:\test\l2\nope




C:\test\l1\proxy <-> C:\test\l2\payload
Licensing.cnt <-> C:\target\path


El servicio continuará escribiendo el contenido del archivo en "C: \ test \ l2 \ nope", pero cambiará el nombre después de pasar por el nuevo enlace simbólico. Por lo tanto, en lugar de renombrar, por ejemplo, "tmpXXXX_YYYYYYYYC.tmp" a "Licensing.cnt", "C: \ test \ l2 \ payload" en realidad se renombrará (moverá) a "C: \ target \ path". De hecho, podemos colocar un archivo con cualquier contenido en cualquier ruta en nombre del usuario NT AUTHORITY \ SYSTEM .

Esquemáticamente, se verá así:



el color indica lo que realmente se realizará debido a la influencia de los enlaces simbólicos.

Elevar los privilegios utilizando la primitiva resultante ya es fácil: puede adjuntar su dll a los procesos del sistema y otras cosas similares. En este punto, contacté a los representantes de ABBYY y les pasé información sobre la vulnerabilidad.

Por el momento, según ABBYY, la vulnerabilidad está cerrada.

Cronograma


25/11/2019 - detección de vulnerabilidad
26/11/2019 - solicitó un contacto de seguridad del fabricante
26/11/2019 - envío de un informe de vulnerabilidad al fabricante
09/12/2019 - la vulnerabilidad fue confirmada por el fabricante
01/10/2020 - la vulnerabilidad se corrigió
el 22/01/2020 - las vulnerabilidades se asignaron CVE-2019-20383
19/02/2019 .2020 - publicación de este artículo

Hay muchos proyectos ahora y estamos ampliando el equipo de "Monitoreo prospectivo". Estamos buscando expertos en el estudio de códigos fuente, así como expertos en el análisis de aplicaciones móviles. ¿Quieres unirte a mi equipo? Escríbeme, Anastasia (Ana2121) o por correo info@amonitoring.ru

Este artículo en inglés.

All Articles