
كشّافات لثغرة تنفيذ الأوامر عن بُعد (RCE) في Pi-hole FTLDNS (CVE-2026-35517) عبر حقن أسطر جديدة، بما في ذلك ماسح بايثون وسكربت Nmap NSE لتقييم الثغرة بناءً على الإصدار.
ثغرة تنفيذ أوامر عن بُعد في محرك FTLDNS الخاص بـ Pi-hole (الإصدارات 6.0 حتى 6.5) تسمح لمهاجم مُصادَق بحقن توجيهات تكوين dnsmasq عشوائية عن طريق تضمين أحرف أسطر جديدة (\n) في معامل dns.upstreams الخاص بواجهة API. وبما أن dnsmasq يدعم توجيهات تنفذ أوامر شل، فإن حقن الأسطر الجديدة هذا يتحول مباشرة إلى تنفيذ أوامر كامل على النظام المضيف.
هذه ليست مجرد ثغرة واحدة، بل هي فئة من الحقن تؤثر على خمسة معاملات تكوين مختلفة، جميعها تم إصلاحها معًا في FTL v6.6.
| الحقل | التفاصيل |
|---|---|
| معرف CVE | CVE-2026-35517 |
| البائع | مشروع Pi-hole |
| المنتج | FTLDNS (pihole-FTL) |
| الإصدارات المتأثرة | 6.0 إلى < 6.6 |
| CVSS v3.1 | 8.8 (عالية) |
| CWE | CWE-93 — تحييد غير صحيح لتسلسلات CRLF |
| ناقل الهجوم | الشبكة |
| المصادقة | مطلوبة (وصول مسؤول/API لـ Pi-hole) |
| تفاعل المستخدم | لا شيء |
| تاريخ النشر | 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 بإنشاء ملفات تكوين dnsmasq من الإعدادات المقدمة من المستخدم عبر واجهة API الخاصة به. إذا قمت بتغيير خادم DNS العلوي في لوحة تحكم Pi-hole، يكتب FTLDNS تلك القيمة في ملف تكوين dnsmasq ويعيد تشغيل الخدمة. مسار الكتابة هذا هو مكان وجود الثغرة.
+------------------+ +------------------+ +------------------+
| لوحة التحكم | API/Web | محرك FTLDNS | كتابة التكوين | dnsmasq |
| (واجهة ويب) | ---------> | (pihole-FTL) | ------------> | (DNS/DHCP) |
+------------------+ +------------------+ +------------------+
| |
يقرأ الإعدادات، يقرأ التكوين،
يكتب إلى ملفات يخدم DNS/DHCP
التكوين على القرص للشبكة
عندما يغيّر مسؤول خوادم DNS العلوية من خلال واجهة ويب Pi-hole أو API، يكون التدفق كما يلي:
من المفترض أن يقبل معامل dns.upstreams عناوين خوادم DNS مثل 8.8.8.8 أو 1.1.1.1. يكتب FTLDNS هذه العناوين في تكوين dnsmasq كتوجيهات server=:
# إدخال عادي: "8.8.8.8"
# يُنشئ:
server=8.8.8.8
المشكلة: لا يقوم FTLDNS بتعقيم أحرف الأسطر الجديدة في الإدخال. يمكن للمهاجم حقن \n للخروج من توجيه server= المقصود وحقن أسطر تكوين جديدة تمامًا:
# إدخال خبيث: "8.8.8.8\ndhcp-option=6,evil.dns.server"
# يُنشئ:
server=8.8.8.8
dhcp-option=6,evil.dns.server
هذا وحده سيكون مقلقًا (اختطاف DNS عبر حقن خيارات DHCP). لكن الأمر يزداد سوءًا.
يدعم dnsmasq توجيه تكوين يسمى dhcp-option يمكنه الإشارة إلى سكربتات خارجية، والأهم من ذلك، يدعم عدة توجيهات يمكنها تنفيذ أوامر في سيناريوهات محددة. تبدو سلسلة الاستغلال كما يلي:
الخطوة 1: يتحقق المهاجم من هويته لدى Pi-hole
(بيانات اعتماد افتراضية، كلمة مرور ضعيفة، CSRF، جلسة مخترقة)
الخطوة 2: يرسل المهاجم طلب API لتحديث dns.upstreams:
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 تحققًا صحيحًا من الإدخال يرفض أحرف الأسطر الجديدة (وأحرف التحكم الأخرى) عبر جميع معاملات التكوين.
على مضيف Pi-hole:
على الشبكة (التأثير النهائي):
عوامل تضخيم المخاطر:
| الإصدار | الحالة |
|---|---|
| FTLDNS 6.6+ | تم الإصلاح |
| FTLDNS 6.0 – 6.5 | معرض للخطر |
| FTLDNS 5.x والإصدارات الأقدم | غير متأثر (بنية API مختلفة) |
للتحقق من إصدارك:
pihole -v
# أو
pihole-FTL --version
مخاطر عالية:
مخاطر متوسطة:
مخاطر أقل (لكن لا يزال يجب الإصلاح):
يكتشف سكربت Python مثيلات Pi-hole المعرضة للخطر من خلال التحليل القائم على الإصدار.
كيف يعمل:
لا يتم إرسال أي حمولات حقن. الاختبار للقراءة فقط وآمن تمامًا.
الاستخدام:
# تثبيت التبعيات
pip install -r requirements.txt
# هدف واحد (HTTP، المنفذ الافتراضي 80)
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1
# منفذ مخصص
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t pi.hole -p 8080
# وضع HTTPS (يتبدل تلقائيًا إلى المنفذ 443)
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 10.0.0.1 --https
# فحص جماعي من ملف
python CVE-2026-35517_PiHole_FTLDNS_detector.py -f targets.txt
# إخراج JSON محفوظ في ملف
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1 --json -o results.json
# مهلة زمنية متزايدة
python CVE-2026-35517_PiHole_FTLDNS_detector.py -t 192.168.1.1 --timeout 20
الخيارات:
| العلم | الوصف | الافتراضي |
|---|---|---|
-t, --target | عنوان IP أو اسم مضيف الهدف | — |
-f, --file | ملف يحتوي على الأهداف، هدف واحد لكل سطر (تعليقات # مدعومة) | — |
-p, --port | منفذ الهدف | 80 |
--https | استخدام HTTPS (يتبدل تلقائيًا إلى المنفذ 443 إذا كان المنفذ 80) | إيقاف |
--timeout | مهلة الاتصال بالثواني | 10 |
--json | الإخراج بتنسيق JSON | إيقاف |
-o, --output | حفظ النتائج في ملف | — |
مثال على الإخراج:
╔══════════════════════════════════════════════════════════════╗
║ CVE-2026-35517 - كاشف RCE في Pi-hole FTLDNS ║
║ حقن الأسطر الجديدة في dns.upstreams → تنفيذ أوامر ║
║ CVSS: 8.8 (عالية) | يؤثر على: FTLDNS 6.0 - 6.5 ║
╚══════════════════════════════════════════════════════════════╝
[*] فحص 192.168.1.1:80...
الهدف: 192.168.1.1:80
============================================================
[*] تم اكتشاف Pi-hole
الواجهة الإدارية: قابلة للوصول
API قابلة للوصول: نعم
إصدار FTL: v6.4
إصدار Core: v6.3
إصدار Web: v6.4
تقييم CVE-2026-35517:
[معرض للخطر] FTLDNS 6.4 ضمن النطاق المعرض للخطر (6.0 - 6.5).
قم بالترقية إلى FTL v6.6 أو أحدث فورًا.
الثغرات ذات الصلة (تم إصلاحها أيضًا في FTL v6.6):
[-] GHSA-wxhv-w77q-6qwp: RCE عبر حقن الأسطر الجديدة في dns.hostRecord
[-] GHSA-28g5-gg88-wh5m: RCE عبر حقن الأسطر الجديدة في dns.cnameRecords
[-] GHSA-fqv2-qhfh-ghcj: RCE عبر حقن الأسطر الجديدة في dhcp.leaseTime
[-] GHSA-vfmq-jrx3-wv3c: RCE عبر حقن الأسطر الجديدة في dhcp.hosts
المعالجة:
1. قم بترقية Pi-hole FTL إلى الإصدار 6.6 أو أحدث
2. نفّذ: pihole -up
3. تحقق باستخدام: pihole -v
4. راجع ضوابط الوصول إلى API وإعدادات المصادقة
5. افحص السجلات بحثًا عن علامات الاستغلال (تغييرات غير معتادة في تكوين DNS)
# تثبيت سكربت NSE
sudo cp CVE-2026-35517_PiHole_FTLDNS.nse /usr/share/nmap/scripts/
sudo nmap --script-updatedb
# فحص أساسي
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS <target>
# فحص منافذ Pi-hole الشائعة
nmap -p 80,443,8080,4711 --script CVE-2026-35517_PiHole_FTLDNS <target>
# فحص الشبكة الفرعية — العثور على جميع مثيلات Pi-hole على الشبكة
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS 192.168.1.0/24
# مدمج مع اكتشاف الإصدار
nmap -sV -p 80,443 --script CVE-2026-35517_PiHole_FTLDNS <target>
# فحص الأهداف من ملف
nmap -p 80 --script CVE-2026-35517_PiHole_FTLDNS -iL targets.txt
مثال على إخراج Nmap:
PORT STATE SERVICE
80/tcp open http
| CVE-2026-35517_PiHole_FTLDNS:
| VULNERABLE:
| Pi-hole FTLDNS RCE عبر تكوين DNS العلوي
| الحالة: معرض للخطر
| المعرّفات: CVE:CVE-2026-35517
| عامل الخطر: عالٍ (CVSS: 8.8)
| تاريخ الإفصاح: 2026-04-07
| معلومات إضافية:
| إصدار FTL: v6.4
| إصدار Core: v6.3
| إصدار Web: v6.4
| الاستشارات ذات الصلة التي تم إصلاحها أيضًا في FTL v6.6:
| GHSA-wxhv-w77q-6qwp (حقن dns.hostRecord)
| GHSA-28g5-gg88-wh5m (حقن dns.cnameRecords)
| GHSA-fqv2-qhfh-ghcj (حقن dhcp.leaseTime)
| GHSA-vfmq-jrx3-wv3c (حقن dhcp.hosts)
| المعالجة: قم بالترقية إلى Pi-hole FTL v6.6+ (pihole -up)
| المراجع:
| https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2026-35517
|_ https://github.com/pi-hole/FTL/security/advisories/GHSA-23w8-7333-p9fj
إذا كان لديك وصول SSH إلى مضيف Pi-hole:
# التحقق من إصدار FTL
pihole-FTL --version
# أو عبر واجهة سطر أوامر Pi-hole
pihole -v
# التحقق عبر API (v6)
curl -s http://pi.hole/api/info/version | python3 -m json.tool
# التحقق عبر API (v5)
curl -s http://pi.hole/admin/api.php?versions | python3 -m json.tool
إذا كان إصدار FTL بين 6.0 و 6.5 (شاملًا)، فأنت معرض للخطر.
ما الذي يجب البحث عنه:
/etc/dnsmasq.d/ و /etc/pihole/ بحثًا عن توجيهات غير متوقعةأوامر للتحقيق:
# التحقق من تكوينات dnsmasq بحثًا عن أسطر محقونة
grep -r "dhcp-option\|addn-hosts\|conf-file\|log-facility" /etc/dnsmasq.d/
# التحقق من التعديلات الأخيرة على التكوين
find /etc/pihole /etc/dnsmasq.d -mtime -7 -ls
# مراجعة سجل تصحيح أخطاء Pi-hole
pihole -d
# التحقق من العمليات الجارية بحثًا عن شذوذ
ps aux | grep -E "dnsmasq|pihole"
# مراجعة crontab بحثًا عن الاستمرارية
crontab -l
cat /etc/crontab
ls -la /etc/cron.d/
إجراء فوري — قم بالترقية الآن:
# تحديث Pi-hole (يشمل FTL و Web و Core)
pihole -up
# التحقق من التحديث
pihole -v
# يجب أن يكون إصدار FTL >= 6.6
إذا لم تتمكن من الترقية فورًا:
pihole -a -pإجراءات ما بعد التصحيح:
Kerem Oruç - مهندس أمن سيبراني