Skip to content
KitploitKITPLOIT
ИнструментыЭксплойтыБлог
Log in
Отправить
ИнструментыЭксплойтыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

ЛентыКонтактыКонфиденциальность© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/hann1bl3l3ct3r/fuxapwn
Повышение привилегийРазведкаМеханизмы персистентностиАнализ уязвимостейЭксплуатацияЛатеральное перемещениеБезопасность SCADA/ICSЭксплуатация веб-приложенийСбор информацииТестирование на ПроникновениеРазработка Полезной Нагрузки
GitHubhann1bl3l3ct3r/fuxapwn

FUXAPWN

POC-эксплойт для CVE-2026-25895 FUXA: неаутентифицированный Path Traversal -> произвольная запись файлов -> RCE

Репозиторий
2214 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

CVE-2026-25895 — FUXA <= 1.2.9: неаутентифицированный обход пути (Path Traversal), ведущий к удалённому выполнению кода

Неаутентифицированная (pre-auth) произвольная запись файлов в FUXA — SCADA/HMI-платформе на базе Node.js. Цепочка доводится до удалённого выполнения кода через несколько отдельных примитивов, срабатывающих после записи. Работает даже при secureEnabled = true (при включённой аутентификации), поскольку у уязвимой конечной точки нет подключённого middleware.

Также доступно на ExploitDB: https://www.exploit-db.com/exploits/52568

ПолеЗначение
CVE IDCVE-2026-25895
Затронутые версииFUXA <= 1.2.9
Исправлено вFUXA 1.2.10
Вендорfrangoteam / FUXA
Вектор атакиСеть (HTTP/HTTPS)
АутентификацияНе требуется
ВоздействиеПроизвольная запись файлов, удалённое выполнение кода
CVSS v3.19.8 (Критический) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
ИсследовательAnthony Cihan (Hann1bl3L3ct3r)

Сводка

Конечная точка FUXA POST /api/upload (server/api/projects/index.js:193) регистрируется без middleware, в обход как проверки JWT/API-ключа secureFnc, так и шлюза прав администратора, применяемого ко всем остальным конечным точкам управления проектами. Внутри обработчика поле destination из тела JSON конкатенируется в путь файловой системы только с ведущим подчёркиванием и без какой-либо нормализации или проверки на выход за пределы каталога:

let destinationDir = path.resolve(runtime.settings.appDir, `_${destination}`);
filePath          = path.join(destinationDir, fullPath || fileName);
fs.writeFileSync(filePath, basedata, encoding);

Значение destination вида a/../../../../../etc (где a поглощает ведущее подчёркивание) заставляет path.resolve в Node подняться за пределы appDir в любое место, в которое может писать процесс FUXA. Поскольку перед fs.writeFileSync выполняется условный вызов fs.mkdirSync(dir, { recursive: true }), атакующий также может создавать родительские каталоги по мере необходимости.

В результате получается неаутентифицированный примитив произвольной записи файлов, доступный на стандартном HTTP-порту (1881) и эксплуатируемый до аутентификации независимо от того, включил ли администратор FUXA вход в систему.

Воздействие

Неаутентифицированный удалённый атакующий может:

  • Записать или перезаписать любой файл, доступный учётной записи службы FUXA
  • Заменить settings.js, чтобы добиться выполнения кода при следующем перезапуске FUXA
  • Добавить задание cron (/etc/cron.d/<file>) для выполнения кода в течение 60 секунд, если FUXA запущен от имени root (по умолчанию в Docker-образе вендора)
  • Установить HTTP-прослушиватель веб-шелла внутри процесса FUXA (Node)
  • Добавить открытые ключи SSH в /root/.ssh/authorized_keys или ~/.ssh/authorized_keys любого пользователя
  • Перечислить локальную учётную запись, под которой запущен FUXA, и другие учётные записи на хосте через побочный канал на уровне файловой системы

Это находка критической степени тяжести, эксплуатируемая до аутентификации, на ICS/SCADA-платформе, используемой для управления промышленными процессами.

