В консоли NASA/JPL AIT-GUI нашли уязвимости для отправки команд без авторизации

Исследователи Cycode сообщили, что доступный по сети экземпляр AIT-GUI мог принимать команды для приборов и космических аппаратов от неавторизованного пользователя. Выпуск 2.5.2 ограничил сетевое прослушивание и защитил часть сценариев, однако проверка The Hacker News указывает, что полноценная аутентификация командных маршрутов в нём не появилась.

В консоли NASA/JPL AIT-GUI нашли уязвимости для отправки команд без авторизации

В браузерной операторской консоли AIT-GUI, входящей в открытый набор инструментов NASA/JPL AMMOS Instrument Toolkit, обнаружили цепочку уязвимостей, которая позволяет отправлять произвольные команды в шину управления аппаратами и приборами без аутентификации. О находке сообщили исследователи Cycode; их бюллетень GHSA-p9r8-2q67-fp86 оценён в 9,4 балла по CVSS v3.1.

AMMOS Instrument Toolkit предназначен для построения наземных систем обработки данных: они передают команды приборам и космическим аппаратам и получают телеметрию. AIT-GUI служит операторской веб-консолью, а затронутые маршруты передают команды в соответствующую шину.

По данным Cycode, до версии 2.5.2 веб-сервер AIT-GUI игнорировал заданный в конфигурации хост и по умолчанию слушал адрес 0.0.0.0 на порту 8080. Маршруты, изменяющие состояние системы, были доступны без аутентификации, авторизации и защиты от межсайтовой подделки запросов (CSRF). Два маршрута также формировали файловые пути из непроверенного ввода.

Если атакующий мог обратиться к этому порту, он мог отправлять команды через POST /cmd, запускать серверные скрипты через /script/run и выполнять последовательности команд через /seq. Для двух последних сценариев исследователи описали выход за пределы разрешённых каталогов с помощью манипуляций с путями.

Отдельный риск сохранялся даже при локальном или защищённом межсетевым экраном размещении консоли. Маршруты принимают данные в формате application/x-www-form-urlencoded, который браузеры считают «простым» CORS-запросом и отправляют без предварительного OPTIONS-запроса. Поэтому, как указано в бюллетене, оператор, имеющий доступ к консоли и открывший страницу злоумышленника, мог невольно отправить запрос к AIT-GUI из браузера.

Версия AIT-GUI 2.5.2 вышла 12 августа 2026 года. В журнале изменений проекта сказано, что она привязывает сервер к настроенному адресу, по умолчанию — к localhost, проверяет Origin или Referer для POST, PUT, DELETE и PATCH, а также ограничивает маршруты /script/run и /seq их заданными корневыми каталогами.

Вместе с тем The Hacker News при проверке исходного кода тегированной версии 2.5.2 обнаружил, что корневой маршрут по-прежнему создаёт сессию и выдаёт cookie без проверки учётных данных, а маршрут команд принимает запросы с такой cookie. Издание отмечает: обновление ограничивает, где слушает консоль, и блокирует межсайтовые запросы из браузера, но не добавляет аутентификацию к маршрутам команд, скриптов и последовательностей.

Сведения о затронутых версиях также расходятся. Cycode называет уязвимыми версии 2.5.1 и более ранние и считает исправлением 2.5.2. Отдельная уязвимость CVE-2026-60112, опубликованная 29 июля, описывает отсутствие аутентификации в версиях до 2.5.1 и указывает другой коммит с исправлением. По данным The Hacker News, неаутентифицированная выдача сессии присутствует в исходном коде и 2.5.1, и 2.5.2.

Кроме того, издание сообщило, что в PyPI последней опубликованной версией пакета ait-gui остаётся 2.4.1 от 27 июля 2023 года: версии 2.5.0, 2.5.1 и 2.5.2 в истории релизов PyPI не отображаются. В коде 2.4.1, по его проверке, также присутствуют прослушивание на 0.0.0.0 и небезопасное формирование путей в двух маршрутах.