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.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
cakephp-cache-unserialize — CakePHP 5.4.2 - Alto - Remoto - Unserialize - i motori di cache deserializzano oggetti senza allowlist di classi | Kitploit
Strumenti/GitHubGitHub/abraxas/cakephp-cache-unserialize
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebVirtualizzazione per la SicurezzaSicurezza WebPenetration TestingLab e Pratica
GitHub
abraxas/cakephp-cache-unserialize

cakephp-cache-unserialize

CakePHP 5.4.2 - Alto - Remoto - Unserialize - i motori di cache deserializzano oggetti senza allowlist di classi

Vedi Repository
138 giorni 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

Abraxas Labs - cakephp-cache-unserialize

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

Write-up: https://abraxaslabs.tech/research/cakephp-cache-unserialize

cakephp-cache-unserialize

Classe: Object injection Raggiungibilità: Remota (scrittura Redis/Memcached) / Locale (FileEngine)

CakePHP 5.4.2 (887b641) - Cake Software Foundation

La 5.3.7 ha introdotto allowedClasses per Redis proprio per questo motivo e ha lasciato il default a true (consenti tutto) per retrocompatibilità. RedisEngine chiama ancora unserialize() nudo quando vale quel default. FileEngine non ha alcuna allowlist. MemcachedEngine mantiene ancora serialize impostato a php come default.

Chiunque possa impostare una chiave cake_ su Redis, o scrivere un file di cache, piazza un oggetto serializzato. La successiva Cache::read (o un caricamento CacheSession) lo esegue nel worker PHP.

IDnessuna CVE al momento
ClasseObject injection
RaggiungibilitàRemota quando Redis o Memcached sono scrivibili dall'attaccante. Locale per FileEngine su tmp/cache.
CWECWE-502
CVSSAlto: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (richiede scrittura sul cache store). FileEngine è AV:L.
ProdottoCakePHP
Affetto5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Authscrittura sul cache store (Redis SET, Memcached set, o un file di cache). Non HTTP non autenticato verso un Redis localhost bloccato.
LicenzaGNU Affero GPL v3.0
Labsolo 127.0.0.1

Cosa può fare un attaccante

Piazzare un oggetto serializzato nella cache dell'applicazione. La lettura successiva esegue PHP nel worker. Questo lab si ferma a un file testimone. Non dimostra una gadget chain né una shell.

Dimostrato nel lab (integrità)

  • Redis SET cake_<key> poi Cache::read. Il prefisso di default è cake_. L'unserialize() di RedisEngine usa unserialize($value) nudo quando allowedClasses è il default true. Un oggetto LabMarker piazzato, istanziato come LabMarker, e __wakeup ha scritto il file testimone con l'UID PHP.
  • FileEngine piazza {expiry}\n{serialize($obj)} sotto il percorso della cache. FileEngine::get() chiama ancora unserialize($data) nudo. Stesso marker, stesso testimone. Il nome del file è prefix più la chiave (cake_labfile).
  • Controllo: allowedClasses => false rifiuta gli oggetti. Lo stesso payload Redis è tornato come __PHP_Incomplete_Class. __wakeup non è stato eseguito. Il file testimone era assente.

Inferito (non esercitato qui)

  • RCE con l'UID dell'app se l'autoload contiene un gadget. Il marker del lab scrive solo un file flag.
  • CacheSession::read è lo stesso sink quando la sessione ha defaults => cache. Ogni caricamento di sessione diventa un unserialize di byte di cache controllati dall'attaccante.
  • MemcachedEngine serialize => php è la stessa classe di bug. Questo lab non ha avviato Memcached.

Chiuso / non questo residuo

  • HTTP non autenticato verso un cakephp/app standard che non espone Redis.
  • Redis localhost bloccato senza scrittura da parte dell'attaccante.
  • Reverse shell, malware personalizzato o una gadget chain pubblica. Non in questo pacchetto.
  • Redis allowedClasses => false (o una lista ristretta) blocca già gli oggetti quando un operatore lo imposta. Non è il default.

Stessi residui del pin: window SQLi, collate SQLi, attachment CRLF.

Come l'ho trovato

Ho fissato cakephp/cakephp 5.4.2 dopo l'ondata 2026 di FunctionsBuilder / jsonValue / Smtp CRLF / View element. RedisEngine documenta l'opzione e la lascia comunque aperta per impostazione predefinita:

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

Leggi il percorso:

    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 non ha un'opzione equivalente:

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

Giri sbagliati già registrati: trattare un Redis localhost bloccato come RCE HTTP non autenticata; distribuire una gadget chain; affermare che FileEngine sia remoto; una reverse shell. Teatro. L'oracolo è un marker __wakeup che scrive un file flag.

Lab

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

o

cd lab
./run.sh

Prendi di mira solo 127.0.0.1:19470. CakePHP 5.4.2 live dal tag 5.4.2 all'interno di Docker. Redis 7 con protected-mode disattivato così che l'host possa eseguire SET. PHP 8.3 con ext-redis. Classe marker LabMarker con __wakeup che scrive /tmp/CAKEPHP-CACHE-UNSERIALIZE-WITNESS. Nessuna 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

La correzione

Impostare allowedClasses di Redis su false per impostazione predefinita, oppure su una lista ristretta di classi che l'applicazione memorizza effettivamente. Aggiungere la stessa opzione a FileEngine e rispettarla in get(). Impostare serialize di Memcached su json per impostazione predefinita. Documentare che CacheSession eredita la policy di unserialize del motore di cache.

Riferimenti

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

Licenza

GNU Affero GPL v3.0. Vedi LICENSE. Solo per laboratorio loopback. Nessuna garanzia.

Scarica lo strumento