Sicherheitslücke, die durch die invite-only-Entscheidung (CON-22) scharf wird.
Nachgesehen am 2026-09-09: scripts/dev-blossom.mjs prüft die Autorisierung nur beim Upload (kind 24242, t=upload, Signatur über den Hash). Der Lesepfad GET /<sha256> hat keinerlei Prüfung — wer die URL oder den Hash kennt, lädt die Datei, ohne npub, ohne Mitgliedschaft, ohne AUTH.
Da die Anhang-URLs im Seitentext stehen, heißt das für einen privaten Space: der Text ist geschützt, die Bilder und Dateien sind es nicht. Blossom kennt das NIP-29-Gruppenmodell nicht.
Mögliche Wege, zu entscheiden:
- Blossom-Server prüft beim
GET eine Autorisierung (t=get, BUD-01 sieht das vor) und fragt die Mitgliedschaft beim Relay ab — bindet den Dateiserver an das Relay
- Anhänge vor dem Upload verschlüsseln, Schlüssel im Revisionstext — schützt auch gegen den Betreiber des Dateiservers, macht Vorschaubilder und Verlinkung aber aufwendig
- Bewusst akzeptieren und offen dokumentieren, dass Anhänge nicht dem Gruppenschutz unterliegen — vertretbar nur, wenn die UI beim Anhängen darauf hinweist
Betrifft auch den Produktivbetrieb: Für CON-4 muss klar sein, welcher Blossom-Server unter welchen Regeln läuft.
Betroffen: scripts/dev-blossom.mjs, src/nostr/blossom.ts, docs/09-security-privacy.md
Task: d6hwjvhykh50bgb3qfjlg010
Sicherheitslücke, die durch die invite-only-Entscheidung (CON-22) scharf wird.
Nachgesehen am 2026-09-09: scripts/dev-blossom.mjs prüft die Autorisierung nur beim Upload (
kind 24242,t=upload, Signatur über den Hash). Der LesepfadGET /<sha256>hat keinerlei Prüfung — wer die URL oder den Hash kennt, lädt die Datei, ohne npub, ohne Mitgliedschaft, ohne AUTH.Da die Anhang-URLs im Seitentext stehen, heißt das für einen privaten Space: der Text ist geschützt, die Bilder und Dateien sind es nicht. Blossom kennt das NIP-29-Gruppenmodell nicht.
Mögliche Wege, zu entscheiden:
GETeine Autorisierung (t=get, BUD-01 sieht das vor) und fragt die Mitgliedschaft beim Relay ab — bindet den Dateiserver an das RelayBetrifft auch den Produktivbetrieb: Für CON-4 muss klar sein, welcher Blossom-Server unter welchen Regeln läuft.
Betroffen:
scripts/dev-blossom.mjs,src/nostr/blossom.ts, docs/09-security-privacy.mdTask: d6hwjvhykh50bgb3qfjlg010