CVE-2021-3156 — Baron Samedit
sudo में हीप-आधारित बफ़र ओवरफ़्लो → स्थानीय विशेषाधिकार उन्नयन
ITSOLERA साइबर सुरक्षा विभाग | रेड टीम इंटर्नशिप 2026
██████╗ █████╗ ██████╗ ██████╗ ███╗ ██╗ ███████╗ █████╗ ███╗ ███╗███████╗██████╗ ██╗████████╗
██╔══██╗██╔══██╗██╔══██╗██╔═══██╗████╗ ██║ ██╔════╝██╔══██╗████╗ ████║██╔════╝██╔══██╗██║╚══██╔══╝
██████╔╝███████║██████╔╝██║ ██║██╔██╗ ██║ ███████╗███████║██╔████╔██║█████╗ ██║ ██║██║ ██║
██╔══██╗██╔══██║██╔══██╗██║ ██║██║╚██╗██║ ╚════██║██╔══██║██║╚██╔╝██║██╔══╝ ██║ ██║██║ ██║
██████╔╝██║ ██║██║ ██║╚██████╔╝██║ ╚████║ ███████║██║ ██║██║ ╚═╝ ██║███████╗██████╔╝██║ ██║
╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═════╝ ╚═╝ ╚═╝
⚠️ केवल शैक्षिक / पृथक लैब उपयोग हेतु
सभी परीक्षण विशेष रूप से Docker लैब कंटेनर के अंदर ही किए जाने चाहिए।
वास्तविक, प्रोडक्शन या साझा प्रणालियों के विरुद्ध कभी न चलाएँ।
विषय-सूची
- CVE अवलोकन
- इस CVE को क्या विशेष बनाता है
- प्रोजेक्ट संरचना
- टीम डिलीवरेबल्स
- त्वरित आरंभ
- एक्सप्लॉइट कैसे काम करता है
- भेद्यता कैनरी परीक्षण
- exploit.py उपयोग
- लैब रीसेट और स्नैपशॉट
- पैच्ड बनाम भेद्य तुलना
- संदर्भ
CVE अवलोकन
| गुण | मान |
|---|
| CVE आईडी | CVE-2021-3156 |
| उपनाम | Baron Samedit |
| प्रकार | हीप-आधारित बफ़र ओवरफ़्लो → स्थानीय विशेषाधिकार उन्नयन |
| घटक | sudo — Linux विशेषाधिकार उपयोगिता (src/sudo.c में set_cmnd()) |
| CVSS v3 स्कोर | 7.8 उच्च |
| वेक्टर | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| भेद्य संस्करण | sudo 1.8.2 – 1.8.31p2 और 1.9.0 – 1.9.5p1 |
| पैच्ड संस्करण | sudo 1.9.5p2 (1.9 शाखा) / sudo 1.8.32 (1.8 शाखा) |
| लैब लक्ष्य संस्करण | Ubuntu 20.04 पर sudo 1.8.31 |
| पैच KB / एडवाइज़री | SA: https://www.sudo.ws/security/advisories/unescape_overflow/ |
| खोजकर्ता | Qualys Research Team |
| खुलासा | 2021-01-26 |
| वाइल्ड में मौजूद (कोड) तब से | ~2011-07-09 (sudo 1.8.2) — ~10 वर्षों तक अनपहचाना |
| आवश्यक प्रमाणीकरण | केवल स्थानीय उपयोगकर्ता — किसी sudo अनुमति की आवश्यकता नहीं |
इस CVE को क्या विशेष बनाता है
| गुण | CVE-2021-3156 | सामान्य Sudo LPE |
|---|
| sudoers प्रविष्टि आवश्यक | ❌ नहीं | ✅ हाँ |
| sudo समूह सदस्यता आवश्यक | ❌ नहीं | ✅ हाँ |
| कोई पूर्व sudo पहुँच आवश्यक | ❌ नहीं | ✅ हाँ |
| बिल्कुल नए उपयोगकर्ता खाते से काम करता है | ✅ हाँ | ❌ नहीं |
| अनुमति प्रणाली का दोहन | ❌ पूरी तरह दरकिनार करता है | ✅ इसका दुरुपयोग करता है |
| हमले की सतह | आर्गुमेंट पार्सर (प्री-ऑथ) | अनुमति जाँच |
मुख्य अंतर्दृष्टि: ओवरफ़्लो set_cmnd() में होता है — वह फ़ंक्शन जो आर्गुमेंट पार्स करता है — जो sudo द्वारा /etc/sudoers से परामर्श लेने से पहले चलता है। 10 सेकंड पहले बनाया गया शून्य अनुमतियों वाला खाता इसका दोहन कर सकता है।
प्रोजेक्ट संरचना
CVE-2021-3156-Project/
│
├── README.md ← you are here
│
├── lab/ ← Member 1: Lab Environment
│ ├── Dockerfile ← Ubuntu 20.04 + sudo 1.8.31 (pinned)
│ ├── docker-compose.yml ← vulnerable target + patched reference
│ ├── evidence_helper.sh ← pre/post-exploit state capture
│ ├── SETUP.md ← step-by-step VM/Docker guide
│ └── config_notes.md ← CVE conditions & container details
│
├── exploit/ ← Member 2: Exploit Development
│ ├── exploit.py ← Python LPE framework + canary test
│ └── payloads.txt ← heap overflow research notes
│
├── docs/ ← Member 3: Research & Documentation
│ ├── root_cause_analysis.md ← set_cmnd() deep dive + off-by-one
│ ├── references.md ← all sources, PoCs, CWE mapping
│ └── mitigation.md ← sudo upgrade + hardening checklist
│
├── proof/ ← Member 4: Evidence Collection
│ ├── screenshots/ ← exploitation screenshots
│ └── terminal_logs.txt ← command output template + logs
│
└── report/
└── CVE-2021-3156_Report.docx ← Member 4: Final professional report
टीम डिलीवरेबल्स
सदस्य 1 — लैब वातावरण और CVE सत्यापन
| फ़ाइल | विवरण |
|---|
lab/Dockerfile | sudo 1.8.31 पिन किया हुआ Ubuntu 20.04 (भेद्य); Python 3 स्थापित; labuser खाता बिना किसी sudo पहुँच के |
lab/docker-compose.yml | भेद्य लक्ष्य + पैच्ड Ubuntu 22.04 संदर्भ कंटेनर का समन्वय करता है |
lab/evidence_helper.sh | एक्सप्लॉइट से पहले/बाद सिस्टम की स्थिति (उपयोगकर्ता, sudo संस्करण, कैनरी) कैप्चर करने की Bash स्क्रिप्ट |
lab/SETUP.md | चरण-दर-चरण: बिल्ड → आरंभ → प्रवेश → sudo संस्करण सत्यापित करें → कैनरी चलाएँ → स्नैपशॉट |
lab/config_notes.md | बताता है कि गलत कॉन्फ़िगरेशन की आवश्यकता क्यों नहीं है, Docker सुरक्षा सेटिंग्स, क्रेडेंशियल संदर्भ |
सदस्य 2 — एक्सप्लॉइट विकास (PoC स्क्रिप्ट)
| फ़ाइल | विवरण |
|---|
exploit/exploit.py | पूर्ण Python फ्रेमवर्क: check_platform(), check_sudo_version(), run_canary_test(), get_system_info() + तीन एक्सप्लॉइट TODO स्टब्स (select_heap_strategy, build_overflow_argument, trigger_overflow_and_escalate) जिनमें blasty/worawit PoCs के विस्तृत संदर्भ शामिल हैं |
exploit/payloads.txt | हीप ओवरफ़्लो अवधारणाएँ, COMPRESSION_TRANSFORM समतुल्य (आर्गुमेंट संरचना), तीन हीप रणनीतियाँ, असफल प्रयास लॉग टेम्पलेट, डिटेक्शन सिग्नेचर |
नोट: नैतिक दिशानिर्देशों के अनुसार कार्यशील कर्नेल/हीप एक्सप्लॉइट कोड शामिल नहीं किया गया है।
exploit.py के TODO स्टब्स https://github.com/blasty/CVE-2021-3156
और https://github.com/worawit/CVE-2021-3156 को आधिकारिक सार्वजनिक PoCs के रूप में संदर्भित करते हैं
जिनका अध्ययन और एकीकरण आपकी टीम को करना है।
सदस्य 3 — मूल कारण विश्लेषण और शोध
| फ़ाइल | विवरण |
|---|
docs/root_cause_analysis.md | विस्तृत: set_cmnd() आकार बनाम कॉपी बेमेल, कोड उदाहरणों के साथ ऑफ-बाय-वन, पैच डिफ़, एक्सप्लॉइट श्रृंखला, मेट्रिक-दर-मेट्रिक CVSS 7.8, 10-वर्षीय समयरेखा, वितरण प्रभाव तालिका |
docs/references.md | Qualys एडवाइज़री, MITRE, NVD, sudo प्रोजेक्ट, blasty PoC, worawit PoC, ExploitDB, GTFOBins, CWE मैपिंग |
docs/mitigation.md | apt-get install --only-upgrade sudo, सत्यापन कैनरी, AppArmor हार्डनिंग, auditd निगरानी, हार्डनिंग तालिका |
सदस्य 4 — प्रमाण संग्रह, रिपोर्टिंग और एकीकरण
| फ़ाइल | विवरण |
|---|
proof/terminal_logs.txt | प्रमाण संग्रह टेम्पलेट (वास्तविक लैब आउटपुट से भरें) |
proof/screenshots/ | 7 आवश्यक स्क्रीनशॉट के लिए निर्देशिका |
report/CVE-2021-3156_Report.docx | 12-खंडीय पेशेवर रिपोर्ट: कवर पेज, कार्यकारी सारांश, CVE विवरण, मूल कारण विश्लेषण, CVSS विवरण, शोषण चरण, कोड स्पष्टीकरण, प्रमाण जाँच सूची, शमन, समयरेखा, संदर्भ, अस्वीकरण |
त्वरित आरंभ
1. लैब बिल्ड करें और आरंभ करें
cd CVE-2021-3156-Project/lab/
# Build the vulnerable image (downloads Ubuntu 20.04, pins sudo 1.8.31)
docker compose build
# Start both containers
docker compose up -d
# Confirm containers are running
docker compose ps
अपेक्षित:
NAME STATUS
baron_samedit_target running
baron_samedit_patched running
2. भेद्य कंटेनर में प्रवेश करें
docker exec -it baron_samedit_target bash
3. भेद्यता की स्थितियाँ सत्यापित करें
# Inside the container as labuser
whoami # Expected: labuser
id # Expected: uid=1000(labuser)...
sudo --version # Expected: Sudo version 1.8.31
sudo -l # Expected: Sorry, user labuser may not run sudo...
sudoedit -s '\' 2>&1 # Expected: NOT "usage:" → VULNERABLE
4. एक्सप्लॉइट की प्रतिलिपि बनाएँ और चलाएँ