Затронутые версии

ВерсияСтатус
<= 1.2.9Уязвима
1.2.10+Исправлена

Эксплуатация подтверждена на чистой установке FUXA 1.2.9 на Ubuntu Server.

Доказательство концепции (PoC)

Однофайловый скрипт на Python 3 с одной сторонней зависимостью (requests).

pip install requests
python3 fuxapwn.py --help

Быстрая неаутентифицированная разведка

Определите пользователя ОС, под которым работает сервис, доступность Node-RED и любые другие учётные записи на хосте, не записывая ничего необычного:

python3 fuxapwn.py -u http://target:1881 --mode recon \
    --probe-root --probe-home

Подтверждение примитива записи

Запишите нейтральную метку /tmp/healthcheck (без специфичных для CVE индикаторов компрометации в имени файла или содержимом):

python3 fuxapwn.py -u http://target:1881 --mode canary

RCE за один выстрел

Если FUXA работает от имени root, поместите файл cron, который сработает в течение 60 секунд без необходимости перезапуска FUXA:

python3 fuxapwn.py -u http://target:1881 --mode cron \
    --cron-cmd 'id > /tmp/fx.txt 2>&1'

Постоянный веб-шелл через замену settings.js

Установите HTTP-прослушиватель веб-шелла внутри процесса FUXA (Node) (активируется при следующем холодном запуске, поскольку require() кэширует модули), затем перейдите в интерактивный REPL после перезапуска FUXA:

# Stage the payload — replaces settings.js but preserves the target's
# real configuration (uiPort, allowedOrigins, secureEnabled, etc.) so the
# application keeps serving normally.
python3 fuxapwn.py -u http://target:1881 --mode webshell \
    --appdata /opt/FUXA/server/_appdata --ws-port 31337

# Once FUXA restarts, connect to the installed webshell.
python3 fuxapwn.py -u http://target:1881 --mode webshell-exec \
    --ws-host target --ws-port 31337 \
    --ws-path /_abc123 --ws-token <printed-above> --interact

Режимы работы

РежимНазначение
reconНеаутентифицированная утечка информации через GET /api/settings; определяет пользователя ОС, под которым работает сервис, по абсолютным путям; сообщает статус Node-RED; опциональные активные проверки --probe-root и --probe-home
canaryПодтверждение примитива записи файлов с нейтральным путём по умолчанию
settings-rceЗаменяет settings.js полезной нагрузкой, выполняющей настраиваемую команду при следующем холодном запуске FUXA
ssh-keyЗаписывает открытый ключ в authorized_keys целевого пользователя
dropПроизвольная запись файла в любой абсолютный путь
cronЗаписывает /etc/cron.d/<name> для получения RCE в течение 60 секунд без ожидания перезапуска FUXA (требуется запуск FUXA от имени root)
webshellУстанавливает HTTP-прослушиватель веб-шелла внутри процесса FUXA (Node) через замену settings.js (активируется при следующем холодном запуске)
webshell-execКлиент для уже установленного веб-шелла; одиночная команда или REPL через --interact

Полная справка по флагам для каждого режима: python3 fuxapwn.py --help.

Технические примечания

Неаутентифицированная утечка конфигурации

GET /api/settings (server/api/index.js:103) регистрируется без middleware и возвращает актуальную конфигурацию выполнения, слегка отредактированную (сервер удаляет secretCode и smtp.password перед отправкой). Остальные поля раскрывают абсолютные пути (appDir, workDir, userSettingsFile, logsDir, uploadFileDir), которые обычно идентифицируют служебного пользователя, а также nodeRedEnabled — прямой признак вторичного пути неаутентифицированного RCE (см. ниже).

Определение пользователя, под которым запущен сервис, на установках без root и Docker

Когда FUXA запускается через npm start под локальной учётной записью, пути установки не содержат имени пользователя (например, установка расположена в /opt, /tmp или общем /app), а /root/ недоступен для записи, PoC переключается на перебор /home/<candidate>/ с записью нулевых байтов.

Скачать инструмент