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
cakephp-cache-unserialize — CakePHP 5.4.2 – Hoch – Remote – Unserialize – Cache-Engines deserialisieren Objekte ohne Klassen-Allowlist | Kitploit
Tools/GitHubGitHub/abraxas/cakephp-cache-unserialize
SchwachstellenanalyseExploitationWebanwendungs-ExploitationSicherheitsvirtualisierungWebsicherheitPenetrationstestsLabs & Praxis
GitHub
abraxas/cakephp-cache-unserialize

cakephp-cache-unserialize

CakePHP 5.4.2 – Hoch – Remote – Unserialize – Cache-Engines deserialisieren Objekte ohne Klassen-Allowlist

Repository anzeigen
1vor 4 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

Abraxas Labs - cakephp-cache-unserialize

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  cakephp-cache-unserialize

cakephp-cache-unserialize

Klasse: Object Injection Reichweite: Remote (Redis/Memcached Write) / Lokal (FileEngine)

CakePHP 5.4.2 (887b641) - Cake Software Foundation

5.3.7 fügte Redis allowedClasses aus diesem Grund hinzu und beließ den Standardwert aus Gründen der Abwärtskompatibilität bei true (alle erlauben). RedisEngine ruft weiterhin blankes unserialize() auf, wenn dieser Standardwert gilt. FileEngine hat überhaupt keine Allowlist. MemcachedEngine setzt serialize weiterhin standardmäßig auf php.

Wer einen cake_-Schlüssel auf Redis SETZEN oder eine Cache-Datei schreiben kann, platziert ein serialisiertes Objekt. Der nächste Cache::read (oder ein CacheSession-Ladevorgang) führt es im PHP-Worker aus.

IDnoch keine CVE
KlasseObject Injection
ReichweiteRemote, wenn Redis oder Memcached vom Angreifer beschreibbar ist. Lokal für FileEngine unter tmp/cache.
CWECWE-502
CVSSHoch: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (erfordert Schreibzugriff auf den Cache-Store). FileEngine ist AV:L.
ProduktCakePHP
Betroffen5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
AuthSchreibzugriff auf den Cache-Store (Redis SET, Memcached set oder eine Cache-Datei). Kein unauthentifiziertes HTTP auf ein abgeriegeltes localhost-Redis.
LizenzGNU Affero GPL v3.0
Labnur 127.0.0.1

Was ein Angreifer tun kann

Ein serialisiertes Objekt im App-Cache platzieren. Der nächste Lesevorgang führt PHP im Worker aus. Dieses Lab endet bei einer Witness-Datei. Es demonstriert keine Gadget-Chain und keine Shell.

Im Lab nachgewiesen (Integrität)

  • Redis SET cake_<key> dann Cache::read. Standardpräfix ist cake_. RedisEngine unserialize() verwendet blankes unserialize($value), wenn allowedClasses den Standardwert true hat. Ein platziertes LabMarker-Objekt, instanziiert als LabMarker, und __wakeup schrieb die Witness-Datei als PHP-UID.
  • FileEngine platziert {expiry}\n{serialize($obj)} unter dem Cache-Pfad. FileEngine::get() ruft weiterhin blankes unserialize($data) auf. Gleicher Marker, gleiche Witness. Der Dateiname ist prefix plus Key (cake_labfile).
  • Kontrolle: allowedClasses => false verweigert Objekte. Dieselbe Redis-Payload kam als __PHP_Incomplete_Class zurück. __wakeup wurde nicht ausgeführt. Die Witness-Datei fehlte.

Abgeleitet (hier nicht ausgeführt)

  • RCE als App-UID, wenn der Autoload ein Gadget enthält. Der Lab-Marker schreibt nur eine Flag-Datei.
  • CacheSession::read ist derselbe Sink, wenn Session defaults => cache gesetzt ist. Jeder Session-Ladevorgang wird zu einem Unserialize von angreiferkontrollierten Cache-Bytes.
  • MemcachedEngine serialize => php ist dieselbe Fehlerklasse. Dieses Lab hat Memcached nicht gestartet.

Geschlossen / nicht dieser Rest

  • Unauthentifiziertes HTTP auf ein Standard-cakephp/app, das Redis nicht exponiert.
  • Abgeriegeltes localhost-Redis ohne Schreibzugriff des Angreifers.
  • Reverse Shell, eigene Malware oder eine öffentliche Gadget-Chain. Nicht in diesem Paket.
  • Redis allowedClasses => false (oder eine enge Liste) blockiert Objekte bereits, wenn ein Betreiber es setzt. Es ist nicht der Standard.

Weitere Reste desselben Pins: window SQLi, collate SQLi, attachment CRLF.

Wie ich es gefunden habe

Ich habe cakephp/cakephp 5.4.2 nach der Welle 2026 FunctionsBuilder / jsonValue / Smtp CRLF / View element gepinnt. RedisEngine dokumentiert die Option und lässt sie weiterhin standardmäßig offen:

 * - `allowedClasses` ... Defaults to `true` (allow all) for backwards compatibility.
...
        'allowedClasses' => true,

Lesepfad:

    protected function unserialize(string $value): mixed
    {
        if (preg_match('/^[-]?\d+$/', $value)) {
            return (int)$value;
        }

        $allowedClasses = $this->getConfig('allowedClasses');
        if ($allowedClasses !== true) {
            return unserialize($value, ['allowed_classes' => $allowedClasses]);
        }

        return unserialize($value);
    }

FileEngine hat keine entsprechende Option:

        if ($data !== '' && !empty($this->_config['serialize'])) {
            $data = unserialize($data);

Bereits festgehaltene Irrwege: abgeriegeltes localhost-Redis als unauthentifizierte HTTP-RCE behandeln; eine Gadget-Chain ausliefern; behaupten, FileEngine sei remote; eine Reverse Shell. Theater. Das Orakel ist ein Marker-__wakeup, der eine Flag-Datei schreibt.

Lab

python3 cakephp-cache-unserialize-Abraxas-Labs.py

oder

cd lab
./run.sh

Ziel nur 127.0.0.1:19470. Live CakePHP 5.4.2 aus Tag 5.4.2 in Docker. Redis 7 mit deaktiviertem protected-mode, damit der Host SET ausführen kann. PHP 8.3 mit ext-redis. Marker-Klasse LabMarker mit __wakeup, die /tmp/CAKEPHP-CACHE-UNSERIALIZE-WITNESS schreibt. Keine Shell.

SUCCESS cakephp-cache-unserialize redis-default-wakeup=yes redis-denied-wakeup=no file-wakeup=yes pin=5.4.2 sha=887b641de9f7aba06071f98f17edcbc573cbcf63 how=live CAKEPHP-CACHE-UNSERIALIZE-WITNESS

Der Fix

Redis allowedClasses standardmäßig auf false setzen, oder auf eine enge Liste von Klassen, die die App tatsächlich speichert. Dieselbe Option zu FileEngine hinzufügen und sie in get() beachten. Memcached serialize standardmäßig auf json setzen. Dokumentieren, dass CacheSession die Unserialize-Richtlinie der Cache-Engine erbt.

Referenzen

  • github.com/cakephp/cakephp Tag 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • RedisEngine.php · FileEngine.php
  • Gleicher Pin: cakephp-window-sqli · cakephp-collate-sqli · cakephp-attachment-crlf
  • CWE-502

Lizenz

GNU Affero GPL v3.0. Siehe LICENSE. Nur Loopback-Lab. Keine Gewährleistung.

Tool herunterladen