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

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

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

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

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

श्रेणियाँ

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

cakephp-cache-unserialize

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

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

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

सभी देखें →

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

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

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

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

Abraxas Labs - cakephp-cache-unserialize

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

राइट-अप: https://abraxaslabs.tech/research/cakephp-cache-unserialize

cakephp-cache-unserialize

वर्ग: ऑब्जेक्ट इंजेक्शन पहुँच: रिमोट (Redis/Memcached राइट) / लोकल (FileEngine)

CakePHP 5.4.2 (887b641) - Cake Software Foundation

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

जो कोई Redis पर cake_ कुंजी SET कर सकता है, या कैश फ़ाइल लिख सकता है, वह एक सीरियलाइज़्ड ऑब्जेक्ट रख देता है। अगला Cache::read (या कोई CacheSession लोड) उसे PHP वर्कर में चला देता है।

IDअभी तक कोई CVE नहीं
वर्गऑब्जेक्ट इंजेक्शन
पहुँचरिमोट जब Redis या Memcached हमलावर से लिखने योग्य हो। tmp/cache पर FileEngine के लिए लोकल।
CWECWE-502
CVSSउच्च: 8.8 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (कैश स्टोर में लिखने की आवश्यकता है)। FileEngine AV:L है।
उत्पादCakePHP
प्रभावित5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
प्रमाणीकरणकैश स्टोर में लिखना (Redis SET, Memcached set, या कैश फ़ाइल)। लॉक-डाउन किए गए localhost Redis पर अनधिकृत HTTP नहीं।
लाइसेंसGNU Affero GPL v3.0
लैबकेवल 127.0.0.1

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

ऐप कैश में एक सीरियलाइज़्ड ऑब्जेक्ट रखें। अगला रीड वर्कर में PHP चला देता है। यह लैब एक witness फ़ाइल पर रुकती है। यह गैजेट चेन या शेल प्रदर्शित नहीं करती।

लैब-प्रमाणित (इंटीग्रिटी)

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

अनुमानित (यहाँ प्रयोग नहीं किया गया)

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

बंद / यह अवशेष नहीं

  • स्टॉक cakephp/app पर अनधिकृत HTTP जो Redis को उजागर नहीं करता।
  • लॉक-डाउन किया गया localhost Redis जिसमें हमलावर से कोई राइट नहीं।
  • रिवर्स शेल, कस्टम मैलवेयर, या सार्वजनिक गैजेट चेन। इस पैक में नहीं।
  • Redis allowedClasses => false (या एक सख्त सूची) पहले से ही ऑब्जेक्ट्स को ब्लॉक करता है जब कोई ऑपरेटर इसे सेट करता है। यह डिफ़ॉल्ट नहीं है।

वही पिन अवशेष: window SQLi, collate SQLi, attachment CRLF.

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

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

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

पढ़ने का पथ:

    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 एक मार्कर __wakeup है जो एक flag फ़ाइल लिखता है।

Lab

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

or

cd lab
./run.sh

लक्ष्य केवल 127.0.0.1:19470। Docker के अंदर टैग 5.4.2 से लाइव CakePHP 5.4.2। Redis 7 protected-mode बंद के साथ ताकि होस्ट SET कर सके। PHP 8.3 ext-redis के साथ। मार्कर क्लास LabMarker जिसमें __wakeup है जो /tmp/CAKEPHP-CACHE-UNSERIALIZE-WITNESS लिखता है। कोई शेल नहीं।

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 करें, या ऐप वास्तव में जिन क्लासेस को संग्रहीत करता है उनकी एक सीमित सूची पर सेट करें। FileEngine में भी यही विकल्प जोड़ें और get() में इसका पालन करें। Memcached के serialize को डिफ़ॉल्ट रूप से json करें। यह दस्तावेज़ित करें कि CacheSession कैश इंजन की unserialize नीति को विरासत में लेता है।

संदर्भ

  • github.com/cakephp/cakephp टैग 5.4.2 (887b641de9f7aba06071f98f17edcbc573cbcf63)
  • RedisEngine.php · FileEngine.php
  • समान पिन: cakephp-window-sqli · cakephp-collate-sqli · cakephp-attachment-crlf
  • CWE-502

लाइसेंस

GNU Affero GPL v3.0. देखें LICENSE। केवल लूपबैक लैब। कोई वारंटी नहीं।

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