
HikCentral Professional - Fuite du code d'activation de licence pré-auth
Avant de télécharger quoi que ce soit, voici ce qui est déjà public :
| Source | Ce que cela nous apprend |
|---|---|
| Avis de sécurité Hikvision | « Absence de contrôles d'authentification sur les endpoints API », conseil de mise à niveau vers V2.6.3 / V3.0.1 |
| NVD CVE-2025-39247 | Métriques CVSS ; vecteur réseau, sans authentification, portée modifiée, confidentialité élevée |
| Résumés de Wiz, ZeroPath, SentinelOne, OffSeq, gbhackers, cybersecuritynews | Tous reprennent l'avis ; aucun détail technique, aucun PoC, aucun endpoint affecté nommé |
| Agrégateurs de PoC GitHub (poc-in-github, 0xMarcio/cve, etc.) | Aucun PoC indexé |
| Forums (ipcamtalk, cctvforum, reddit), indexeurs torrent | Aucun PoC, aucun installeur fuité ; ipcamtalk contient un fil sur l'utilisation de HikCentral mais rien en rapport avec un exploit |
Ainsi, à la date d'analyse, aucune publication technique publique n'expose la faille. Toute reproduction commence par un diff binaire.
Après la publication de CVE-2025-39247, la page de téléchargement de V2.6.2 a été retirée de la liste des téléchargements, mais le fichier sur le CDN n'a jamais été purgé. Le nom de fichier peut être retrouvé à partir d'un miroir tiers qui avait indexé la page avant son retrait (FileHorse — nom de fichier et MD5 publiés). Avec ce nom de fichier, un simple GET au CDN de Hikvision — en utilisant seulement un User-Agent de navigateur normal et un en-tête Referer correspondant — continue de le servir.```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"
Résultat :
- Taille : 1 314 043 792 octets (1,22 Go)
- MD5 : `76d42e7cb16dc0e177b9a35d0fed7ced` — correspond à la valeur publiée par FileHorse, confirmant qu’il s’agit de l’installateur authentique signé par Hikvision (et non d’un repackageage tiers)
- En-têtes de réponse CDN : `HTTP/2 200`, `content-type: application/x-msdownload`, `eo-cache-status: HIT`, `age: 2520395` (≈ 29 jours dans le cache EdgeOne de Tencent sans éviction)
**Observation secondaire méritant d’être signalée au PSIRT Hikvision :** le « retrait » de la page V2.6.2 est cosmétique. Le fichier orphelin est accessible sur le CDN sans authentification et sans portail d’URL signée. Les packs complets V2.5.1 et V2.6.0 répondent de la même manière.
### 2.2 Installateur corrigé (V2.6.3 Base Pack)
Actuellement lié depuis la page de téléchargement de V2.6.3 ; même méthode de récupération :```
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
Toujours lié depuis la page de téléchargement V2.6.2 (Hikvision souhaite que les utilisateurs l'appliquent) :``` 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
- Taille: 32,599,504 octets (31 Mo)
---
## 3. Extraction statique
Les trois sont des wrappers PE de type InstallShield. `7z` les décortique en deux passes:```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
Les deux installateurs se déploient en environ deux douzaines d’archives de payload nommées. Les répertoires de premier niveau révèlent l’architecture :
| Archive | Contenu |
|---|---|
246/Nginx + 246/www | Couche web Nginx (la porte d’entrée) et l’interface web SPA |
244/bin | Binaires de services C++ natifs + certificats |
240 | PostgreSQL inclus + scripts d’initialisation de la base de données |
238 | Runtime Bee* (BeeAgent, BeeGuard, …) |
282 | Services applicatifs et addons (l’essentiel du code backend C++) |
281, 283-284, 396, 398-399, 513, 520, 538-541, 573 | Addons plus petits, plugins, stubs de mise à niveau/désinstallation |
Point crucial : il n’y a aucun JAR/WAR Java nulle part. Le backend est en C++ sur Nginx — c’est important car cela indique d’emblée que toute faille d’authentification se trouvera dans des binaires compilés, et non dans du bytecode WAR/JAR où la décompilation est triviale.
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]]
Result : 239 fichiers modifiés dans des chemins communs. Répartition :
| Catégorie | Nombre | Commentaire |
|---|---|---|
| `246/www/*.js` (fragments d'interface Web) | ~200 | Principalement des hachages d'assets avec version incrémentée ; ignorer |
| `246/Nginx/conf/nginx_location.conf` | **1** | **Delta de configuration Nginx mono-fichier — commencez ici** |
| `246/Nginx*/install.bat` | 6 | Scripts d'installation, sans rapport |
| `244/bin/*.{exe,dll}` | 6 | Binaires natifs (`DistributionFilter.dll`, `FilterChain.dll`, outils multimédia) |
| `282/*.{exe,dll}` | 55 | Services applicatifs (le plus grand groupe — `platform.dll`, `PersonCredential.dll`, `baseacs.*`, …) |
| `240/bin/pg_*` | 6 | Reconstruction de Postgres, sans rapport |
| `284/hplugin/dahua_plugin/*` | 4 | Actualisation du SDK fournisseur (+10.97 MB) — sans rapport |
| `284/hplugin/onvif_plugin/*` | 4 | Actualisation du SDK fournisseur (+0.99 MB) — sans rapport |
| stubs de mise à niveau/désinstallation, rapporteurs de crash | ~30 | Reconstructions de timestamps PE de même taille, ignorer |
Après avoir éliminé l'actualisation du SDK fournisseur, la dérive des timestamps du système de build et les simples ajustements cosmétiques d'assets, les *véritables* deltas liés à la sécurité se réduisent à :
- Un fichier de configuration Nginx
- Un petit nombre de binaires C++ dans `282/` (principalement `platform.dll`, le service backend HCMP, +57 KB)
---
## 5. Le diff Nginx : localisation de bogue gratuite