Reports
ALTA[CONFIGURACIÓN]#3619409

Monero GUI en Windows: carpeta de P2Pool escribible por cualquier usuario permite ejecutar código ajeno

El instalador de Monero GUI para Windows daba control total a todos los usuarios sobre la carpeta p2pool. Un usuario local sin privilegios podía colocar su propio p2pool.exe y la cartera lo ejecutaba al iniciar la minería.

Resumen
Resumen en castellano de un reporte público, no una traducción literal. El código y los comandos se mantienen como en el original.

Resumen

El fallo estaba en el instalador de Windows de Monero GUI, la cartera gráfica de Monero. Al instalarse para todo el equipo (bajo Program Files), el script del instalador creaba la subcarpeta p2pool con permisos de escritura total para el grupo de usuarios normales:

installers/windows/Monero.iss:59
Name: "{app}\p2pool"; Permissions: users-full

El problema es que esa carpeta no guarda datos, sino un ejecutable. Cuando alguien arranca la minería con P2Pool desde la interfaz, la cartera lanza p2pool.exe desde ahí sin ninguna comprobación de integridad adicional. Las partes del código implicadas, según el investigador:

  • src/p2pool/P2PoolManager.cpp:124-129: isInstalled() solo mira si el fichero existe.
  • src/p2pool/P2PoolManager.cpp:154-210: start() ejecuta p2pool.exe.
  • src/p2pool/P2PoolManager.cpp:243-248: en Windows la ruta es {applicationDirPath()}/p2pool/p2pool.exe.
  • pages/Mining.qml:295-318 y pages/Mining.qml:654-656: el camino desde la interfaz hasta el arranque de P2Pool.

El resultado es un caso clásico de binary planting: una ubicación que debería ser de confianza (el directorio de instalación del programa) pasa a ser escribible por cualquiera, y lo que se deje allí acaba ejecutándose con la cuenta de otro usuario.

El comportamiento se introdujo con el commit 432650008c4af92db138041d15b06e43fba0b7ab, del 28 de mayo de 2022 (Use "p2pool" folder for p2pool on Windows), así que afecta a los instaladores de Windows que lo incluyen. El investigador no llegó a identificar la primera versión etiquetada con ese cambio. Se trata de un problema local, no explotable en remoto.

Pasos de reproducción

  1. Instalar Monero GUI en Windows con el instalador normal.
  2. Revisar los permisos de la carpeta de P2Pool que ha creado el instalador:
icacls "%ProgramFiles%\Monero GUI Wallet\p2pool"
  1. Con una cuenta local sin privilegios, dejar en esa carpeta un ejecutable de prueba inofensivo con el nombre que espera la cartera:
%ProgramFiles%\Monero GUI Wallet\p2pool\p2pool.exe
  1. Basta con que ese ejecutable cree un fichero marcador, por ejemplo %TEMP%\monero_p2pool_poc.txt, con un mensaje corto, el nombre del usuario actual y la hora.
  2. Abrir Monero GUI con la cuenta de la víctima.
  3. Ir a la pantalla de minería (Mining) y arrancar la minería con P2Pool.
  4. Comprobar que se ha ejecutado el p2pool.exe plantado en lugar del binario legítimo: aparece el fichero marcador, queda constancia en los registros de creación de procesos y se nota en el comportamiento de la interfaz.

Lo esperable es que un usuario sin privilegios no pueda modificar ejecutables ni rutas desde las que se cargan ejecutables dentro de un programa instalado para todo el equipo.

Impacto

Cualquier usuario local sin privilegios, o un malware que corra con una cuenta limitada, podía sustituir o colocar p2pool.exe en la carpeta. La próxima vez que otro usuario del mismo equipo iniciase P2Pool desde Monero GUI, ese binario se ejecutaría con su cuenta. En concreto, esto permitía:

  • Ejecutar código en la sesión de otro usuario del mismo equipo.
  • Mantener persistencia dentro de una ruta de aplicación que se considera de confianza.
  • Comprometer la confidencialidad, integridad y disponibilidad de la cuenta de la víctima.
  • Escalar privilegios si el usuario que arranca P2Pool tiene más permisos que el atacante (por ejemplo, un administrador).

En la práctica, la función de minería con P2Pool se convertía en un disparador para ejecutar código arbitrario. El reporte figura con severidad alta y como resuelto en HackerOne.