v2.33.14 — Security Hardening, Activity Feed & TSCM Survey
Everything since v2.33.0 (2.33.1 to 2.33.14). Please read Before you upgrade: this release closes several security holes, and two of the fixes change behaviour.
Before you upgrade
- Remote agents need an API key to push data.
/controller/api/ingestnow refuses an agent without one. Set a key on each agent in Settings, and in the agent's owncontroller_api_keyconfiguration. - A password you did not choose must be changed. The shipped
admindefault is gone. With noINTERCEPT_ADMIN_PASSWORDset, first run generates a password, logs it and writes it toinstance/.initial_password. An install still on a generated password or onadminis sent to/change-passwordat login. - 433 MHz sensor units default to Metric. To keep the old behaviour, choose "Native (as each device reports)" in the sensor panel.
Security
- The
/controller/*API required no authentication. Anyone who could reach the port could list agents (and their API keys) and register or remove agents. It now requires a login. - Agent API keys were returned to clients.
GET /controller/agentsresponses carried every agent's key. - Agent push accepted unauthenticated data for agents registered without a key.
- WebSocket endpoints (
/ws/*, live RF and audio) skipped authentication. - Path traversal in
/offline/check-asset. It could reveal whether a file existed, but not its contents. - Session hardening:
- HttpOnly and SameSite cookies are set explicitly.
- Secure cookies are used under TLS.
instance/secret.keyis created with mode 0600.- Logout clears the whole session.
New
- Activity feed (Intel > Activity). Sightings from every mode that reports them in one stream, newest first:
- colour-coded by source;
- filterable by source, time window or a single device;
- pausable without losing anything.
- Volume and retention for sightings:
- A busy ADS-B feed is thinned so it can't flood the feed.
- Sightings are kept 24 hours by default (
INTERCEPT_OBSERVATION_RETENTION_HOURS,INTERCEPT_OBSERVATION_MAX_ROWS). - An API is included:
GET /observations, plus/observations/streamand/observations/stats.
- TSCM Survey workspace (Intel > TSCM Survey). One page walks a survey in order:
- the active baseline and its health;
- what the latest sweep shows that the baseline didn't;
- known devices;
- threats and findings;
- the report.
- Named SDR devices with per-device settings (Settings > SDR):
- A display name for each receiver.
- PPM correction, default gain and bias-T, applied by every mode on every start, and by remote agents.
- Requested in #269.
- Notes and tags on any device. They are kept across restarts and shown wherever the device appears. A note doesn't mark a device known-good.
- Copy buttons on ICAO, MMSI, MAC, BSSID and Meshtastic node identifiers.
- Elapsed times ("14 s ago") in live lists, with the exact time on hover.
- Empty lists say why they're empty: "rtl_433 running · 0 readings in 4 s", stopped, or the reason it failed to start, naming the missing tool or busy device.
- Kill All Processes from every page, in the global and mobile nav.
- 433 MHz unit selection: Metric, Imperial or Native.
Changed
- Hidden tabs stop polling clocks, countdowns and status. On the main page in pager mode this cut 925 interval callbacks a minute to 101, and 39 requests a minute to 3. Data streams and recording are unaffected.
- Install advice matches your platform. It no longer tells Linux users to use Homebrew.
- TSCM client reports state measurements rather than labels. For example, "-48 dBm, observed for 80 minutes (40 sightings)" replaces "Strong (Confidence: High)". The unexplained risk score and HIGH/ELEVATED ratings are gone from the client report. The JSON and CSV annexes keep them for the practitioner.
Fixed
- A TSCM sweep that detected nothing was reported as clear. It now reads INCONCLUSIVE and says why.
- Other TSCM report fixes:
- Every finding read "Minimal (Confidence: Low)".
- The CSV annex listed every device as informational with score 0.
- CSV cells could run as spreadsheet formulas.
- Sweep times were shown in UTC as if local.
- Reporting on an unfinished sweep failed.
- Mode lifecycle. Every mode is now tested for start, stop, restart, a missing tool, a double start and garbage on the decoder's output. That found 11 bugs, including:
- stopping Morse or OOK could hang;
- a failed start left the SDR marked busy until restart;
- one corrupt byte ended the receiver waterfall;
- Meshtastic with no USB device reported itself running;
- two Meshtastic serial ports could shut the server down.
- Several modes reported a missing tool as a vague server error, or a failed start as success.
- Kill All could stop partway.
- rtlamr ignored PPM correction and couldn't connect. The correction was passed as
rtl_tcp's port flag. - DSC call types were mislabelled. A routine call showed as DISTRESS and a real distress alert as INDIVIDUAL.
- ADS-B aircraft from a remote agent never cleared from the map.
- Meshtastic nodes sometimes appeared only after a reload.
- ACARS crashed with
Illegal instructionin the amd64 Docker image on CPUs without AVX-512. - Running the test suite no longer touches a real install's database or
.initial_password(#288).
Full detail in CHANGELOG.md.