Fall 01 — Google Messages

Die Vorschau lädt,
deine IP verrät.

Google Messages ist die SMS-/RCS-App, die auf einem sehr großen Teil der Android-Handys vorinstalliert ist. Sie baut Link-Vorschauen auf dem Gerät — und so kann ein einzelner Link von einem gespeicherten Kontakt still die IP-Adresse, das Gerät und den Zeitpunkt des Empfängers an den verraten, dem der Link gehört. Kein Tippen, keine Meldung. Du öffnest den Chat einmal; danach können neue Links von allein nach Hause telefonieren. Das Leck ist eng — eine IP und etwas Metadaten, ehrlich Mittel — aber es steckt in Hunderten Millionen Handys, und es läuft genau so, wie es gebaut wurde.

Von Abbas Hoseiny· Unabhängige Sicherheitsforschung· Hersteller: Google

Google Messages ist die App hinter dem Sprechblasen-Symbol auf den meisten Android-Handys — die SMS-/Chat-App, die fast niemand bewusst auswählt, über die aber SMS und RCS-Nachrichten laufen. Eine Link-Vorschau ist eine kleine Bequemlichkeit: Man schickt jemandem eine Adresse, und der Chat zeigt Titel, Beschreibung und ein Vorschaubild statt einer nackten URL. Die eine Frage, die über die Privatsphäre entscheidet, ist einfach — wer holt die Seite? Holt sie ein Server dazwischen, sieht der Link-Betreiber diesen Server. Holt sie dein eigenes Handy, sieht der Link-Betreiber dich: dein Netz, dein Gerät, deinen Zeitpunkt.

Ein Raster vieler gleicher gesperrter Handys; einige zeigen einen Link von einem gespeicherten Kontakt
Abb. 1 — dieselbe App, auf unzähligen Handys

Dieselbe App, dieselben ganz normalen Chats — auf sehr vielen Handys. Ein Link kommt von einem gespeicherten Kontakt, in einem einmal geöffneten Chat; niemand muss etwas berühren.

In Google Messages wird die Vorschau auf dem Gerät erzeugt. Die App liest die URL heraus und stellt — sobald die üblichen Bedingungen erfüllt sind — eine ganz normale HTTPS-Anfrage an diese Adresse, von deinem Handy aus. Die Anfrage läuft nicht über einen Google-Proxy. Das ist der ganze Mechanismus; alles Weitere betrifft nur, wann er auslöst.

Rote gepunktete Linien laufen von vielen der Handys zu einem einzigen Server
Abb. 2 — der stille Abruf, vervielfacht

Jedes Handy holt den Link von selbst, um die Vorschau zu bauen. Nichts leuchtet auf, nichts fragt nach. Über alle Chats hinweg landen die Anfragen an einem Ort: dem Server, dem der Link gehört.

Jetzt der ehrliche Teil — und genau hier hat die frühere Fassung dieses Berichts zu weit gegriffen. Der allererste Handler, wenn die Nachricht eintrifft, legt oft nur einen deferred-Platzhalter an und kehrt ohne Netzanfrage zurück. Der eigentliche Abruf wird von einem Beobachter angestoßen, der startet, wenn die Conversation interaktiv wird — wenn du den Chat öffnest. Dieser Beobachter hängt an einem Hintergrund-Scope ohne sichtbare Abmeldung beim Verlassen; deshalb können nach einmaligem Öffnen eines Chats spätere Links darin bei gesperrtem Bildschirm und im Hintergrund abgerufen werden.

Ein Server-Log füllt sich mit Zeilen: dieselbe Empfänger-IP, ein GoogleMessages-User-Agent und Zeitstempel wenige Minuten auseinander
Abb. 3 — das Log auf der anderen Seite

Auf dem Server, dem der Link gehört, stapeln sich die Anfragen einfach: die IP-Adresse des Empfängers, der User-Agent und Zeitstempel wenige Minuten auseinander — Zeilen, denen der Empfänger nie zugestimmt hat.

Eine Zeile ist ein grober Datenpunkt. Die Vorschau wird pro Nachricht gespeichert, nicht pro URL — derselbe Link, erneut in einer neuen Nachricht geschickt, wird also erneut geholt. Ein Absender, der ein gespeicherter Kontakt ist, kann denselben Link daher planmäßig senden und jedes Mal einen frischen Messwert einsammeln: eine grobe Spur, in welchem Netz der Empfänger ist und wann.

Eine Karte mit mehreren diffusen roten Flächen — ungefähre Bereiche, keine genaue Markierung — verbunden mit einem gesperrten Handy
Abb. 4 — eine grobe Spur, über die Zeit

Eine IP-Adresse ist keine Hausnummer, aber über wiederholte Nachrichten engt sie sich auf eine Stadt und ein Netz ein und zeigt, wann ein Gerät kommt und geht. Das ist der Preis einer Vorschau, die vom Handy geholt wird statt von einem Proxy.

Dies wurde Google im März 2026 gemeldet. Google hat die Meldung nach der ersten Prüfung am 2026-03-17 geschlossen, wie in der Zeitleiste unten dokumentiert. Das hier beschriebene Verhalten ist in der auf dem Testgerät installierten Fassung weiterhin vorhanden, erneut geprüft am 29. Oktober 2026. Diese Seite sagt, was Code und ein einzelner Gerätetest wirklich hergeben — und ebenso bewusst, was sie nicht hergeben.

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.

IDFundCWECVSS 3.1Schwere
F-PREVIEWIP-/Metadaten-Leak über Vorschau auf dem Gerät200/3594.3Mittel
F-UAVorschau-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:

  1. 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).
  2. 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:

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:

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

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.