
Скрипты обнаружения для Pi-hole FTLDNS RCE (CVE-2026-35517) через инъекцию перевода строки, включая сканер на Python и Nmap NSE-скрипт для оценки уязвимости на основе версии.
Удалённое выполнение кода в движке FTLDNS от Pi-hole (версии 6.0–6.5) позволяет аутентифицированному злоумышленнику внедрять произвольные директивы конфигурации dnsmasq, встраивая символы новой строки (\n) в параметр API dns.upstreams. Поскольку dnsmasq поддерживает директивы, выполняющие команды оболочки, эта инъекция новой строки напрямую приводит к полному выполнению команд на хост-системе.
Это не просто отдельная ошибка, а целый класс инъекций, затрагивающий пять различных параметров конфигурации, все из которых были исправлены вместе в FTL v6.6.
| Поле | Детали |
|---|---|
| ID CVE | CVE-2026-35517 |
| Вендор | Pi-hole Project |
| Продукт | 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-сверхфильтров (sinkhole) в мире. Он работает в вашей сети, обрабатывает 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) |
| (Web UI) | +------------------+ +------------------+
+------------------+ | |
Читает настройки, Читает конфигурацию,
записывает конфигурацию обслуживает DNS/DHCP
файлы на диск для сети
Когда администратор меняет вышестоящие DNS-серверы через веб-интерфейс или API Pi-hole, поток выглядит так:
Параметр 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-хостов |