Technischer Bericht
Google Messages — Funde & Analyse
Zusammenfassung & Schwere
Google Messages (com.google.android.apps.messaging) wurde auf einem Samsung Galaxy A26 (SM-A266B), Android 16, Build BP4A.251205.006, mit dem Paket messages.android_20260910_03_RC02.phone_samsung_dynamic (Versionscode 323089900) untersucht. Transport im Test war RCS. Die Analyse ist statisch, gegen die exakt installierte APK (Basis-APK SHA-256 9e869a68…ff60b2, Signatur als echtes Google-Build geprüft), verbunden mit dem auf diesem einen Gerät beobachteten Verhalten.
| ID | Fund | CWE | CVSS 3.1 | Schwere |
| F-PREVIEW | IP-/Metadaten-Leak über Vorschau auf dem Gerät | 200/359 | 4.3 | Mittel |
| F-UA | Vorschau-Anfrage trägt einen vorgetäuschten, aus Remote-Config stammenden User-Agent (in F-PREVIEW aufgenommen) | 451 | — | Kontext |
F-PREVIEW · CWE-200 / CWE-359
IP-/Metadaten-Leak über Vorschau auf dem Gerät
Mittel · CVSS 4.3
Beschreibung
Beim Verarbeiten einer Nachricht mit URL erzeugt Google Messages die Link-Vorschau durch einen HTTP(S)-GET auf diese URL vom Gerät aus, nicht über einen serverseitigen Proxy. Der Server, dem der Link gehört, erhält damit eine Anfrage vom aktuellen Netzausgang des Empfängers: dessen IP-Adresse, den Vorschau-User-Agent, Accept-Language und die Anfragezeit. Folgeanfragen für ein og:image oder ein Favicon können zusätzlich einen Dalvik-User-Agent tragen, der Android-Version, Gerätemodell und Build-Nummer offenlegt.
Wie der Abruf tatsächlich ausgelöst wird
Das ist der Punkt, der am genauesten gesagt werden muss, weil er die Schwere festlegt. Der Pfad ist zweistufig:
- Bei Empfang wird
request_link_preview nach dem Datenbank-Commit eingeplant (dfvl/bcnl → btlr.b()). Bei einem neuen Link kann der erste Durchlauf eine deferred-Vorschauzeile anlegen und vor jeder Netzanfrage zurückkehren (btln).
- Wird die Conversation interaktiv — also der Chat geöffnet — startet
onMessageListInteractive einen Beobachter (ahxw → aied), der die deferred-Zeilen dieser Conversation beobachtet und einen zweiten Auftrag mit deferred=true einplant (aieb → btlr.a()), der nach den Prüfungen unten bis zum Abruf gelangen kann.
Der Beobachter läuft in einem Hintergrund-Coroutine-Scope ohne sichtbare Abmeldung beim Verlassen des Chats. Das ist der Code-Grund dafür, dass ein Abruf bei gesperrtem Bildschirm und im Hintergrund beobachtet werden kann — nachdem der Chat einmal geöffnet wurde. Ein Abruf bei nie geöffneter Conversation ist im sichtbaren Code nicht belegt und wird hier nicht behauptet.
Prüfungen, die vorher bestehen müssen
- Vorschau-Einstellung. Die automatische Vorschau muss an sein (
aqck). Google Messages bietet „Alle Vorschauen anzeigen“ / „Nur Web-Link-Vorschauen anzeigen“ / aus.
- Absender-Vertrauen. Der Absender muss ein Vertrauensprädikat erfüllen (
btez.m()): ein belegter Kontakt-lookup_key ist eine akzeptierte Bedingung, daneben zwei weitere Participant-Zustände. Ein getrennter Flag-Pfad kann stattdessen manuelle Vorschau-Ladungen zählen (APK-Standardschwelle 3, je Participant gespeichert). Der APK-Standard enable_link_preview_untrusted_senders ist false. Einen Chat öffnen oder eine Nachricht als gelesen markieren ist nicht dasselbe wie eine manuelle Vorschau-Ladung; die aktiven Remote-Config-Werte wurden nicht ausgelesen.
- URL-Schema. Der Parser akzeptiert nur
http/https (er schreibt ws:/wss: um); er lehnt file:// und content:// ab, und der Bildpfad läuft über denselben Nur-HTTP-Client.
Auswirkung, auf die Evidenz begrenzt
Der Server des Links erfährt den aktuellen Netzausgang (IP), User-Agent, Sprache und Zeitpunkt des Empfängers und — über Bild-/Favicon-Folgeanfragen — Gerätemodell, OS-Version und Build. Weil die Vorschau nach Message-ID geschlüsselt ist, nicht nach URL, erzeugt derselbe Link in einer neuen Nachricht einen neuen Abruf; ein vertrauter Absender kann so über die Zeit wiederholt messen und eine grobe Standort-/Netzspur aufbauen. Im archivierten März-Lauf nutzte das Gerät ein VPN, die beobachtete Adresse war also ein VPN-Ausgang, keine Wohn-IP. Kein Zugriff auf andere Apps, keine Erreichbarkeit lokaler Dienste, keine Kontoübernahme und keine Codeausführung wurden gezeigt oder werden behauptet.
Wer gilt als „vertraut“?
„Gespeicherter Kontakt“ ist weiter gefasst, als es klingt: nicht nur die Leute, mit denen du schreibst, sondern jede Nummer, die dein Handy schon kennt — ein Shop, ein Lieferdienst, eine Bank, deren Nummer du einmal gespeichert hast. Ob auch verifizierte Firmen-Absender — die Bündel-SMS-/RCS-Dienste, über die Unternehmen dir Links schicken und die mit Firmennamen und ohne „unbekannter Absender“-Hinweis ankommen — dieselbe Schwelle erreichen, wurde nicht getestet und steht hier nur als Frage an Google. So oder so ist der Kreis der Absender, die einen automatischen Abruf auslösen könnten, größer als „deine Freunde“.
CVSS-3.1-Aufschlüsselung
AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N → Basis 4.3 (Mittel)
Die Auswirkung ist die Offenlegung einer IP-Adresse samt User-Agent und Gerätemetadaten, also C:Low — das deckelt den Wert auf Mittel, egal wie wenig Interaktion der einzelne Abruf braucht. UI:R bildet den Code ab: Die Abrufkette wird durch das Öffnen der Conversation getrieben. Die frühere Rahmung „Critical / Zero-Click“ ist nicht haltbar: Sie ruht auf einem UI:N-Pfad bei nie geöffnetem Chat, den der sichtbare Code nicht belegt, und auf einer C:High-Auswirkung, die ein IP-und-Metadaten-Leak nicht erreicht.
Wie ein Fix aussieht
- Link-Vorschauen über einen Google-seitigen Proxy holen, sodass der Link-Server die Infrastruktur von Google sieht und nicht das Gerät des Empfängers — der Ansatz, der für andere Vorschau-Flächen ohnehin genutzt wird.
- Wird der Abruf auf dem Gerät beibehalten, ihn streng interaktiv machen (ausdrückliches Tippen je Nachricht) und einen Hintergrund-Beobachter Abrufe für eine Conversation nicht erneut antreiben lassen, nachdem sie geschlossen wurde.
- Den Datenfluss in der Datenschutz-Hilfe klar beschreiben, damit „automatische Vorschauen“ nicht als „Vorschauen, die deine IP nicht preisgeben können“ gelesen wird.
Schwere
Eine Anmerkung zur Bewertung
Ein CVSS-Basiswert ergibt sich aus Angriffsweg, nötiger Interaktion und der Auswirkung auf Vertraulichkeit, Integrität und Verfügbarkeit — nicht daraus, wie alarmierend ein Fund klingt. Ein Datenschutz-Leak, das eine IP-Adresse und etwas Gerätemetadaten preisgibt, ist C:Low und kann daher nie Hoch erreichen, so wenig das Opfer auch tun muss. „Zero-Click“ würde nur die Interaktions-Metrik senken, nicht die Auswirkungsgrenze heben — und hier belegt der Code die Zero-Click-Variante bei nie geöffnetem Chat nicht einmal, also ist der ehrliche Vektor UI:R, Basis 4.3.
Der Fund ist echt und einen Fix wert — und ehrlich Mittel. Ein früherer Entwurf hat ihn mit „Critical“ etikettiert; das widerspricht seinem eigenen CVSS und dem, was eine einzelne IP-/Metadaten-Offenlegung tatsächlich ist. Ich veröffentliche lieber einen vertretbaren Wert als einen aufgeblähten.
Was es ist — und was nicht
Damit die Akte sauber bleibt: Das wurde geprüft und wird nicht als Teil dieses Fundes behauptet:
- Kein App-übergreifender Zugriff, kein Sandbox-Durchbruch. Ein HTTP-
GET des Vorschau-Clients ist kein Lesen der Daten einer anderen App; die Android-App-Sandbox wird nicht überschritten, und ein solcher Durchbruch wurde nicht gezeigt.
- Keine Kontoübernahme, keine Codeausführung. Die RCE-Fläche wurde geprüft (dynamisches Laden von Code,
exec/ProcessBuilder-Senken, Deserialisierung, WebView-Brücken, der HTML-Parser) — nichts aus einer eingehenden Nachricht Erreichbares gefunden.
- Keine Pauschalaussage. Ein Gerät, eine Android-Version, ein RCS-Setup wurden getestet. „Jeder Google-Messages-Nutzer“ ist hier nicht belegt.
- Keine Versionsangabe. Der beobachtete User-Agent
GoogleMessages/20.2 stammt aus Remote-Config und ist keine Build-Kennung.
- Einige Manifest-Hinweise (Custom-Permissions auf Schutzstufe
normal; ein Debug-Receiver ohne Permission exportiert) sind der Vollständigkeit halber vermerkt, sind aber ungetestete Hinweise, keine Funde, und werden nicht bewertet.
Selbst nachprüfen
Hier werden keine Screenshots veröffentlicht; der Fund steht auf dem Codepfad oben, und jeder kann ihn mit einem eigenen Endpunkt nachstellen. Die Idee in einem Absatz:
- Zeige auf eine URL, die du kontrollierst und die jede eingehende Anfrage protokolliert (IP, User-Agent, Zeit). Ein fertiger Request-Logger wie webhook.site (oder RequestBin oder ein eigener Einzeiler-Server) genügt — er gibt dir eine eindeutige URL und zeigt jeden Treffer live. Nutze pro Nachricht einen frischen, einmaligen Pfad, damit jeder Abruf genau einer Nachricht zuzuordnen ist.
- Schicke diesen Link von einem zweiten, als Kontakt gespeicherten Konto in eine Conversation, die du schon einmal geöffnet hast. Beobachte dein Log: Eine Anfrage trifft vom Netzausgang des Empfänger-Handys ein, mit einem
GoogleMessages-User-Agent.
- Für ein belastbares Ergebnis den Sperr-/Doze-/Prozesszustand des Handys auf derselben Uhr wie das Server-Log mitschreiben und einmal ohne VPN laufen lassen, damit der sichtbare Ausgang der echte ist.
Um diese Anfragen zu verhindern, automatische Web-Link-Vorschauen in den Einstellungen deaktivieren. „Nur Web-Link-Vorschauen“ verhindert diese Web-Abrufe nicht. Ein gespeicherter Kontakt kann über einen Link Informationen über dein Netz erhalten.
Zeitleiste der Offenlegung
- 2026-03-14
An das Google Mobile VRP gemeldet — Vorschau-Abruf auf dem Gerät, der die IP und Gerätemetadaten des Empfängers preisgibt (CWE-200/359), mit HTTP-Logs und Screenshots vom eigenen Gerät und Konto (issu.ee/492756092).
- 2026-03-17
Google triagiert und schließt die Meldung. Keine Zusage zur Behebung folgte.
- 2026-10-29
Erneute Prüfung der aktuell installierten Fassung per statischer Analyse der exakten APK. Der Vorschau-Abruf auf dem Gerät und der zweistufige Auslöser sind unverändert; das Verhalten ist weiterhin vorhanden.
Was als behoben zählt
Ich aktualisiere diese Seite lieber, als sie zu verteidigen. Die Seite sagt „behoben“, wenn Link-Vorschauen über Googles eigene Infrastruktur geholt werden (sodass der Link-Server die IP des Empfängers nicht mehr sieht), oder wenn der Abruf auf dem Gerät streng interaktiv gemacht wird und ein Hintergrund-Beobachter nach dem Schließen einer Conversation nichts mehr nachtreibt — in der ausgelieferten Fassung, nicht nur in einem internen Build.
Alle Tests erfolgten auf meinem eigenen Gerät und mit meinen eigenen Konten, gegen Endpunkte, die ich kontrolliere. Kein fremdes Gerät, Konto oder fremde Daten waren beteiligt. Dieser Bericht enthält keine Schadsoftware und keinen waffenfähigen Exploit; die Reproduktion ist ein gewöhnlicher Link an einen Endpunkt, der dir gehört. Kennungen sind gekürzt.