Skip to main content
CybersecurityVulnerability Management

NASA AIT-GUI Flaws Expose Spacecraft to Unauthorized Command Issuance

NASA control room with consoles and monitoring stations in a brightly-lit daytime setting.

"The blast radius of an unauthenticated POST is measured in issued instrument commands, not defaced pages," Cycode said.

What Cycode and the advisory record say

Security researchers at Cycode disclosed a chain of flaws in AIT-GUI, the browser-based operator console for NASA/JPL's open-source AMMOS Instrument Toolkit, in an advisory published August 13, 2026. The chain is tracked as GHSA-p9r8-2q67-fp86 and rated 9.4 on the CVSS v3.1 scale; the advisory states no CVE was assigned to that record. Separately, a second record — CVE-2026-60112 — was published to the National Vulnerability Database and the GitHub Advisory Database on July 29, 2026, credited to Saidakbarxon Maxsudxonov and rated 9.3 on CVSS v4. The two records disagree on which release fixes the defect.

How the AIT-GUI defects operate

The advisory says AIT-GUI's web server reads its configured host value and then discards it, binding the listener to the hardcoded address 0.0.0.0 on port 8080 by default. It exposes state-changing routes with no authentication, no authorization, and no cross-site request forgery (CSRF) protection. Two routes also build filesystem paths from unvalidated input. The issues are classified as CWE-306 (missing authentication), CWE-352 (CSRF), and CWE-22 (path traversal).

  • An unauthenticated party who can reach the port can issue arbitrary instrument and spacecraft commands via POST /cmd.
  • They can execute server-side scripts via POST /script/run, including files outside the intended directory via path traversal.
  • They can run command sequences via POST /seq, including out-of-directory files passed to a subprocess.

Cycode noted that because the routes accept application/x-www-form-urlencoded bodies, browsers treat those as CORS "simple" requests and deliver cross-origin POSTs without a preflight. "Captured network traffic from a real browser confirms the cross-origin POST is delivered with zero OPTIONS preflight requests, and the server processes it," the advisory said. Yuval Elbar, a security researcher at Cycode, summarized the danger: "A web GUI used to drive spacecraft and instrument commanding shipped a server that listens on every network interface, asks nobody for a password, and can be steered by any web page an operator happens to open."

Fixes in 2.5.2, and remaining authentication gaps

AIT-GUI 2.5.2 was released on August 12, 2026. According to the project changelog, it binds the configured host (defaulting to localhost), adds a before_request hook that compares a request's Origin or Referer against the server's own Host for POST, PUT, DELETE, and PATCH, and confines /script/run and /seq to their configured roots. The changelog states: "State-changing endpoints (POST/PUT/DELETE/PATCH) now reject cross-origin browser requests via a same-origin (Origin/Referer vs Host) check, mitigating CSRF. Non-browser clients that send neither header are unaffected."

However, The Hacker News reviewed tagged source for releases 2.4.1, 2.5.1, and 2.5.2 and reported that the root route still calls Sessions.create() and issues a session cookie to any request without a credential check, and that the command route accepts any request carrying that cookie. THN confirmed on August 20, 2026, that while 2.5.2 restricts where the console listens and blocks browser-driven cross-origin requests, it does not add authentication to the command, script, or sequence endpoints. The repository shows the unauthenticated session issuance present in both 2.5.1 and 2.5.2.

Distribution and advisory inconsistencies: PyPI, GitHub, and NVD

Practical patching is complicated by distribution and advisory records. The Hacker News checked PyPI on August 20, 2026 and confirmed the latest published release of the ait-gui package is 2.4.1, uploaded on July 27, 2023; versions 2.5.0, 2.5.1, and 2.5.2 do not appear in PyPI's release history. The 2.4.1 source on PyPI carries the same hardcoded 0.0.0.0 bind and the same unconfined path construction noted by the advisory, and PyPI lists no vulnerabilities for it. The advisory identifies the affected package ecosystem as pip.

Administrivia in the advisory ecosystem is likewise messy: GHSA-p9r8-2q67-fp86 does not appear in GitHub's global advisory database, and CVE-2026-60112 is listed there as unreviewed with no package, no affected version range, and no Dependabot support. Neither record appears in PyPI's vulnerability data for the package. The Cycode fix commit, authored by Yuval Elbar on July 10, 2026, carries a "Co-Authored-By" trailer naming Anthropic's Claude Opus 4.8 model and adds 18 regression tests that the commit message says fail on pre-fix code and pass after it.

What this means for NASA/JPL operators, security teams, and open-source consumers

  • NASA/JPL operators and mission teams: The advisory and follow-up reviews show routes that can accept unauthenticated commands if reachable. Neither record names a mission running the software, nor does either report exploitation.
  • Security teams and technologists: The mix of fixes (CSRF mitigation and path confinement) and the continued issuance of session cookies without credential checks mean teams must validate both network binding and authentication behavior in deployed instances rather than assuming a recent-tagged release has fully mitigated the risk.
  • Open-source consumers and maintainers: PyPI's absence of the 2.5.x releases and the advisory-record discrepancies mean package consumers cannot rely on a single, authoritative distribution or advisory entry — they should reconcile repository tags, published packages, and advisory entries before declaring systems patched.

The record here is concrete and narrow: unprotected routes that relay operator input to a command bus, public advisory evidence of high-severity flaws, a published in-repo fix with regression tests, and mismatches across distribution and advisory systems. Which deployments are actually exposed, which published artifacts reflect the patched code, and whether any mission systems use vulnerable builds remain answers the advisory record does not provide.

Read the original Hacker News report