
HikCentral Professional - Filtración de ActiveCode de Licencia Pre-Autenticación
Antes de descargar cualquier cosa, lo que ya es público:
| Fuente | Lo que nos dice |
|---|---|
| Aviso de seguridad de Hikvision | "Faltan comprobaciones de autenticación en los endpoints de la API", consejo de actualizar a V2.6.3 / V3.0.1 |
| NVD CVE-2025-39247 | Métricas CVSS; vector de red, sin autenticación, alcance modificado, confidencialidad alta |
| Wiz, ZeroPath, SentinelOne, OffSeq, gbhackers, cybersecuritynews resúmenes | Todos reafirman el aviso; sin detalles técnicos, sin PoC, sin endpoint afectado nombrado |
| Agregadores de PoC de GitHub (poc-in-github, 0xMarcio/cve, etc.) | No PoC indexado |
| Foros (ipcamtalk, cctvforum, reddit), índices de torrents | No hay PoC, no hay instaladores filtrados; ipcamtalk tiene un hilo de uso de HikCentral pero nada relacionado con exploits. |
Entonces, en la fecha de análisis, ningún informe técnico público expone el error. Cualquier reproducción comienza con el diff binario.
Después de que se publicó CVE-2025-39247, la página de descarga de V2.6.2 fue retirada, pero el archivo en la CDN nunca fue eliminado. El nombre del archivo se puede recuperar de un espejo de terceros que indexó la página antes de su eliminación (FileHorse — publicó nombre de archivo y MD5). Con ese nombre de archivo, una simple GET a la CDN de Hikvision — usando solo un User-Agent de navegador normal y un encabezado Referer coincidente — todavía lo sirve.```bash
curl -A "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0"
-H "Referer: https://www.hikvision.com/en/support/download/software/hikcentral-professional-v2-6-2/"
-O
"https://www.hikvision.com/content/dam/hikvision/en/support/download/vms/hcp-2-6-2/HikCentral-Professional_Full-Pack_V2.6.2.202501211507_Win_x64_Installer.exe"
Resultado:
- Tamaño: 1,314,043,792 bytes (1.22 GB)
- MD5: `76d42e7cb16dc0e177b9a35d0fed7ced` — coincide con el valor publicado por FileHorse, confirmando que se trata del instalador genuino firmado por Hikvision (no un reempaquetado de terceros)
- Encabezados de respuesta CDN: `HTTP/2 200`, `content-type: application/x-msdownload`, `eo-cache-status: HIT`, `age: 2520395` (≈ 29 días en la caché perimetral de Tencent EdgeOne sin desalojo)
**Observación colateral que vale la pena reportar a Hikvision PSIRT:** la "retirada" de la página de V2.6.2 es cosmética. El archivo huérfano es accesible en la CDN sin autenticación ni puerta de URL firmada. Los paquetes completos V2.5.1 y V2.6.0 responden de la misma manera.
### 2.2 Instalador parcheado (Paquete base V2.6.3)
Actualmente enlazado desde la página de descarga de V2.6.3; mismo método de obtención:```
https://www.hikvision.com/content/dam/hikvision/en/support/download/vms/hcp-2-6-3/HikCentral-Professional_Base-Pack_V2.6.3.202508280142_Win_x64_Installer.exe
Todavía vinculado desde la página de descarga de V2.6.2 (Hikvision quiere que los usuarios lo apliquen):``` https://www.hikvision.com/content/dam/hikvision/en/support/download/vms/cve-2025-39247-security-vulnerability-patch/HikCentral-Professional_CVE-2025-39247_FixPack_V2.3.1-V2.6.2V3.0.0_20250904.exe
- Size: 32,599,504 bytes (31 MB)
---
## 3. Extracción estática
Los tres son envoltorios PE al estilo InstallShield. `7z` los desempaqueta en dos pasadas:```bash
# pass 1 — extract PE resources
7z x -o./extracted/v262/pe downloads/<v2.6.2 installer>
7z x -o./extracted/v263/pe downloads/<v2.6.3 installer>
# pass 2 — extract the nested 7-Zip streams hiding in PE resources
# (note: the resource-type label says "ZIP" but the byte signature is 7-Zip)
for ver in v262 v263; do
for z in extracted/$ver/pe/.rsrc/2052/ZIP/*; do
sz=$(stat -c %s "$z"); [ "$sz" -lt 1048576 ] && continue
7z x -o"extracted/$ver/payload/$(basename $z)" "$z"
done
done
Ambos instaladores se expanden en aproximadamente dos docenas de archivos de carga útil nombrados. Los directorios de nivel superior revelan la arquitectura:
| Archive | Contents |
|---|---|
246/Nginx + 246/www | Capa web de Nginx (la puerta de entrada) y la interfaz de usuario web SPA |
244/bin | Binarios de servicios nativos en C++ + certificados |
240 | PostgreSQL empaquetado + scripts de inicialización de BD |
238 | Entorno de ejecución Bee* (BeeAgent, BeeGuard, …) |
282 | Servicios de aplicación y complementos (la mayor parte del código backend en C++) |
281, 283-284, 396, 398-399, 513, 520, 538-541, 573 | Complementos más pequeños, plugins, stubs de actualización/desinstalación |
Fundamentalmente, no hay JARs/WARs de Java en ninguna parte. El backend es C++ sobre Nginx — importante porque te indica de antemano que cualquier fallo de autenticación estará en binarios compilados, no en bytecode WAR/JAR donde la descompilación es trivial.
for ver in v262 v263: find . -type f -print0 | xargs -0 md5sum | sort -k2 > inv_$ver.txt
v262 = {ln[34:]: ln[:32] for ln in open("inv_v262.txt")} v263 = {ln[34:]: ln[:32] for ln in open("inv_v263.txt")} common = set(v262) & set(v263) changed = [p for p in common if v262[p] != v263[p]]
Resultado: 239 archivos modificados en rutas comunes. Distribución:
| Cubo | Cantidad | Comentario |
|---|---|---|
| `246/www/*.js` (fragmentos de Interfaz Web) | ~200 | Principalmente hashes de recursos con incremento de versión; ignorar |
| `246/Nginx/conf/nginx_location.conf` | **1** | **Delta de configuración de Nginx en un solo archivo — comenzar aquí** |
| `246/Nginx*/install.bat` | 6 | Scripts de instalación, no relacionados |
| `244/bin/*.{exe,dll}` | 6 | Binarios nativos (`DistributionFilter.dll`, `FilterChain.dll`, herramientas multimedia) |
| `282/*.{exe,dll}` | 55 | Servicios de aplicación (el clúster más grande — `platform.dll`, `PersonCredential.dll`, `baseacs.*`, …) |
| `240/bin/pg_*` | 6 | Reconstrucción de Postgres, no relacionado |
| `284/hplugin/dahua_plugin/*` | 4 | Actualización de SDK del proveedor (+10.97 MB) — no relacionado |
| `284/hplugin/onvif_plugin/*` | 4 | Actualización de SDK del proveedor (+0.99 MB) — no relacionado |
| stubs de actualización/desinstalación, reportes de fallos | ~30 | Reconstrucciones de marca de tiempo PE del mismo tamaño, ignorar |
Después de filtrar la actualización de SDK del proveedor, la deriva de marcas de tiempo del sistema de compilación y los incrementos puramente cosméticos de recursos, los *reales* deltas relevantes para la seguridad se reducen a:
- Un archivo de configuración de Nginx
- Un pequeño número de binarios C++ en `282/` (más prominentemente `platform.dll`, el servicio backend HCMP, +57 KB)
---
## 5. El diff de Nginx: localización de errores sin costo