Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-28695-craft-rce-bypass — Authentifizierte, **blinde** Remote-Code-Ausführung in Craft CMS. Fix für CVE-2026-28695 | Kitploit
Tools/GitHubGitHub/gbuyssens/cve-2026-28695-craft-rce-bypass
SchwachstellenanalyseExploitationWebanwendungs-ExploitationPost-ExploitationPenetrationstestsRed TeamingRemote-Access-ToolPayload-Entwicklung
GitHub
gbuyssens/cve-2026-28695-craft-rce-bypass

CVE-2026-28695-craft-rce-bypass

Authentifizierte, **blinde** Remote-Code-Ausführung in Craft CMS. Fix für CVE-2026-28695

Repository anzeigen
1vor 5 TagenNoch 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-28695 Patch-Bypass — Craft CMS ≤ 5.9.8 authentifizierte RCE (element-search)

CVSS 3.x : 8.8 HIGH   (ungefähr — verifizieren)
CWE      : CWE-502 (Unsafe Object Instantiation) + CWE-1336 (SSTI-Ursprung)
Basis    : CVE-2026-28695  (SSTI via create() + Symfony Process)
Fix      : Advisory-Fix e31e508 (beschränkt create() auf BaseObject) — HIER UMGANGEN
Betrifft : Craft CMS ≤ 5.9.8 mit angewendetem CVE-2026-28695-Fix

Authentifizierte, blinde Remote-Code-Ausführung in Craft CMS. Der offizielle Fix für CVE-2026-28695 beschränkt create() lediglich auf yii\base\BaseObject-Subklassen. Das yii\behaviors\AttributeTypecastBehavior-Gadget ist ein BaseObject, erreicht aber dennoch eine call_user_func()-Sink, sodass es den Filter überlebt. Über die Nicht-Twig- Aktion admin/actions/element-search/search ausgeliefert, umgeht es zudem CRAFT_ENABLE_TWIG_SANDBOX. Ein Content-Editor-Konto genügt.


Inhaltsverzeichnis

  • Zusammenfassung der Schwachstelle
  • Warum der CVE-2026-28695-PoC auf 5.9.8 tot ist
  • Der Bypass (Gadget-Chain)
  • Die escapeshellcmd-Einschränkung
  • Angriffskette
  • Betroffene Versionen
  • Dieses Repository
  • Verwendung
  • Behebung
  • Referenzen

Zusammenfassung der Schwachstelle

Crafts element-search-Controller deserialisiert Angreifer-JSON in lebende PHP-Objekte über Yii's Craft::createObject() / Instance-Maschinerie. Durch Anhängen eines AttributeTypecastBehavior, dessen attributeTypes ein Attribut auf das Callable [Psy\Readline\Hoa\ConsoleProcessus, execute] abbildet, und Auslösen des beforeSave-Events wird der Typecast zu:

call_user_func([Psy\Readline\Hoa\ConsoleProcessus, "execute"], "<CMD>")

Der Endpunkt antwortet immer mit HTTP 500 und liefert keine Befehlsausgabe zurück — die Ausführung ist blind.


Warum der CVE-2026-28695-PoC auf 5.9.8 tot ist

  • CVE-2026-28695 = SSTI via create() + Symfony Process, erreicht von einer Twig-Sink (typischerweise Entry Types → Title Format).
  • Auf 5.9.8 beschränkt der Fix-Commit e31e508 create() auf BaseObject-Subklassen, und das Ziel läuft zudem mit CRAFT_ALLOW_ADMIN_CHANGES=false (Einstellungen → 403) und CRAFT_ENABLE_TWIG_SANDBOX=true. Der dokumentierte Vektor ist dreifach geschlossen.
  • Lektion: Konfrontiere die exakte Version mit dem Fix-Commit, feuere nicht auf den CVE- Namen. Hier ist der Fix älter als der eingesetzte Build → suche nach einem Filter-Bypass, nicht dem rohen PoC.

Der Bypass (Gadget-Chain)

yii\behaviors\AttributeTypecastBehavior  ->  Psy\Readline\Hoa\ConsoleProcessus::execute

Doppelter Bypass, konstruktionsbedingt:

  1. Sandbox — element-search ist ein PHP-Objektpfad, kein Twig-Render. CRAFT_ENABLE_TWIG_SANDBOX beschränkt nur die Template-Engine, greift also nie.
  2. Patch — der Fix beschränkt create() auf BaseObject. AttributeTypecastBehavior → yii\base\Behavior → yii\base\BaseObject, erfüllt also die neue Einschränkung, bietet aber weiterhin eine Ausführungs-Sink. Der Fix schließt eine Klassenfamilie, nicht die BaseObject-Klasse.

