
Pi-hole FTLDNS RCE (CVE-2026-35517) के लिए न्यूलाइन इंजेक्शन के माध्यम से पता लगाने की स्क्रिप्ट, जिसमें Python स्कैनर और संस्करण-आधारित भेद्यता मूल्यांकन के लिए Nmap NSE स्क्रिप्ट शामिल है।
Pi-hole के FTLDNS इंजन (संस्करण 6.0 से 6.5) में एक रिमोट कोड निष्पादन भेद्यता एक प्रमाणित हमलावर को dns.upstreams API पैरामीटर में न्यूलाइन वर्ण (\n) एम्बेड करके मनमाने dnsmasq कॉन्फ़िगरेशन निर्देश इंजेक्ट करने की अनुमति देती है। चूंकि dnsmasq शेल कमांड निष्पादित करने वाले निर्देशों का समर्थन करता है, यह न्यूलाइन इंजेक्शन सीधे होस्ट सिस्टम पर पूर्ण कमांड निष्पादन में परिवर्तित हो जाता है।
यह केवल एक बग नहीं है, यह इंजेक्शन का एक वर्ग है जो पांच अलग-अलग कॉन्फ़िगरेशन पैरामीटर को प्रभावित करता है, सभी को FTL v6.6 में एक साथ पैच किया गया है।
| फ़ील्ड | विवरण |
|---|---|
| CVE ID | CVE-2026-35517 |
| विक्रेता | Pi-hole प्रोजेक्ट |
| उत्पाद | FTLDNS (pihole-FTL) |
| प्रभावित संस्करण | 6.0 से < 6.6 |
| CVSS v3.1 | 8.8 (उच्च) |
| CWE | CWE-93 — CRLF अनुक्रमों का अनुचित न्यूट्रलाइज़ेशन |
| हमला वेक्टर | नेटवर्क |
| प्रमाणीकरण | आवश्यक (Pi-hole व्यवस्थापक/API पहुंच) |
| उपयोगकर्ता सहभागिता | कोई नहीं |
| प्रकाशित | 7 अप्रैल, 2026 |
| पैच किया गया | FTL v6.6 (3 अप्रैल, 2026 को जारी) |
| खोजकर्ता | T0X1Cx |
| संबंधित सलाहकार | GHSA-23w8-7333-p9fj, GHSA-wxhv-w77q-6qwp, GHSA-28g5-gg88-wh5m, GHSA-fqv2-qhfh-ghcj, GHSA-vfmq-jrx3-wv3c |
Pi-hole दुनिया में सबसे व्यापक रूप से तैनात DNS सिंकहोल्स में से एक है। यह आपके नेटवर्क पर बैठता है, DNS क्वेरी संभालता है, और विज्ञापनों और ट्रैकर्स को आपके ब्राउज़र तक पहुंचने से पहले DNS स्तर पर ब्लॉक करता है। इसका उपयोग अपार्टमेंट में सिंगल Raspberry Pi सेटअप से लेकर हजारों डिवाइसों की सुरक्षा करने वाले एंटरप्राइज़ डिप्लॉयमेंट तक हर जगह किया जाता है।
FTLDNS (Faster Than Light DNS) Pi-hole का मुख्य इंजन है। यह dnsmasq के आसपास एक कस्टम फोर्क/रैपर है, जो प्रसिद्ध DNS और DHCP सर्वर है। FTLDNS निम्नलिखित संभालता है:
यहाँ मुख्य विवरण है: FTLDNS अपने API के माध्यम से उपयोगकर्ता-आपूर्ति की गई सेटिंग्स से dnsmasq कॉन्फ़िगरेशन फ़ाइलें उत्पन्न करता है। यदि आप Pi-hole व्यवस्थापक पैनल में अपस्ट्रीम DNS सर्वर बदलते हैं, तो FTLDNS उस मान को dnsmasq कॉन्फ़िगरेशन फ़ाइल में लिखता है और सेवा को पुनरारंभ करता है। वह लेखन पथ वह जगह है जहाँ भेद्यता रहती है।
+------------------+ +------------------+ +------------------+
| व्यवस्थापक पैनल | API/Web | FTLDNS इंजन | कॉन्फ़िग लेखन | dnsmasq |
| (Web UI) | ---------> | (pihole-FTL) | ------------> | (DNS/DHCP) |
+------------------+ +------------------+ +------------------+
| |
सेटिंग्स पढ़ता है, कॉन्फ़िग पढ़ता है,
कॉन्फ़िग फ़ाइलों में नेटवर्क को DNS/DHCP
लिखता है सेवा प्रदान करता है
जब कोई व्यवस्थापक Pi-hole वेब UI या API के माध्यम से अपस्ट्रीम DNS सर्वर बदलता है, तो प्रवाह इस प्रकार है:
dns.upstreams पैरामीटर 8.8.8.8 या 1.1.1.1 जैसे DNS सर्वर पते स्वीकार करने के लिए है। FTLDNS इन्हें dnsmasq कॉन्फ़िग में server= निर्देश के रूप में लिखता है:
# सामान्य इनपुट: "8.8.8.8"
# उत्पन्न करता है:
server=8.8.8.8
समस्या: FTLDNS इनपुट में न्यूलाइन वर्णों को सैनिटाइज़ नहीं करता है। एक हमलावर इच्छित server= निर्देश से बाहर निकलने और पूरी तरह से नई कॉन्फ़िगरेशन पंक्तियाँ इंजेक्ट करने के लिए \n इंजेक्ट कर सकता है:
# दुर्भावनापूर्ण इनपुट: "8.8.8.8\ndhcp-option=6,evil.dns.server"
# उत्पन्न करता है:
server=8.8.8.8
dhcp-option=6,evil.dns.server
यह अकेले चिंताजनक होगा (DHCP विकल्प इंजेक्शन के माध्यम से DNS अपहरण)। लेकिन यह और भी बदतर हो जाता है।
dnsmasq dhcp-option नामक एक कॉन्फ़िगरेशन निर्देश का समर्थन करता है जो बाहरी स्क्रिप्ट को संदर्भित कर सकता है, और अधिक महत्वपूर्ण रूप से, यह कई निर्देशों का समर्थन करता है जो विशिष्ट परिदृश्यों में कमांड निष्पादित कर सकते हैं। शोषण श्रृंखला इस प्रकार दिखती है:
चरण 1: हमलावर Pi-hole में प्रमाणित होता है
(डिफ़ॉल्ट क्रेडेंशियल, कमज़ोर पासवर्ड, CSRF, समझौता किया गया सत्र)
चरण 2: हमलावर dns.upstreams अपडेट करने के लिए API अनुरोध भेजता है:
POST /api/dns/upstream
{
"upstreams": ["8.8.8.8\n<दुर्भावनापूर्ण dnsmasq निर्देश>"]
}
चरण 3: FTLDNS न्यूलाइन को सैनिटाइज़ किए बिना मान को dnsmasq कॉन्फ़िग फ़ाइल में लिखता है
चरण 4: इंजेक्ट किया गया dnsmasq निर्देश एक वैध कॉन्फ़िगरेशन विकल्प के रूप में पार्स किया जाता है
चरण 5: इंजेक्ट किए गए निर्देश के आधार पर, हमलावर प्राप्त करता है:
- DNS अपहरण (सभी DNS क्वेरी पुनर्निर्देशित करें)
- DHCP विषाक्तीकरण (क्लाइंट्स को दुर्भावनापूर्ण कॉन्फ़िग पुश करें)
- dnsmasq की स्क्रिप्टिंग क्षमताओं के माध्यम से कमांड निष्पादन
- मनमाने पथों पर फ़ाइल लेखन
मुख्य अंतर्दृष्टि यह है कि यह dnsmasq भेद्यता का शोषण करने के बारे में नहीं है, dnsmasq अपने डिज़ाइन के अनुसार काम कर रहा है। भेद्यता यह है कि FTLDNS अविश्वसनीय इनपुट को कॉन्फ़िगरेशन फ़ाइल में प्रवाहित होने देता है, एक कॉन्फ़िगरेशन प्रबंधन API को मनमाने कॉन्फ़िग इंजेक्शन बिंदु में बदल देता है।
शोधकर्ता (T0X1Cx) ने पाया कि समान न्यूलाइन इंजेक्शन पैटर्न पांच अलग-अलग FTLDNS कॉन्फ़िगरेशन पैरामीटर को प्रभावित करता है। यह एक प्रणालीगत मुद्दा है — कोड में हर जगह इनपुट सैनिटाइज़ेशन की कमी थी:
| सलाहकार | पैरामीटर | यह क्या नियंत्रित करता है |
|---|---|---|
| GHSA-23w8-7333-p9fj | dns.upstreams | अपस्ट्रीम DNS सर्वर |
| GHSA-wxhv-w77q-6qwp | dns.hostRecord | कस्टम DNS होस्ट रिकॉर्ड |
| GHSA-28g5-gg88-wh5m | dns.cnameRecords | CNAME रिकॉर्ड मैपिंग |
| GHSA-fqv2-qhfh-ghcj | dhcp.leaseTime | DHCP लीज़ अवधि |
| GHSA-vfmq-jrx3-wv3c | dhcp.hosts | स्थिर DHCP होस्ट असाइनमेंट |
इनमें से प्रत्येक पैरामीटर dnsmasq कॉन्फ़िगरेशन फ़ाइलों में लिखता है, और प्रत्येक न्यूलाइन वर्णों को सैनिटाइज़ करने में विफल रहा। FTL v6.6 में फिक्स ने उचित इनपुट सत्यापन जोड़ा जो सभी कॉन्फ़िगरेशन पैरामीटरों में न्यूलाइन वर्णों (और अन्य नियंत्रण वर्णों) को अस्वीकार करता है।