Repository navigation
fix(geraeteabmeldung): ein Relay, der eine Abmeldung verschweigt (§12) - #14
Open
Henner4746 wants to merge 2 commits into
Open
Henner4746 wants to merge 2 commits into
Henner4746 wants to merge 2 commits into
Conversation
…dung verschweigt Befund aus dem Security-Review vom 18.10.2026 plus drei Wege, auf denen das abgemeldete Geraet mit Hilfe des Relays wieder mitliest (Buendel und Erstnachricht unter fremder Kennung, Loeschen auf 'Zielgeraet unbekannt'). §5/§6 berichtigt: Stufe 2 hielt gegen Verschweigen nicht. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Kontakte bekamen die signierte Geraeteliste nur ueber den Relay. Nahm er eine neue Fassung an und lieferte weiter die alte aus, verschluesselten sie weiter an das abgemeldete Geraet, und es schrieb weiter als Besitzer. Dazu drei Wege, auf denen es mit Hilfe des Relays mitlas, obwohl der Kontakt die neue Liste kannte (Buendel und Erstnachricht unter fremder Kennung, "Zielgeraet unbekannt" loescht die Sitzung). Umgesetzt nach docs/GERAETEABMELDUNG.md §12: App - Listenstempel le/lh/ke in jeder Nutzlast, die Liste als eigene Art 20. Verteilen nach jeder Aenderung (auch einmal an das abgemeldete Geraet), Ankuendigung merken, veraltete Liste: nur an Geraete, die sie gestempelt haben, und nur von ihnen annehmen. Heilen ueber ke, Widerspruch zweier Fassungen derselben Epoche mit Hinweis im Chat. - "Geraete verwalten" warnt, wenn der Relay die eigene letzte Aenderung nicht ausliefert. - Signierter Prekey zusaetzlich vom Geraeteschluessel signiert und beim Sitzungsaufbau gegen die Liste geprueft; Sitzungsnachweis in jeder PreKey-Nachricht (Basisschluessel aus dem Sitzungsdatensatz gelesen), beim Empfang geprueft, eine fremde neue Sitzung wird zurueckgenommen. Falsche Signaturen nie, fehlende bis zur Pflicht in 2.0.2. - "Zielgeraet unbekannt" laesst die Sitzung stehen, wenn das Geraet in der signierten Liste steht. Relay - spk_geraete_sig bei /register gegen die Liste geprueft (403), in einer neuen Spalte gespeichert, je Geraet in /prekey ausgeliefert. Nachladen nach einem Stempel hat eine eigene Bremse: mit der von Stufe 2 geteilt, verbrauchte der erste Stempel einer Kontaktanfrage die Minute, und ein Geraet, das darin zuruecksetzte, kam nicht mehr durch (sicherung_test.dart im Gesamtlauf). Abrufe, die nichts Neues bringen, entfallen (Fremde, Art 20, faellige Geraetepruefung, Pruefung nach dem Veroeffentlichen, wenn schon verglichen); zwei_geraete_test.dart lief sonst in die Herkunftsbremse des Test-Relays. Belege: geraeteliste_verschwiegen_test.dart (10 Faelle gegen eine verschweigende Attrappe), payload_listenstempel_test.dart, sitzungsdatensatz_test.dart, Oberflaechentest der Warnung, 8 Faelle in test_relay.py. Mutationsproben: App 20/20, Relay 6/6. Gesamtlauf: App 1542, Relay 176 gruen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Worum es geht
Kontakte bekamen die signierte Geräteliste nur über den Relay. Ein Relay, der eine neue Fassung annimmt, aber weiter die alte ausliefert und das abgemeldete Gerät nicht trennt, hebelte die Geräteabmeldung aus. Kontakte verschlüsselten weiter ans abgemeldete Tablet, und es schrieb weiter als Besitzer. Dazu kamen drei Wege, auf denen es mit Hilfe des Relays mitlas, obwohl der Kontakt die neue Liste schon kannte:
Spezifikation und Befund:
docs/GERAETEABMELDUNG.md§12 (Entwurf im ersten Commit, Umsetzung im zweiten).Was sich ändert
App (2.0.1)
le/lh/kein jeder Nutzlast, die Liste als eigene Art 20. Nach jeder Änderung wird sie verteilt, auch einmal an das gerade abgemeldete Gerät.keschreibt, bekommt die Liste nachgeschickt.geraeteNachweisPflicht).Relay
spk_geraete_sigwird bei/registergegen die Liste geprüft (sonst 403), in einer neuen Spalte gespeichert und je Gerät in/prekeyausgeliefert. Die Änderung ist rein additiv: alte Apps senden das Feld nicht, alte Relays ignorieren es.Reihenfolge beim Ausliefern
Erst den Relay (neue Spalte, wird beim Start per
ALTERangelegt), dann die App.Belege
app/test/net/geraeteliste_verschwiegen_test.dart: 10 Fälle gegen eine Attrappe, die Fassungen verschweigt und Geräte verleugnet, mit echten Gegenstellen (eigener libsignal-Speicher und Geräteschlüssel je Gerät)payload_listenstempel_test.dart,sitzungsdatensatz_test.dart, ein Oberflächentest der Warnung, 8 Fälle intest_relay.pyOffen
zwei_geraete_test.dartliegt mit rund 168 von etwa 186 erlaubten Abrufen knapp unter der Herkunftsbremse des Test-Relays. Eine eigene Sitzung schafft dort gerade Luft; ihr Commit kommt auf diesen Zweig nach.🤖 Generated with Claude Code