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-46394-haxcms-git-command-injection — PoC e informe para CVE-2026-46394: inyección de comandos del sistema operativo en HAXcms Git.php (CWE-78). Solo para investigación de seguridad autorizada. | Kitploit
Herramientas/GitHubGitHub/shreyas-challa/cve-2026-46394-haxcms-git-command-injection
Análisis de VulnerabilidadesAnálisis de CódigoExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónPapers e InvestigaciónAprendizaje y Educación
GitHubshreyas-challa/cve-2026-46394-haxcms-git-command-injection

CVE-2026-46394-haxcms-git-command-injection

PoC e informe para CVE-2026-46394: inyección de comandos del sistema operativo en HAXcms Git.php (CWE-78). Solo para investigación de seguridad autorizada.

Ver Repositorio
1hace 3 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-46394 - Inyección de Comandos del SO en Git.php de HAXcms (CWE-78)

Prueba de concepto solo para pruebas de seguridad autorizadas e investigación. La vulnerabilidad descrita aquí está corregida en la última versión de HAXcms. Esta PoC se publica para que defensores e investigadores puedan verificar el problema en instancias no parcheadas que posean o tengan autorización explícita para probar.

CVECVE-2026-46394
ComponenteHAXcms PHP backend - system/backend/php/lib/Git.php
VulnerabilidadInyección de Comandos del SO (CWE-78)
GravedadAlta - CVSS 3.1 7.2 independiente / 8.1 encadenada con path traversal
EstadoCorregido. Afecta versiones anteriores al parche.
Proyectoelmsln/HAXcms
ReporteroShreyas Challa ([email protected])

Resumen

La biblioteca Git.php en el backend PHP de HAXcms construye cadenas de comandos del shell concatenando parámetros no sanitizados y los pasa directamente a proc_open(). De las 17 funciones que ejecutan comandos del shell, solo una (commit()) usa escapeshellarg(). Las 15 restantes interpolan la entrada del llamante directamente en la cadena de comandos. Cualquier valor que contenga metacaracteres del shell (&, ;, |, $(), comillas invertidas) que llegue a una de estas funciones resulta en ejecución arbitraria de comandos del SO como el usuario del servidor web. La única función escapada correctamente es la evidencia más clara de que el escape se entendió y simplemente se omitió en todas partes.

Causa raíz

Cada función vulnerable fluye a través de run() → run_command() → proc_open():

root@kitploit:~
// Git.php:408-411 - builds a raw command string
public function run($command) {
    return $this->run_command(Git::get_bin() . " " . $command);
}

// Git.php:383 - executes it via the system shell
$resource = proc_open($command, $descriptors, $pipes, $this->repo_path, $env);

Ejemplo vulnerable vs. la única función segura:

root@kitploit:~
// Git.php:574 - VULNERABLE (no escaping)
public function create_branch($branch) {
    return $this->run("branch $branch");
}

// Git.php:496 - SAFE (proves the author knew the pattern)
public function commit($message = "") {
    return $this->run("commit -av -m " . escapeshellarg($message));
}

Todas las funciones afectadas

FunciónLíneaComando del shell¿Escapada?
create_branch($branch)574branch $branchNO
delete_branch($branch)588branch -d $branchNO
checkout($branch)663checkout $branchNO
merge($branch)677merge $branch --no-ffNO
push($remote, $branch)785push $remote $branch $flagsNO
pull($remote, $branch)799pull $remote $branchNO
log($format)813log --pretty=format:"$format"NO
show($commit, $format)830show --pretty=format:"$format" $commitNO
list_tags($pattern)763tag -l $patternNO
clone_to($target)512clone --local $repo $targetNO
clone_from($source)527clone --local $source $repoNO
clone_remote($source)543clone $source $repoNO
set_remote($dest, $url)460remote add $dest $urlNO
rm($files)

Explotación en contexto

