
كشّافات لثغرة تنفيذ الأوامر عن بُعد (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:
على الشبكة (التأثير النهائي):