
HikCentral Professional - Pre-Auth License ActiveCode-Leck
Bevor Sie etwas herunterladen: Was ist bereits öffentlich?
| Quelle | Was es uns sagt |
|---|---|
| Hikvision-Sicherheitshinweis | Fehlende Authentifizierungsprüfungen an API-Endpunkten, Empfehlung, auf V2.6.3 / V3.0.1 zu aktualisieren |
| NVD CVE-2025-39247 | CVSS-Metriken; Vektor: Netzwerk, keine Authentifizierung, Umfang geändert, Vertraulichkeit hoch |
| Zusammenfassungen von Wiz, ZeroPath, SentinelOne, OffSeq, gbhackers, cybersecuritynews | Alle wiederholen den Hinweis; keine technischen Details, kein PoC, kein betroffener Endpunkt genannt |
| GitHub PoC aggregators (poc-in-github, 0xMarcio/cve, etc.) | Kein PoC indiziert |
| Foren (ipcamtalk, cctvforum, reddit), Torrent-Indexierer | Kein PoC, keine durchgesickerten Installer; ipcamtalk hat einen Thread zur HikCentral-Nutzung, aber nichts Exploit-bezogenes |
Zum Analysedatum gibt es also keine öffentliche technische Dokumentation, die den Fehler offenlegt. Jede Reproduktion beginnt mit einem Binary-Diffing.
Nach der Veröffentlichung von CVE-2025-39247 wurde die Download-Seite für V2.6.2 aus der Liste entfernt, aber die Datei auf dem CDN wurde nie gelöscht. Der Dateiname kann von einem Drittanbieter-Mirror wiederhergestellt werden, der die Seite vor der Entfernung indexiert hat (FileHorse — veröffentlichter Dateiname und MD5). Mit diesem Dateinamen liefert ein einfacher GET-Request an das Hikvision-CDN — unter Verwendung nur eines normalen Browser-User-Agents und eines passenden Referer-Headers — die Datei immer noch aus.```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"
Ergebnis:
- Größe: 1.314.043.792 Bytes (1,22 GB)
- MD5: `76d42e7cb16dc0e177b9a35d0fed7ced` — stimmt mit dem von FileHorse veröffentlichten Wert überein und bestätigt das echte Hikvision-signierte Installationsprogramm (kein Drittanbieter-Rebundle)
- CDN-Antwort-Header: `HTTP/2 200`, `content-type: application/x-msdownload`, `eo-cache-status: HIT`, `age: 2520395` (≈ 29 Tage im Tencent EdgeOne-Edge-Cache ohne Verdrängung)
**Seitennotiz, die es wert ist, an Hikvision PSIRT gemeldet zu werden:** Die „Entfernung“ der V2.6.2-Seite ist kosmetisch. Die verwaiste Datei ist im CDN ohne Authentifizierung und ohne signierten URL-Zugang erreichbar. V2.5.1- und V2.6.0-Vollpakete reagieren auf die gleiche Weise.
### 2.2 Patched installer (V2.6.3 Base Pack)
Derzeit von der V2.6.3-Downloadseite verlinkt; gleiche Abrufmethode:```
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
Noch immer von der V2.6.2-Download-Seite verlinkt (Hikvision möchte, dass Benutzer es anwenden):``` 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
- Größe: 32,599,504 bytes (31 MB)
---
## 3. Statische Extraktion
Alle drei sind InstallShield-artige PE-Wrapper. `7z` extrahiert sie in zwei Durchgängen:```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
Beide Installer entpacken sich in etwa zwei Dutzend benannte Payload-Archive. Die obersten Verzeichnisse geben die Architektur preis:
| Archiv | Inhalt |
|---|---|
246/Nginx + 246/www | Nginx-Webschicht (die Eingangstür) und die SPA-Weboberfläche |
244/bin | Native C++-Dienstbinärdateien + Zertifikate |
240 | Gebündeltes PostgreSQL + DB-Initialisierungsskripte |
238 | Bee*-Laufzeit (BeeAgent, BeeGuard, …) |
282 | Anwendungsdienste und Addons (der Großteil des C++-Backend-Codes) |
281, 283–284, 396, 398–399, 513, 520, 538–541, 573 | Kleinere Addons, Plugins, Upgrade-/Deinstallations-Stubs |
Entscheidend ist, dass es keinerlei Java-JARs/WARs gibt. Das Backend besteht aus C++ auf Nginx – wichtig, weil es Ihnen sofort sagt, dass jede Authentifizierungsschwachstelle in kompilierten Binärdateien liegt, nicht in WAR/JAR-Bytecode, bei dem die Dekompilierung trivial ist.
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]]
Ergebnis: 239 geänderte Dateien in gemeinsamen Pfaden. Verteilung:
| Bucket | Anzahl | Kommentar |
|---|---|---|
| `246/www/*.js` (Web UI-Chunks) | ~200 | Meist Asset-Hashes durch Versionssprung; ignorieren |
| `246/Nginx/conf/nginx_location.conf` | **1** | **Single-File Nginx-Konfigurations-Delta – hier beginnen** |
| `246/Nginx*/install.bat` | 6 | Installationsskripte, irrelevant |
| `244/bin/*.{exe,dll}` | 6 | Native Binärdateien (`DistributionFilter.dll`, `FilterChain.dll`, Medientools) |
| `282/*.{exe,dll}` | 55 | Anwendungsdienste (der größte Cluster – `platform.dll`, `PersonCredential.dll`, `baseacs.*`, …) |
| `240/bin/pg_*` | 6 | Postgres-Neubau, irrelevant |
| `284/hplugin/dahua_plugin/*` | 4 | Vendor-SDK-Aktualisierung (+10,97 MB) – irrelevant |
| `284/hplugin/onvif_plugin/*` | 4 | Vendor-SDK-Aktualisierung (+0,99 MB) – irrelevant |
| Upgrade/Deinstallations-Stubs, Crash-Reporter | ~30 | Gleiche Größe – PE-Timestamp-Neubauten, ignorieren |
Nach Herausfiltern der Vendor-SDK-Aktualisierung, des Build-System-Zeitstempel-Drifts und rein kosmetischer Asset-Anhebungen reduzieren sich die *tatsächlichen* sicherheitsrelevanten Deltas auf:
- Eine Nginx-Konfigurationsdatei
- Eine kleine Anzahl von C++-Binärdateien in `282/` (am prominentesten `platform.dll`, der HCMP-Backend-Dienst, +57 KB)
---
## 5. Der Nginx-Diff: kostenfreie Fehlerlokalisierung
`diff -u nginx_location.conf` zwischen V2.6.2 und V2.6.3 erzeugt genau einen Hunk: einen brandneuen `location =`-Block in V2.6.3.```nginx
#禁止非127.0.0.1和::1的重置密码 ← "Forbid non-127.0.0.1/::1 password reset"
location = /ISAPI/Bumblebee/Platform/V0/Permission/ChangeDefaultUserPassword {
if ($remote_addr ~ ^(127\.0\.0\.1|::1)$) { set $allowed 1; }
if ($allowed != "1") { return 403; }
if ($scheme = "http") { proxy_pass http://http_backend; }
if ($scheme = "https") { proxy_pass http://http2_backend; }
}
Diese einzelne 21-zeilige Ergänzung ist der gesamte CVE-2025-39247-Fix auf der Frontdoor-Ebene, und sie sagt Ihnen alles: