Skip to main content

Ground Station CVE-2026-53451

| EUVDEUVD-2026-62497 CRITICAL
Path Traversal (CWE-22)
2026-08-19 GitHub_M
9.8
CVSS 3.1 · Vendor: GitHub_M
Share

Severity by source

Vendor (GitHub_M) PRIMARY
9.8 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
9.8 CRITICAL

Unauthenticated network-reachable Socket.IO commands (AV:N/PR:N/UI:N) chain deterministically to code execution and crash loop, yielding AC:L with full C/I/A impact.

3.1 AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

4
Patch available
Aug 19, 2026 - 16:17 EUVD
Source Code Evidence Fetched
Aug 19, 2026 - 15:38 vuln.today
Analysis Generated
Aug 19, 2026 - 15:38 vuln.today
CVE Published
Aug 19, 2026 - 14:45 cve.org
CRITICAL 9.8

DescriptionCVE.org

Ground Station is a browser-based suite for satellite tracking, SDR reception, hardware control, and telemetry decoding. Prior to version 0.4.13, the unauthenticated save-waterfall-snapshot Socket.IO command passes attacker-controlled snapshotName input from backend/handlers/entities/sdr.py to backend/server/snapshots.py, where os.path.join permits an absolute path or parent-directory traversal and writes attacker-controlled base64-decoded bytes outside backend/data/snapshots. An attacker can write a logging YAML file containing a logging.config.dictConfig callable factory, use the unauthenticated update-app-config operation to set log_config to that file, and invoke restart_service. During restart, backend/common/logger.py passes the YAML through resolve_log_config_path(), yaml.safe_load(), and logging.config.dictConfig(), which executes the factory with service privileges and can also cause a persistent crash loop. This issue is fixed in version 0.4.13.

AnalysisAI

Unauthenticated remote code execution in sgoudelis Ground Station before 0.4.13 arises from chaining a path-traversal file write with an insecure logging-config reload. The unauthenticated save-waterfall-snapshot Socket.IO command lets a remote attacker write attacker-controlled bytes anywhere on disk, then use the equally unauthenticated update-app-config and restart_service commands to load a malicious logging YAML that executes a Python callable factory with service privileges (or forces a persistent crash loop). Rated CVSS 9.8; no public exploit identified at time of analysis, though the fixing commit and advisory describe the full exploit chain.

Technical ContextAI

Ground Station is a browser-based suite (Python/Socket.IO backend) for satellite tracking, SDR reception, hardware control, and telemetry decoding. The root cause is CWE-22 (Improper Limitation of a Pathname to a Restricted Directory): in backend/server/snapshots.py the snapshotName from the SDR handler (backend/handlers/entities/sdr.py) was passed to os.path.join, which returns an absolute path unchanged and honors '../' sequences, so writes escaped the intended backend/data/snapshots directory. The second stage abuses Python's logging.config.dictConfig, which by design can instantiate arbitrary '()' callable factories from a config dict; because restart_service reloads a YAML log config via resolve_log_config_path(), yaml.safe_load(), and dictConfig() in backend/common/logger.py, an attacker-planted config file turns configuration reload into arbitrary code execution. The fix introduces backend/common/pathguard.py with allowlist roots and ensure_path_in_allowed_roots()/get_snapshots_root() to confine writes. CPE cpe:2.3:a:sgoudelis:ground-station identifies the single affected application.

RemediationAI

Upgrade to Ground Station 0.4.13, which adds backend/common/pathguard.py and confines snapshot/recording writes to allowlisted roots (Vendor-released patch: 0.4.13; see https://github.com/sgoudelis/ground-station/releases/tag/v0.4.13 and advisory GHSA-q35x-w3h6-36w8). Until patched, the highest-value compensating control is to remove network exposure of the Socket.IO interface: bind the service to localhost or place it behind an authenticating reverse proxy / VPN so the unauthenticated save-waterfall-snapshot, update-app-config, and restart_service commands are unreachable - the trade-off is loss of remote browser access. Additionally restrict the OS account running the backend to least privilege and make backend/data (and the log-config path used by resolve_log_config_path) non-writable by untrusted input where feasible, and monitor for unexpected files written outside backend/data/snapshots; these reduce blast radius but do not close the traversal by themselves, so patching remains essential.

Share

CVE-2026-53451 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy