Skip to content

Security Issue: Unhandled network exceptions in telemetry submitters kill the GR scheduler thread (F22+F20+F33-F36) #824

Description

@Marnick39

Affected: gr-satellites >= 1.0.0, <= 5.9.0
Severity: Medium (CVSS 3.1: 6.5, AV:A/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H)

Summary

Each of the telemetry-submitter blocks wraps a network call
(requests.post, requests.put, urlopen, WebSocket.send) inside
the GNU Radio handle_msg entry point without a try/except clause.
GNU Radio's thread-per-block scheduler catches uncaught exceptions
only at the very top of the thread function; once caught, the thread
exits and is not respawned. The block's input queue keeps accepting
messages — they just stay queued and never get processed.

Any transient network failure (DNS timeout, TCP RST, TLS handshake
failure, slow server, network change) raises, the handler thread
dies, and every subsequent telemetry submission is silently dropped.
The flowgraph keeps running so there's no visible error; the operator
believes they're uploading but the queue is being discarded.

Eight call sites, one fix family

Sub-finding File:line Trigger
F22a funcube_submit.py:58 requests.post() outside try/except
F22b pwsat2_submitter.py:83,112 requests.put() + .post() outside try/except
F22c submit.py:130-140 partial wrap; mid-stream errors escape
F20 bme_submitter.py:80-87 putPacket response JSON parse uncaught
F33 bme_submitter.py:50 authenticate response JSON parse uncaught
F34 bme_submitter.py:53 authenticate keyError on missing field
F35 bme_submitter.py:71-73 putPacket keyError on missing field
F36 bme_ws_submitter.py:31,48,49 no timeout= on connect/send/recv — connect is unwrapped, send/recv are wrapped at the handler level but a stalled server still hangs the thread indefinitely

The BME server in particular completes a TLS handshake then closes
the stream on anonymous connections, which raises ConnectionError
on the very first frame after every flowgraph start — operators
running BME submission hit the bug without any attacker present.

Live endpoint status (verified 2026-05-24)

Submitter Endpoint Live Exploit today
FUNcube AMSAT-UK http://data.amsat-uk.org/api/data/hex/... yes yes
BME https://gnd.bme.hu:8080/api/tokens yes yes (self-trigger)
SatNOGS DB https://db.satnogs.org/api/telemetry/ yes yes
PW-Sat2 http://radio.pw-sat.pl/api/authenticate host up, app gone historical only

Reproduction

disclosure/bundle-2026-05-24/v2/pocs/F22-submitter-robustness/:

  • poc_F22c_urllib.py — standalone, no external deps; mock server
    half-closes mid-response, demonstrates the unpatched handler crashes

Fix

Wrap each handle_msg body in try/except Exception with a log line,
and add timeout=10 to every requests.* and websocket call. Eight
sites in five files.

Long-form advisory

https://github.com/Marnick39/gr-satellites/blob/audit-advisories/disclosure/bundle-2026-05-24/v2/ADVISORY-05-F22-submitter-robustness.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions