electron-updater signature bypass
Las apps de Electron suelen actualizarse solas con la librería electron-updater. El flujo: la app descarga un fichero latest.yml que indica la URL del nuevo instalador y su hash SHA-512; descarga el binario, comprueba el hash y, en Windows, valida la firma Authenticode antes de ejecutarlo. Si la firma no es válida, en teoría no debería instalarse.
El fallo (documentado por Doyensec, 2020) está en cómo valida la firma. electron-updater construye un comando PowerShell concatenando el nombre del fichero sin escapar:
Get-AuthenticodeSignature 'NOMBRE_DEL_FICHERO'Si el atacante nombra su binario con una comilla simple (p. ej. r'everse.exe), el comando queda:
Get-AuthenticodeSignature 'r'everse.exe'Sintaxis rota → PowerShell devuelve un error, no un resultado de firma. Y aquí está el problema: electron-updater trata ese error como "no se pudo verificar" y, por un comportamiento fail-open, en vez de abortar acepta el binario y lo ejecuta. Resultado: un instalador sin firmar (con una reverse shell) corre como si fuera una actualización legítima → RCE.
Requisitos para explotarlo. Hay que poder entregar el latest.yml y el binario al canal de actualización: un servidor de updates bajo nuestro control, o (como en Atom) un share SMB escribible donde el proceso de actualización los recoge. Pasos: generar el binario con ' en el nombre (msfvenom), calcular su sha512, montar el latest.yml con la url apuntando a nuestro host y el hash, y forzar/esperar la actualización.
Cómo detectarlo. La firma es un instalador descargado cuyo nombre contiene una comilla simple (') y un latest.yml traído de una URL/share no oficial, ambos anómalos. En el host, Get-AuthenticodeSignature devolviendo un error de sintaxis (registrable con logging de PowerShell / 4104) e, inmediatamente después, la ejecución de un binario sin firmar por el proceso de la app Electron (4688/Sysmon 1 con Signed=false) es la cadena. El AV/EDR marca el binario de msfvenom. Un latest.yml apareciendo en un share SMB escribible es el indicador previo (FIM).
Defensa. Actualizar electron-updater a una versión parcheada, escapar/validar los nombres de fichero, y aplicar validación fail-closed: ante cualquier error de verificación de firma, abortar la instalación. Servir las actualizaciones solo por HTTPS desde un origen no manipulable. Relacionado con el RCE por subida de fichero cuando el canal de entrega es un upload.
Máquinas donde se aplica
- AtomHackTheBox