Endpunkt:

POST /index.php?p=admin/actions/element-search/search
X-CSRF-Token: <dashboard csrf>
X-Requested-With: XMLHttpRequest
Accept: application/json

Die escapeshellcmd-Einschränkung

Hoa\ConsoleProcessus::execute() führt den Befehl durch escapeshellcmd() aus:

  • Neutralisiert: | && ; > < $() ' " → keine Verkettung, keine Pipes, keine Umleitung, keine klassische Bash-Reverse-Shell.
  • Passiert: : , /
  • Ergebnis: ein Binary + Argumente, keine Shell-Metazeichen.

Deshalb ist die Payload eine einzelne socat TCP-LISTEN,fork EXEC Bind-Shell (Argumente in : / , / /) statt einer Reverse-Shell.


Angriffskette

   Angreifer (Content Editor)               Craft CMS 5.9.8
        |                                        |
        |  GET /admin/login  (CSRF scrapen)      |
        |--------------------------------------->|
        |  POST users/login (jenny:******)       |
        |--------------------------------------->|
        |  GET /admin/dashboard (JS csrf)        |
        |<---------------------------------------|
        |  POST element-search/search            |
        |    AttributeTypecastBehavior gadget    |
        |    typecastBeforeSave = "<CMD>"        |
        |--------------------------------------->|  call_user_func(
        |  HTTP 500  (blind, keine Ausgabe)      |    [ConsoleProcessus,execute], CMD)
        |<---------------------------------------|  -> escapeshellcmd(CMD) -> exec
        |                                        |
        |  Orakel: "sleep 5" -> +~5s Latenz      |
        |  Shell:  socat TCP-LISTEN:4445 bind     |

Betroffene Versionen

StatusVersionen
AnfälligCraft CMS ≤ 5.9.8 mit dem CVE-2026-28695-Fix
HinweisDas Gadget erfordert eine authentifizierte CP-Sitzung

Dieses Repository

DateiRolle
exploit.pyPoC: Login → Timing-Orakel-Check → einzelner Befehl → Bind-Shell
README.mdDiese Datei

Verwendung

Erfordert requests (pip install requests).

# 1. Code-Ausführung beweisen (Timing-Orakel: sleep 5 muss ~5s hinzufügen)
python3 exploit.py http://example.lab --check

# 2. Einen einzelnen blinden Befehl abfeuern (ein Binary + Argumente, keine Metazeichen)
python3 exploit.py http://example.lab "sleep 5"

# 3. Eine persistente Bind-Shell als Web-Benutzer platzieren, dann verbinden
python3 exploit.py http://example.lab --bind 4445
nc IP or exemple.lab 4445

# benutzerdefinierte Anmeldedaten
python3 exploit.py http://exemple.lab -u User -p 'SecureP4$$!' --bind

Was passiert:

  1. Login-CSRF scrapen, am CP authentifizieren, Dashboard-Action-CSRF abrufen.
  2. Das AttributeTypecastBehavior-Gadget an element-search senden.
  3. --check beweist blinde Ausführung durch injizierte Latenz; --bind platziert einen socat-Listener.

Behebung

  1. Craft CMS auf eine Version aktualisieren, die die Objektinstanziierung auf allen deserialisierten Eingabepfaden einschränkt (nicht nur create()), und die element-search-Bedingungsbehandlung prüfen.
  2. CRAFT_ALLOW_ADMIN_CHANGES=false beibehalten und Content-Editor-Rechte minimieren — Auth ist hier die einzige Voraussetzung.
  3. Die gebündelte psy/psysh- (Hoa-)Abhängigkeit entfernen/aktualisieren, wo ein ConsoleProcessus::execute- Gadget erreichbar ist.
  4. WAF/Telemetrie: Alarm bei element-search/search-Bodies mit __class, as rce oder AttributeTypecastBehavior; Bursts von HTTP 500 von dieser Aktion markieren.

Referenzen

  • NVD — CVE-2026-28695 (Basis-SSTI)
  • Craft CMS Fix-Commit e31e508 (create() → BaseObject-Beschränkung)
  • Yii AttributeTypecastBehavior / yii\base\Security Docs

Haftungsausschluss

Dieses Projekt dient ausschließlich autorisierten Sicherheitstests, der Bildung und der defensiven Forschung. Sie sind dafür verantwortlich, geltende Gesetze und die Rules of Engagement Ihres Labs oder Kunden einzuhalten.

Tool herunterladen