
CVE-2025-40778 के लिए अवधारणा का प्रमाण: अनचाहे Additional Section रिकॉर्ड के माध्यम से BIND 9 DNS कैश पॉइज़निंग।
यह भेद्यता एक हमलावर को BIND रिज़ॉल्वर के DNS कैश को दूषित करने की अनुमति देती है, जिससे वैध उपयोगकर्ता बिना उनकी जानकारी के दुर्भावनापूर्ण IP पतों पर पुनर्निर्देशित हो जाते हैं।
हमला विश्वास का शोषण करने पर निर्भर करता है। पीड़ित रिज़ॉल्वर पर भरोसा करता है, और रिज़ॉल्वर (BIND) उन उत्तरों पर भरोसा करता है जो इसे आधिकारिक सर्वरों से प्राप्त होते हैं। दोष इसलिए मौजूद है क्योंकि BIND DNS प्रतिक्रिया के ADDITIONAL अनुभाग में प्रदान किए गए अनचाहे डेटा को संसाधित और कैश करता है, भले ही वह डेटा पूरी तरह से अलग, अनुरोधित न किए गए डोमेन का हो।
सेटअप: हमलावर एक विशिष्ट डोमेन (जैसे poc.lab) के लिए एक दुर्भावनापूर्ण आधिकारिक DNS सर्वर को नियंत्रित करता है। हमलावर लक्ष्य रिज़ॉल्वर (BIND) द्वारा इस डोमेन के लिए क्वेरी करने की प्रतीक्षा करता है।
इंजेक्शन: जब रिज़ॉल्वर poc.lab के लिए हमलावर के सर्वर से क्वेरी करता है, तो हमलावर poc.lab के लिए एक वैध उत्तर के साथ प्रतिक्रिया करता है लेकिन ADDITIONAL अनुभाग में एक अलग डोमेन (हमारे उदाहरण में www.hacker.com, लेकिन कोई भी वैध डोमेन हो सकता है, जैसे facebook.com) के लिए एक अनचाहा उत्तर शामिल करता है जो एक दुर्भावनापूर्ण IP पते की ओर इशारा करता है।
पॉइज़निंग: भेद्यता के कारण, रिज़ॉल्वर अनचाहे "Additional" रिकॉर्ड को स्वीकार करता है और इसे अपने कैश में संग्रहीत करता है। यह सत्यापित नहीं करता कि हमलावर के पास अनचाहे डोमेन पर कोई अधिकार नहीं है।
पीड़ित की क्वेरी: जब पीड़ित बाद में रिज़ॉल्वर से अनचाहे डोमेन () के लिए क्वेरी करता है, तो रिज़ॉल्वर अपने कैश से ज़हरीले रिकॉर्ड को लौटाता है, जिससे पीड़ित हमलावर द्वारा नियंत्रित दुर्भावनापूर्ण IP पते पर पुनर्निर्देशित हो जाता है।
[!IMPORTANT]
इस PoC के लिए मुख्य बातें
अप्रत्यक्ष हमला: पीड़ित कभी सीधे हमलावर से संवाद नहीं करता।
विश्वास लंगर समझौता: पीड़ित की मशीन सही ढंग से काम कर रही है; यह बुनियादी ढाँचा (DNS) है जो झूठ बोल रहा है।
तंत्र: शोषण कभी अनुरोधित न किए गए रिकॉर्ड को इंजेक्ट करने के लिए Additional Section के प्रसंस्करण का लाभ उठाता है।
[!CAUTION]
यह PoC केवल शैक्षिक उद्देश्यों के लिए है। सिस्टम से समझौता करने के लिए इस जानकारी का अनधिकृत उपयोग अवैध और अनैतिक है। किसी भी नेटवर्क या सिस्टम पर भेद्यता का परीक्षण या शोषण करने से पहले हमेशा अनुमति प्राप्त करें।
इस प्रदर्शन में निम्नलिखित वर्चुअल मशीनों (VMs) का उपयोग किया गया है:
निम्नलिखित कमांड Debian-आधारित सिस्टम पर CVE-2025-40778 भेद्यता प्रदर्शित करने के लिए BIND 9.21.12 के सेटअप के लिए हैं।
[!NOTE] यह प्रदर्शन BIND 9.21.12 का उपयोग करता है, जो इस भेद्यता से प्रभावित संस्करणों में से एक है।
प्रभावित संस्करणों की अन्य ज्ञात श्रेणियों में शामिल हैं:
- 9.11.0 – 9.16.50
- 9.18.0 – 9.18.39
- 9.20.0 – 9.20.13
- 9.21.0 – 9.21.12
निम्नलिखित कमांड आवश्यक निर्भरताएँ स्थापित करेंगे, BIND 9.21.12 का स्रोत कोड डाउनलोड करेंगे, इसे कंपाइल करेंगे, और इसे आपके सिस्टम पर स्थापित करेंगे।
sudo apt install -y build-essential pkg-config perl meson ninja-build libssl-dev libuv1-dev liburcu-dev libcap-dev liblmdb-dev libnghttp2-dev
cd /usr/local/src
sudo wget -O bind-9.21.12.tar.xz https://isc.mirrorservice.org/bind/9.21.12/bind-9.21.12.tar.xz
sudo tar -xf bind-9.21.12.tar.xz
cd bind-9.21.12
sudo meson setup build --prefix=/usr/local --sysconfdir=/etc --localstatedir=/var
sudo ninja -C build
sudo ninja -C build install
echo /usr/local/lib/x86_64-linux-gnu | sudo tee /etc/ld.so.conf.d/bind9-local.conf
sudo ldconfig
ldconfig -p | grep 'libdns-9.21.12' || true
/usr/local/sbin/named -v
यहाँ अंतिम कमांड का अपेक्षित आउटपुट है:
> student@student:/usr/local/src/bind-9.21.12$ /usr/local/sbin/named -v
BIND 9.21.12 (Development Release) <id:9bafc35>
BIND सर्वर शुरू करने से पहले, हमें named सेवा चलाने के लिए एक समर्पित उपयोगकर्ता और समूह बनाना होगा:
sudo groupadd --system named 2>/dev/null || true
sudo useradd --system --no-create-home --home /nonexistent --shell /usr/sbin/nologin --gid named named 2>/dev/null || true
चूँकि इस BIND स्थापना में डिफ़ॉल्ट कॉन्फ़िगरेशन फ़ाइलें नहीं आती हैं, हमें आवश्यक निर्देशिकाएँ मैन्युअल रूप से बनानी होंगी:
sudo mkdir -p /etc/bind
sudo mkdir -p /var/cache/bind
sudo mkdir -p /var/log/named
sudo mkdir -p /var/run/named
sudo chown -R named:named /var/cache/bind /var/log/named /var/run/named
sudo chmod 750 /var/cache/bind /var/log/named /var/run/named
अगला कदम नीचे दी गई सामग्री के साथ मुख्य कॉन्फ़िगरेशन फ़ाइल /etc/bind/named.conf बनाना है:
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.logging";
include "/etc/rndc.key";
विकल्प कॉन्फ़िगरेशन के लिए, निम्नलिखित सामग्री के साथ फ़ाइल /etc/bind/named.conf.options बनाएँ:
options {
directory "/var/cache/bind";
recursion yes;
allow-recursion { 192.168.174.0/24; };
allow-query { 192.168.174.0/24; };
listen-on { 192.168.174.131; 127.0.0.1; };
listen-on-v6 { none; };
dnssec-validation no;
forwarders {
1.1.1.1;
8.8.8.8;
};
minimal-responses no;
// for manual start
pid-file "/var/run/named/named.pid";
};
डोमेन poc.lab के लिए एक फ़ॉरवर्ड ज़ोन सेट करने के लिए जो क्वेरीज़ को मानक पोर्ट 53 पर 192.168.174.130 पर हमलावर के DNS सर्वर पर फ़ॉरवर्ड करे, हमें /etc/bind/named.conf.local फ़ाइल को इस प्रकार संपादित करना होगा:
zone "poc.lab" {
type forward;
forward only;
forwarders { 192.168.174.130; };
};
लॉगिंग कॉन्फ़िगरेशन के लिए, /etc/bind/named.conf.logging फ़ाइल बनाएँ जिसमें शामिल हो:
logging {
channel queries_file {
file "/var/log/named/queries.log" versions 3 size 20m;
severity info;
print-time yes;
print-category yes;
};
channel default_stderr {
stderr;
severity info;
print-time yes;
print-category yes;
};
category queries { queries_file; };
category default { default_stderr; };
};
अंत में, हमें RNDC कॉन्फ़िगर करना होगा:
sudo /usr/local/sbin/rndc-confgen -a -c /etc/bind/rndc.key
sudo chown root:named /etc/bind/rndc.key
sudo chmod 640 /etc/bind/rndc.key
सबसे पहले, हमें यह सुनिश्चित करना होगा कि पोर्ट 53 किसी अन्य सेवा द्वारा उपयोग नहीं किया जा रहा है (हमारे मामले में हमें systemd-resolved को अक्षम करना पड़ा):
sudo systemctl disable --now systemd-resolved || true
sudo ss -lunp | grep ':53' || true # To verify that port 53 is free
अंत में, हम निम्नलिखित कमांड का उपयोग करके BIND सर्वर प्रारंभ कर सकते हैं:
sudo /usr/local/sbin/named -g -u named -c /etc/bind/named.conf
[!TIP]
यह सत्यापित करने के लिए कि BIND सही ढंग से चल रहा है, हम निम्नलिखित कमांड का उपयोग कर सकते हैं:
ss -lunpt | grep :53
पीड़ित मशीन के लिए, हमें इसे अपने DNS रिज़ॉल्वर के रूप में BIND सर्वर का उपयोग करने के लिए सेट करना होगा। साथ ही, संघर्षों से बचने के लिए हमें systemd-resolved को निष्क्रिय करना होगा:
sudo systemctl disable --now systemd-resolved
फिर हम कमांड का उपयोग करके एक स्थिर DNS सर्वर सेट कर सकते हैं:
sudo rm -f /etc/resolv.conf
sudo nano /etc/resolv.conf
> nameserver 192.168.174.129
> options timeout:1 attempts:1
sudo chattr +i /etc/resolv.conf #block overwrites
हमलावर मशीन पर, हमें रिपॉजिटरी में प्रदान की गई स्क्रिप्ट (attacker.py) को चलाना होगा।
हमारे परिदृश्य में, हमलावर poc.lab डोमेन को नियंत्रित करता है। जब इसके या किसी उपडोमेन के लिए पूछा जाता है, तो वह अपने IP पते की ओर इशारा करते हुए एक अनचाहा उत्तर रिकॉर्ड (www.hacker.com) जोड़ता है।
जब पीड़ित डोमेन poc.lab के लिए क्वेरी करता है, तो BIND सर्वर अनुरोध को हमलावर के DNS सर्वर पर अग्रेषित करता है। हमलावर एक अनचाहे उत्तर रिकॉर्ड के साथ प्रतिक्रिया करता है जो BIND सर्वर के कैश को ज़हरीला कर देता है। जब पीड़ित www.hacker.com तक पहुँचेगा, तो वह वैध के बजाय हमलावर के IP पते पर पुनर्निर्देशित हो जाएगा।
यहाँ दोनों डोमेन के लिए पीड़ित द्वारा क्वेरी करने का एक प्रदर्शन है:
student@student:~/Desktop$ dig www.poc.lab +noall +answer
www.poc.lab. 60 IN A 192.168.174.99
student@student:~/Desktop$ dig www.hacker.com +noall +answer
www.hacker.com. 60 IN A 192.168.174.130
जैसा कि ऊपर दिखाया गया है, www.hacker.com के लिए पीड़ित की DNS क्वेरी हमलावर का IP पता (192.168.174.130) लौटाती है।
[!NOTE]
यह वीडियो समझाई गई भेद्यता का एक प्रदर्शन है: https://drive.google.com/file/d/1PATD0tUqw8-BipfSf6TkQQfnJBvV110Z/view?usp=sharing