ASR-route stuurt de API-sleutel over kale http, de handleiding belooft alleen https #2758

Open
opened 2026-11-02 23:47:01 +00:00 by brenno · 1 comment
Owner

Gevonden in de kritische review van 03-11-2026 (beveiliging en documentatie).

Wat er misgaat

docs/TRANSCRIPTION_SETUP.md (r. 98–100) belooft: "An API key … travels only in the Authorization header, and only on https endpoints." De code houdt zich daar niet aan. Beide ASR-engines zetten de sleutel op elk verzoek, ongeacht het schema:

  • lib/services/transcription/asr_server_engine.dart r. 239–242 (batch, probe en upload);
  • lib/services/transcription/asr_live_server_engine.dart r. 390–393 (live, ws://).

Een LAN-profiel (trustedInternal) op http://192.168.x.y:8080, of ws:// voor live, met een ingevulde sleutel stuurt die sleutel dus onversleuteld over het netwerk. Iedereen op hetzelfde segment kan hem meelezen.

De instellingskaart zegt bij de audiotest bovendien "De API-sleutel gaat mee als beveiligde header" (transcription_server_section.dart r. 664). Over http is daar niets beveiligd aan.

De nabije buur doet het wél goed

AiClientService._allowOrThrow (lib/services/ai_client_service.dart r. 106–115) weigert elk verzoek dat niet https is en niet naar een loopback-literal gaat. De ASR-route volgt het egressontwerp van de AI-route, maar mist precies deze regel.

Voorstel

  • De sleutel gaat alleen mee over TLS (https/wss), of naar loopback (strategie loopbackDirect, waar het transport zelf elk niet-loopbackadres weigert).
  • Staat er een sleutel, maar is de route kale http/ws naar een ander apparaat, dan weigert de engine met een benoemde reden. Hem stilletjes weglaten zou een 401 opleveren met de melding "controleer de API-sleutel", en die wijst de verkeerde kant op.
  • De zin in de instellingskaart wordt eerlijk gemaakt.

Wat overeind moet blijven

  • LAN-http zónder sleutel blijft werken (de "vertrouwd intern adres"-route).
  • Loopback-http mét sleutel blijft werken.
  • https/wss mét sleutel ongewijzigd.

Test

Engine-toetsen met het nep-transport: LAN-http met sleutel → geen verzoek, wel een weigering; loopback met sleutel → header aanwezig; LAN zonder sleutel → verzoek zonder header. Live hetzelfde voor ws://.

Gevonden in de kritische review van 03-11-2026 (beveiliging en documentatie). ## Wat er misgaat `docs/TRANSCRIPTION_SETUP.md` (r. 98–100) belooft: *"An API key … travels only in the `Authorization` header, and only on `https` endpoints."* De code houdt zich daar niet aan. Beide ASR-engines zetten de sleutel op elk verzoek, ongeacht het schema: - `lib/services/transcription/asr_server_engine.dart` r. 239–242 (batch, probe en upload); - `lib/services/transcription/asr_live_server_engine.dart` r. 390–393 (live, `ws://`). Een LAN-profiel (`trustedInternal`) op `http://192.168.x.y:8080`, of `ws://` voor live, met een ingevulde sleutel stuurt die sleutel dus onversleuteld over het netwerk. Iedereen op hetzelfde segment kan hem meelezen. De instellingskaart zegt bij de audiotest bovendien *"De API-sleutel gaat mee als beveiligde header"* (`transcription_server_section.dart` r. 664). Over `http` is daar niets beveiligd aan. ## De nabije buur doet het wél goed `AiClientService._allowOrThrow` (`lib/services/ai_client_service.dart` r. 106–115) weigert elk verzoek dat niet `https` is en niet naar een loopback-literal gaat. De ASR-route volgt het egressontwerp van de AI-route, maar mist precies deze regel. ## Voorstel - De sleutel gaat alleen mee over TLS (`https`/`wss`), of naar loopback (strategie `loopbackDirect`, waar het transport zelf elk niet-loopbackadres weigert). - Staat er een sleutel, maar is de route kale `http`/`ws` naar een ander apparaat, dan **weigert** de engine met een benoemde reden. Hem stilletjes weglaten zou een 401 opleveren met de melding "controleer de API-sleutel", en die wijst de verkeerde kant op. - De zin in de instellingskaart wordt eerlijk gemaakt. ## Wat overeind moet blijven - LAN-`http` zónder sleutel blijft werken (de "vertrouwd intern adres"-route). - Loopback-`http` mét sleutel blijft werken. - `https`/`wss` mét sleutel ongewijzigd. ## Test Engine-toetsen met het nep-transport: LAN-`http` met sleutel → geen verzoek, wel een weigering; loopback met sleutel → header aanwezig; LAN zonder sleutel → verzoek zonder header. Live hetzelfde voor `ws://`.
Author
Owner

Opgepakt (kritische review 03-11-2026). Tak: fix/asr-key-tls-2758. Verwachte reikwijdte: lib/services/transcription/asr_server_engine.dart, asr_live_server_engine.dart, transcription_server_section.dart (zin audiotest), test/transcription/.

Opgepakt (kritische review 03-11-2026). Tak: fix/asr-key-tls-2758. Verwachte reikwijdte: lib/services/transcription/asr_server_engine.dart, asr_live_server_engine.dart, transcription_server_section.dart (zin audiotest), test/transcription/.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
LibreKAT/Ocideck#2758
No description provided.