Фахівці з безпеки компанії Cycode розкрили ланцюжок вразливостей в AIT-GUI — браузерній операторській консолі для відкритого фреймворку AMMOS Instrument Toolkit (NASA/JPL), призначеного для побудови наземних систем керування космічними апаратами та інструментами. Ланцюжок, що відстежується як GHSA-p9r8-2q67-fp86 з оцінкою 9.4 за CVSS v3.1, дає змогу неавтентифікованому зловмиснику надсилати довільні команди на командну шину програмного забезпечення. Уразливості стосуються версій 2.5.1 і раніших; виправлення заявлено у версії 2.5.2, однак аналіз вихідного коду показує, що автентифікація на ключових ендпойнтах як і раніше відсутня. Випадків експлуатації в реальних умовах наразі не зафіксовано.
Технічна суть вразливостей
За даними дослідників, вебсервер AIT-GUI зчитує налаштоване значення хоста, але потім ігнорує його, прив’язуючи слухач до жорстко заданої адреси 0.0.0.0 на порту 8080. Це означає, що сервер приймає з’єднання з усіх мережевих інтерфейсів. При цьому всі маршрути, що змінюють стан системи, доступні без автентифікації, авторизації та захисту від міжсайтового підроблення запитів (CSRF).
Вразливості класифіковано за трьома категоріями CWE:
- CWE-306 — відсутність автентифікації для критичних функцій
- CWE-352 — міжсайтове підроблення запитів
- CWE-22 — обхід шляху (path traversal)
Неавтентифікований зловмисник, який має мережевий доступ до порту, може:
- надсилати довільні команди інструментам та космічним апаратам через
POST /cmd - запускати серверні скрипти через
POST /script/run, включаючи файли за межами дозволеного каталогу за допомогою обходу шляху - виконувати командні послідовності через
POST /seq, передаючи у підпроцес файли з довільних каталогів
Особливу небезпеку становить вектор атаки через CSRF. Оскільки маршрути приймають тіла запитів у форматі application/x-www-form-urlencoded, браузери розглядають їх як «простi» CORS-запити й надсилають без попереднього запиту OPTIONS. Як повідомляють дослідники, якщо оператор, який має доступ до консолі, відкриє в браузері сторінку, що контролюється зловмисником, міжсайтовий POST-запит буде доставлено та оброблено сервером — навіть у разі розгортання за мережевим екраном.
Неповнота виправлення у версії 2.5.2
Версія AIT-GUI 2.5.2 була випущена 12 серпня 2026 року. Згідно з журналом змін, у ній реалізовано три ключові поліпшення:
- прив’язка до налаштованого хоста (типово — localhost замість 0.0.0.0)
- перевірка Origin/Referer відносно Host для запитів POST, PUT, DELETE і PATCH для захисту від CSRF
- обмеження маршрутів
/script/runта/seqналаштованими кореневими каталогами
Проте аналіз вихідного коду версії 2.5.2 показав, що автентифікацію на ендпойнтах команд, скриптів і послідовностей не додано. Кореневий маршрут, як і раніше, викликає Sessions.create() і видає сесійну cookie будь-якому запиту без перевірки облікових даних, а командний маршрут приймає будь-який запит із цією cookie. Таким чином, виправлення зменшує площу атаки, але не усуває фундаментальну проблему відсутності автентифікації.
Конфлікт між записами про вразливості
Ситуацію ускладнює наявність паралельного запису про вразливість. CVE-2026-60112, оцінена у 9.3 за CVSS v4 і опублікована 29 липня 2026 року — за три тижні до звіту Cycode — описує той самий дефект відсутності автентифікації. Водночас записи розходяться у визначенні уражених версій: VulnCheck і запис NVD зазначають, що вразливість стосується версій до 2.5.1 включно і посилаються на коміт beb8fc0 як на патч, тоді як Cycode вважає 2.5.1 уразливою і називає 2.5.2 виправленою версією. При цьому аналіз вихідного коду обох версій показує, що неавтентифікована видача сесій присутня і в 2.5.1, і в 2.5.2.
Додатково, частина заявленого обсягу вразливості у звіті Cycode може бути перебільшена: аналіз вихідного коду версії 2.5.1 показав, що маршрут /script/run уже містить канонізацію та перевірку вкладеності шляху, які сам звіт і рекомендує. Необмежена конструкція шляху в 2.5.1 присутня лише на маршруті /seq.
Проблема розповсюдження через PyPI
Критично важливий аспект: остання версія пакета ait-gui на PyPI — це 2.4.1, завантажена 27 липня 2023 року. Версії 2.5.0, 2.5.1 і 2.5.2 відсутні в історії релізів PyPI. Це означає, що користувачі, які встановлюють пакет через pip, отримують версію з жорстко заданою прив’язкою до 0.0.0.0 і необмеженою конструкцією шляхів на обох маршрутах. При цьому PyPI не відображає інформацію про вразливості для цього пакета, а жоден із записів про вразливості не інтегрований у систему Dependabot.
Ширший контекст безпеки наземного ПЗ NASA
AIT-GUI — не єдиний компонент наземного програмного забезпечення NASA з невирішеними проблемами безпеки. У базі даних GitHub Advisory містяться записи про кілька вразливостей у споріднених проєктах, зокрема обхід шляху в AMMOS Instrument Toolkit (CVE-2026-47731), критичні вразливості в сервері секвенування NASA-AMMOS Aerie/PlanDev (CVE-2026-71214) та в еталонній реалізації Asynchronous Network Management System (CVE-2026-71289).
Окремої уваги заслуговує CVE-2024-35058 — критична вразливість віддаленого виконання коду у функції API wait бібліотеки NASA AIT-Core, опублікована в травні 2024 року. Вона стосується версій аж до 2.5.2 включно, і в її записі в GitHub Advisory Database досі зазначено відсутність виправлених версій.
Рекомендації
Організаціям, що використовують AIT-GUI, варто вжити таких заходів:
- Негайно перевірити, чи доступний порт 8080 AIT-GUI з недовірених мереж, і обмежити доступ засобами мережевої сегментації
- оновитися до версії 2.5.2 з репозиторію GitHub (не через PyPI, де актуальна версія недоступна), з урахуванням того, що це зменшує, але не усуває ризик
- розмістити перед AIT-GUI зворотний проксі-сервер із повноцінною автентифікацією, оскільки сам сервер не реалізує перевірку облікових даних
- обмежити доступ операторів консолі до зовнішніх вебресурсів, щоб мінімізувати ризик атак CSRF
- провести аудит розгорнутих екземплярів AIT-Core щодо CVE-2024-35058, для якої патч відсутній
Ситуація з AIT-GUI демонструє системну проблему: програмне забезпечення для керування критичною космічною інфраструктурою, первісно розроблене для ізольованих середовищ, виявляється вразливим під час зміни моделі розгортання. Розбіжності між записами про вразливості, відсутність актуальних версій у PyPI та неповнота патча в 2.5.2 означають, що єдиним надійним засобом захисту наразі лишається розміщення зовнішнього шару автентифікації перед усіма екземплярами AIT-GUI, незалежно від установленої версії.