Hubo una discusión en los comentarios sobre si esto podría considerarse una vulnerabilidad. Pero me enganchó un comentario del autor:
¿Podría implementarse esto, por ejemplo, en forma de una DLL, que, cuando es llamada por su API, verificaría la firma digital del programa de llamada?
El hecho es que justo antes de eso, investigué varios programas que se basaban en la verificación de firma digital de la misma manera. Y esta verificación fue muy fácil de manejar.
La firma digital de un archivo solo coincide con el ejecutable en sí mismo, pero un programa en ejecución no es solo un ejecutable. Hay varias formas de influir en el funcionamiento del programa sin cambiar el archivo ejecutable: puede reemplazar las bibliotecas que se cargan o inyectar código directamente en la memoria.
Miré el perfil del autor: "Trabaja en: Doctor Web". Pero, ¿qué pasa si mira para ver si los productos de esta compañía usan el cheque del que habla el autor? Decidí buscar y, spoiler, encontré una vulnerabilidad que le permite elevar sus privilegios al usuario del sistema Dr.Web Security Space para Windows.
Servicio de inteligencia
No entiendo los productos Doctor Web, así que tomé el primero que pude descargar en el sitio web: Dr.Web Security Space 12 para Windows. En la configuración predeterminada, este producto busca actualizaciones cada media hora. Y se encontró una vulnerabilidad en el mecanismo de actualización.
A continuación, ofrezco un video de operación que describe lo que sucede en el video con referencia al tiempo. También habrá una descripción de cuál era exactamente la vulnerabilidad.
Video de operación
La demostración se ejecuta en Windows 10 x64 desde un usuario sin derechos de administrador.
0: 00-0: 12 muestra a través de la consola de Windows que el usuario actual no es administrador
0: 12-0: 24 muestra la versión instalada del Dr.Web Security Space
0: 24-0: 29 El archivo drweb_eop_upd_dll.dll se encuentra en la carpeta en el escritorio (los códigos fuente y el archivo se adjuntan al ticket)
0: 29-0: 34 Demuestro que hay 3 archivos en la
carpeta C: \ ProgramData \ Doctor Web \ Updater \ etc 0: 34-0: 47 Copio la biblioteca drweb_eop_upd_dll.dll en la carpeta escritorio y una copia llamo version.dll, otra - cryptui.dll
0: 47-0: 56 Copio el archivo C: \ Archivos de programa \ Archivos comunes \ Doctor Web \ Updater \ drwupsrv.exe a la carpeta en el escritorio, al lado del dll ...
0: 56-1: 00 ejecuta el archivo copiado
El archivo ejecutable drwupsrv.exe de la carpeta en el escritorio carga el archivo version.dll ubicado cerca. Esta biblioteca crea el archivo C: \ ProgramData \ Doctor Web \ Updater \ etc \ drwupsrv.xml.new. El usuario tiene derechos para crear archivos en la carpeta C: \ ProgramData y en el fondo, por lo que esta es una operación legal. Si intenta crear dicho archivo manualmente, es probable que los mecanismos de seguridad de Dr.Web eviten dicha operación. Pero en funcionamiento, el archivo se crea en nombre de drwupsrv.exe, que probablemente omite las comprobaciones internas y se crea el archivo. De hecho, esta es una omisión de la verificación de firma que se discute al comienzo del artículo.
1: 00-1: 22 am demostrando el archivo creado y su contenido. En un sentido general, el archivo tiene el mismo contenido que el archivo C: \ ProgramData \ Doctor Web \ Updater \ etc \ drwupsrv.xml, pero todas las rutas apuntan a una carpeta en el escritorio (C: \ Users \ User \ Desktop \ dwtest)
1: 22-2 : 00 no sucede nada (en este momento estoy esperando el proceso de actualización de software, que por defecto ocurre cada media hora y el tiempo esperado se puede encontrar en los registros)
2: 00-2: 14 aparentemente, tomando el archivo de configuración creado, el actualizador ve que no hay archivos de software Dr.Web en la carpeta C: \ Users \ User \ Desktop \ dwtest, comienza a copiar los archivos de software allí.
Los archivos copiados incluyen el archivo dwservice.exe, que se inicia en el momento de la actualización como usuario de NT AUTHORITY \ SYSTEM. Este archivo carga la biblioteca cryptui.dll, que estaba en la carpeta C: \ Users \ User \ Desktop \ dwtest. El código de la biblioteca simplemente inicia la consola interactiva, que es visible en la pantalla. Use el comando whoami para asegurarse de que se obtienen los derechos del sistema.
Salir
El informe de vulnerabilidad se envió a Doctor Web y, al parecer, los desarrolladores lo han solucionado todo.
Cronología:
15/05/2020: contacto con el soporte técnico con una solicitud para proporcionar un contacto de seguridad.
20/05/2020 - Recibo una respuesta de que es posible enviar un informe en esta llamada
20/05/2020 - Transmito un informe
14/06/2020 - Recibo una respuesta de que la vulnerabilidad se ha corregido para la versión 12. En espera de portabilidad para la versión 11.
07/07/2020 - Los desarrolladores confirman que se han lanzado las correcciones.
Este artículo en inglés.