Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

फ़ीडसंपर्कगोपनीयता© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
cakephp-cache-unserialize — CakePHP 5.4.2 - उच्च - रिमोट - Unserialize - कैश इंजन बिना किसी क्लास allowlist के ऑब्जेक्ट्स को unserialize करते हैं | Kitploit
उपकरण/GitHubGitHub/abraxas/cakephp-cache-unserialize
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणसुरक्षा वर्चुअलाइजेशनवेब सुरक्षापेनिट्रेशन टेस्टिंगलैब और अभ्यास
GitHubabraxas/cakephp-cache-unserialize

cakephp-cache-unserialize

CakePHP 5.4.2 - उच्च - रिमोट - Unserialize - कैश इंजन बिना किसी क्लास allowlist के ऑब्जेक्ट्स को unserialize करते हैं

रिपॉजिटरी देखें
14 दिन पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Abraxas Labs - cakephp-cache-unserialize

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

cakephp-cache-unserialize

Class: Object injection Reach: Remote (Redis/Memcached write) / Local (FileEngine)

CakePHP 5.4.2 (887b641) - Cake Software Foundation

5.3.7 ने इसी कारण से Redis allowedClasses जोड़ा और बैकवर्ड कम्पैटिबिलिटी के लिए डिफ़ॉल्ट को true (सभी की अनुमति) पर छोड़ दिया। RedisEngine अब भी उस डिफ़ॉल्ट के लागू रहने पर सादा unserialize() कॉल करता है। FileEngine में कोई allowlist ही नहीं है। MemcachedEngine अब भी serialize को डिफ़ॉल्ट रूप से php पर रखता है।

जो कोई Redis पर cake_ key SET कर सकता है, या cache फ़ाइल लिख सकता है, वह एक serialized object रोपित करता है। अगला Cache::read (या कोई CacheSession लोड) उसे PHP worker में चलाता है।

IDअभी कोई CVE नहीं
ClassObject injection
ReachRemote जब Redis या Memcached हमलावर से लिखने योग्य हो। tmp/cache पर FileEngine के लिए Local।
CWECWE-502
CVSSHigh: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (cache store में लिखने की आवश्यकता है)। FileEngine AV:L है।
ProductCakePHP
Affected5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
Authcache store में लिखना (Redis SET, Memcached set, या कोई cache फ़ाइल)। लॉक-डाउन localhost Redis पर unauth HTTP नहीं।
LicenseGNU Affero GPL v3.0
Labकेवल 127.0.0.1

हमलावर क्या कर सकता है

ऐप cache में एक serialized object रोपित करें। अगला read worker में PHP चलाता है। यह lab एक witness फ़ाइल पर रुक जाता है। यह gadget chain या shell प्रदर्शित नहीं करता।

Lab-प्रमाणित (integrity)

  • Redis SET cake_<key> फिर Cache::read। डिफ़ॉल्ट prefix cake_ है। RedisEngine unserialize() सादा unserialize($value) उपयोग करता है जब allowedClasses डिफ़ॉल्ट true हो। एक रोपित LabMarker object जिसे LabMarker के रूप में instantiate किया गया और __wakeup ने witness फ़ाइल को PHP UID के रूप में लिखा।
  • FileEngine cache path के अंतर्गत {expiry}\n{serialize($obj)} रोपित करें। FileEngine::get() अब भी सादा unserialize($data) कॉल करता है। वही marker, वही witness। फ़ाइलनाम prefix प्लस key (cake_labfile) है।
  • Control: allowedClasses => false objects को अस्वीकार करता है। वही Redis payload __PHP_Incomplete_Class के रूप में वापस आया। __wakeup नहीं चला। witness फ़ाइल अनुपस्थित थी।

अनुमानित (यहाँ अभ्यास नहीं किया गया)

  • ऐप UID के रूप में RCE यदि autoload में कोई gadget हो। lab marker केवल एक flag फ़ाइल लिखता है।
  • CacheSession::read वही sink है जब session defaults => cache हो। प्रत्येक session लोड हमलावर-नियंत्रित cache bytes का unserialize बन जाता है।
  • MemcachedEngine serialize => php वही श्रेणी का bug है। इस lab ने Memcached शुरू नहीं किया।

बंद / यह leftover नहीं

  • स्टॉक cakephp/app पर unauthenticated HTTP जो Redis को उजागर नहीं करता।
  • लॉक-डाउन localhost Redis जिसमें हमलावर से कोई लेखन नहीं।
  • Reverse shell, कस्टम malware, या कोई सार्वजनिक gadget chain। इस pack में नहीं।
  • Redis allowedClasses => false (या कोई सख़्त सूची) पहले से ही objects को रोकता है जब कोई operator इसे सेट करता है। यह डिफ़ॉल्ट नहीं है।

वही pin leftovers: window SQLi, collate SQLi, attachment CRLF.

मैंने इसे कैसे खोजा

मैंने 2026 FunctionsBuilder / jsonValue / Smtp CRLF / View element लहर के बाद cakephp/cakephp 5.4.2 pin किया। RedisEngine विकल्प का दस्तावेज़ीकरण करता है और अब भी इसे खुला डिफ़ॉल्ट रखता है:

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

Read path:

    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 में कोई समतुल्य विकल्प नहीं है:

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

पहले से दर्ज गलत मोड़: लॉक-डाउन localhost Redis को unauth HTTP RCE मानना; कोई gadget chain भेजना; FileEngine को remote दावा करना; कोई reverse shell। नाटक। Oracle एक marker __wakeup है जो एक flag फ़ाइल लिखता है।

Lab

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

या

cd lab
./run.sh

लक्ष्य केवल 127.0.0.1:19470। Docker के अंदर tag 5.4.2 से लाइव CakePHP 5.4.2। Redis 7 protected-mode off के साथ ताकि host SET कर सके। PHP 8.3 ext-redis के साथ। Marker class LabMarker जिसमें __wakeup है जो /tmp/CAKEPHP-CACHE-UNSERIALIZE-WITNESS लिखता है। कोई 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

समाधान

Redis allowedClasses को डिफ़ॉल्ट रूप से false करें, या उन classes की सख़्त सूची पर जो ऐप वास्तव में संग्रहीत करता है। वही विकल्प FileEngine में जोड़ें और इसे get() में मानें। Memcached serialize को डिफ़ॉल्ट रूप से json करें। दस्तावेज़ित करें कि CacheSession cache engine की unserialize नीति विरासत में लेता है।

संदर्भ

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

लाइसेंस

GNU Affero GPL v3.0। देखें LICENSE। केवल Loopback lab। कोई वारंटी नहीं।

टूल डाउनलोड करें