Atom
Executive summary — Atom is a Windows machine built around a poorly designed software-update channel: an SMB share writable by an anonymous guest lets an attacker deliver a malicious "update" to an automated QA process, which runs it with no real validation beyond an Authenticode signature check broken by CVE-2020-4075 in
electron-updater. From there, a configuration file belonging to a task-board app (PortableKanban) stores the Redis password encrypted with an obsolete algorithm and static, public keys — and Redis, in turn, stores the Administrator's password encrypted with the exact same broken scheme.
| Platform | Hack The Box |
| Operating system | Windows 10 Pro (Build 19042) |
| Difficulty | Medium |
| Status | Retired |
| Target IP | 10.129.82.30 |
| Hostname | ATOM |
| Starting point | Anonymous SMB (guest, no password) |
Attack map
guest (anonymous SMB)
│ "Software_Updates" share is WRITABLE + QA PDF
▼
PDF: "drop an update in a client folder and QA will install it"
│ decompile heed_setup_v1.0.0.zip -> app.asar -> electron-updater < 4.3.1
▼
CVE-2020-4075 (electron-updater signature-check bypass)
│ latest.yml + s'hell.exe (apostrophe breaks Get-AuthenticodeSignature)
│ uploaded to client1/ over guest SMB, the automated QA process installs the "update"
▼
[USER] atom\jason (reverse shell) user.txt: 9f0d33cc04cd04de394bc52aed17be69
│ PortableKanban.cfg -> DbEncPassword (static-key DES-CBC)
▼
Redis password: kidvscat_yes_kidvscat
│ redis-cli -a ... keys/get -> pk:urn:user:... record for Administrator
│ same static DES -> plaintext password
▼
[ROOT] Administrator : kidvscat_admin_@123 -> WinRM -> root.txt: 4f066823192a6372c0917db6e68f613d
1. Enumeration
1.1 Ports
sudo nmap -p- --min-rate 2000 -T4 -Pn 10.129.82.30 -oN nmap/allports.txt
sudo nmap -p 80,135,443,445,5985,6379 -sCV -Pn 10.129.82.30 -oN nmap/services.txt
80/tcp http Apache 2.4.46 (Win64) PHP/7.3.27 -> "Heed Solutions"
135/tcp msrpc
443/tcp ssl/http Apache (same site)
445/tcp microsoft-ds Windows 10 Pro 19042 (host: ATOM)
5985/tcp WinRM
6379/tcp redis Redis key-value store
A Windows host with Redis exposed directly on port 6379 is unusual — Redis is almost always a Linux-side service in these environments — and it is the first hint that some third-party application bundles it as a backend, rather than it being a deliberate infrastructure deployment. Together with the "Heed Solutions" web app (a product name, not a generic company), it points at the real target not being the website itself, but a desktop application the website distributes.
1.2 SMB (guest)
nxc smb 10.129.82.30 -u guest -p '' --shares
Share Permissions
IPC$ READ
Software_Updates READ,WRITE <-- writable as guest
The Software_Updates share is writable by anyone, authenticated or not. Inside it there are three folders, client1/2/3, and a PDF:
smbclient //10.129.82.30/Software_Updates -U 'guest%' -c 'ls; get UAT_Testing_Procedures.pdf'
pdftotext UAT_Testing_Procedures.pdf -
The PDF, "Heedv1.0 - Internal QA Documentation", explains:
- "Heed" is a notes app built with electron-builder.
- QA process: "To initiate the QA process, just place the updates in one of the 'client' folders, and the appropriate QA team will test it to ensure it finds an update and installs it correctly."
In other words: if an "update" is dropped in a
clientfolder, an automated process will install it with no further human intervention. This is the key that unlocks the whole chain — a writable share alone is worth nothing unless something on the other end is willing to run whatever gets dropped into it.
1.3 The application (web)
The website offers heed_setup_v1.0.0.zip. Unzipping it and extracting the NSIS installer leads to app-64.7z, whose resources folder contains:
resources/app-update.yml→url: 'http://updates.atom.htb'(the update feed the app polls periodically).resources/app.asar→ extractable withasar e;main.jsshows the app uses theelectron-updatermodule to self-update.
electron-updater (< 4.3.1) is vulnerable to CVE-2020-4075, a signature verification bypass publicly documented by Doyensec. Before running a downloaded installer,
electron-updateron Windows shells out to PowerShell to check its Authenticode signature withGet-AuthenticodeSignature <path>, but builds that command by concatenating the downloaded file's name without sanitizing it. A file name containing a single quote breaks PowerShell's quoting and injects arbitrary code into that command — with the practical effect that the "signature check" never actually runs, and the installer executes regardless of whether it's signed or its signature is invalid.
Resumen ejecutivo — Atom es una máquina Windows que gira en torno a un canal de actualizaciones de software mal diseñado: un share SMB escribible como invitado permite entregar una "actualización" maliciosa a un proceso de QA automatizado, que la ejecuta sin más validación que una firma Authenticode rota por CVE-2020-4075 en
electron-updater. Desde ahí, un fichero de configuración de una app de gestión de tareas (PortableKanban) guarda la contraseña de Redis cifrada con un algoritmo obsoleto y claves estáticas públicas — y Redis, a su vez, guarda la contraseña del Administrador cifrada con el mismo esquema roto.
| Plataforma | Hack The Box |
| Sistema operativo | Windows 10 Pro (Build 19042) |
| Dificultad | Medium |
| Estado | Retired |
| IP objetivo | 10.129.82.30 |
| Hostname | ATOM |
| Punto de partida | SMB anónimo (guest, sin contraseña) |
Mapa del ataque
guest (SMB anónimo)
│ share "Software_Updates" ESCRIBIBLE + PDF de QA
▼
PDF: "deja una actualización en una carpeta client y el QA la instala"
│ descompilar heed_setup_v1.0.0.zip -> app.asar -> electron-updater < 4.3.1
▼
CVE-2020-4075 (bypass de firma en electron-updater)
│ latest.yml + s'hell.exe (apóstrofo rompe Get-AuthenticodeSignature)
│ subido a client1/ vía SMB guest, el QA automático instala la "actualización"
▼
[USER] atom\jason (reverse shell) NT: - user.txt: 9f0d33cc04cd04de394bc52aed17be69
│ PortableKanban.cfg -> DbEncPassword (DES-CBC, clave/IV estáticos)
▼
Contraseña de Redis: kidvscat_yes_kidvscat
│ redis-cli -a ... keys/get -> registro pk:urn:user:... de Administrator
│ mismo DES estático -> contraseña en claro
▼
[ROOT] Administrator : kidvscat_admin_@123 -> WinRM -> root.txt: 4f066823192a6372c0917db6e68f613d
1. Enumeración
1.1 Puertos
sudo nmap -p- --min-rate 2000 -T4 -Pn 10.129.82.30 -oN nmap/allports.txt
sudo nmap -p 80,135,443,445,5985,6379 -sCV -Pn 10.129.82.30 -oN nmap/services.txt
80/tcp http Apache 2.4.46 (Win64) PHP/7.3.27 -> "Heed Solutions"
135/tcp msrpc
443/tcp ssl/http Apache (mismo sitio)
445/tcp microsoft-ds Windows 10 Pro 19042 (host: ATOM)
5985/tcp WinRM
6379/tcp redis Redis key-value store
Un host Windows con Redis expuesto directamente en el puerto 6379 es poco habitual — Redis es casi siempre un servicio de Linux en estos entornos — y es la primera señal de que alguna aplicación de terceros lo trae empotrado como backend, en vez de ser un despliegue de infraestructura deliberado. Junto con la web "Heed Solutions" (nombre de producto, no de empresa genérica), apunta a que el objetivo real no es la web en sí, sino una aplicación de escritorio que esa web distribuye.
1.2 SMB (guest)
nxc smb 10.129.82.30 -u guest -p '' --shares
Share Permissions
IPC$ READ
Software_Updates READ,WRITE <-- escribible como guest
El share Software_Updates es escribible por cualquiera, autenticado o no. Dentro hay tres carpetas client1/2/3 y un PDF:
smbclient //10.129.82.30/Software_Updates -U 'guest%' -c 'ls; get UAT_Testing_Procedures.pdf'
pdftotext UAT_Testing_Procedures.pdf -
El PDF, "Heedv1.0 - Internal QA Documentation", explica:
- "Heed" es una app de notas construida con electron-builder.
- Proceso de QA: "To initiate the QA process, just place the updates in one of the 'client' folders, and the appropriate QA team will test it to ensure it finds an update and installs it correctly."
Es decir: si se deja una "actualización" en una carpeta
client, un proceso automatizado la instalará sin más intervención humana. Esta es la llave de toda la cadena — el share escribible por sí solo no vale nada si no hay, al otro lado, algo dispuesto a ejecutar lo que se deposite.
1.3 La aplicación (web)
La web ofrece heed_setup_v1.0.0.zip. Descomprimiéndolo y extrayendo el instalador NSIS se llega a app-64.7z, cuya carpeta resources contiene:
resources/app-update.yml→url: 'http://updates.atom.htb'(el feed de actualización que la app consulta periódicamente).resources/app.asar→ extraíble conasar e;main.jsmuestra que la app usa el móduloelectron-updaterpara autoactualizarse.
electron-updater (< 4.3.1) es vulnerable a CVE-2020-4075, una omisión de verificación de firma documentada públicamente por Doyensec. Antes de ejecutar un instalador descargado,
electron-updateren Windows invoca PowerShell para comprobar su firma Authenticode conGet-AuthenticodeSignature <ruta>, pero construye ese comando concatenando el nombre del fichero descargado sin sanearlo. Un nombre de fichero con un apóstrofo rompe el quoting de PowerShell e inyecta código arbitrario en ese comando — con el efecto práctico de que la "verificación de firma" nunca llega a ejecutarse de verdad, y el instalador corre igualmente aunque no esté firmado o la firma sea inválida.
Root Access unlocks the content you can't see — everything else on the site is already open.
See Root Access plansNo account? Create one free then upgrade from your console.
Root Access desbloquea el contenido que no puedes ver — todo lo demás de la web ya está abierto.
Ver planes de Root Access¿Sin cuenta? Crea una gratis y luego mejora desde tu consola.