En el código base distribuido, estas funciones se invocan con valores extraídos de la configuración del servidor/sitio en lugar de directamente de los cuerpos de las solicitudes, por lo que la explotación se logra encadenando:

  • Path traversal → envenenamiento de configuración → RCE: use el path traversal de saveOutline para sobrescribir el site.json de un sitio, inyectando metacaracteres en metadata.site.git.branch. La siguiente llamada gitCommit() ejecuta push('origin', $branch) en HAXCMSSite.php:584, ejecutando el payload.
  • Cualquier otro mecanismo que escriba configuraciones de rama/remoto de git en un manifiesto llega a create_branch() (Operations.php:2762) o set_remote() (HAXCMSSite.php:625).

Ejecución de la PoC

La PoC maneja directamente la biblioteca Git.php real: crea un repositorio git temporal, llama a create_branch() con un payload que utiliza un separador de comandos del shell y confirma la ejecución verificando la existencia de un archivo de prueba escrito en disco. Se limpia a sí misma.

Requisitos previos

  • PHP CLI (7.x o 8.x)
  • git en PATH
  • Una copia del backend PHP de HAXcms
root@kitploit:~
git clone https://github.com/elmsln/HAXcms.git
git clone https://github.com/shreyas-challa/CVE-2026-46394-haxcms-git-command-injection.git
cd CVE-2026-46394-haxcms-git-command-injection

Ejecutar

Apunte la PoC al Git.php de su clon de HAXcms (variable de entorno o primer argumento); también auto-descubre haxcms-php/ colocado junto a ella:

root@kitploit:~
# Opción A - variable de entorno
HAXCMS_PHP=../HAXcms/haxcms-php/system/backend/php/lib/Git.php php poc_git_cmdi.php

# Opción B - argumento CLI
php poc_git_cmdi.php ../HAXcms/haxcms-php/system/backend/php/lib/Git.php

Funciona tanto en Unix (separador ;) como en Windows (separador &); la PoC selecciona el payload correcto para el SO del anfitrión automáticamente.

Salida de ejemplo

root@kitploit:~
================================================================
  HAXcms Git.php - OS Command Injection (CWE-78)
================================================================

STEP 3: Inject OS command via create_branch()
  Payload: test & echo COMMAND_INJECTION_PROOF > "...\PWNED.txt"

STEP 4: Verify injected command executed
  FILE FOUND!
    Content: COMMAND_INJECTION_PROOF
  COMMAND INJECTION CONFIRMED.

Remedio

Aplique escapeshellarg() a cada parámetro en las 15 funciones:

root@kitploit:~
// ANTES
public function create_branch($branch) {
    return $this->run("branch " . $branch);
}
// DESPUÉS
public function create_branch($branch) {
    return $this->run("branch " . escapeshellarg($branch));
}

Defensa en profundidad: valide los valores antes de que lleguen a la capa de git:

root@kitploit:~
function validateBranchName($branch) {
    return preg_match('/^[a-zA-Z0-9._\/-]+$/', $branch) && strpos($branch, '..') === false;
}

Actualice a la última versión de HAXcms, que contiene la corrección ascendente.

Divulgación responsable

Este problema fue reportado a los mantenedores de HAXcms y corregido antes de la publicación. La PoC se publica solo después de que un parche estuvo disponible. Úsela exclusivamente contra sistemas que posea o tenga autorización explícita para probar.

Aviso legal / de uso autorizado

Este material se proporciona para investigación defensiva, educación y pruebas de seguridad autorizadas. Ejecutarlo contra sistemas sin permiso explícito puede ser ilegal. Usted es el único responsable de cumplir con todas las leyes aplicables y de obtener autorización antes de las pruebas. Se proporciona 'tal cual' sin garantía (ver LICENSE).

Descargar herramienta
479
rm $files
NO
add_tag($tag, $msg)749tag -a $tag -m $msg$tag: NO, $msg: sí
commit($message)496commit -av -m $messageSÍ (la única segura)