Element X Android
Denial of Service durch einen manipulierten OIDC-Redirect-Intent
Der OAuth-Redirect-Parser ruft Kotlins error() für jede URL auf, die zwar zum Redirect-Schema passt, aber weder code= noch error=access_denied enthält, und auf dem Aufrufpfad fängt niemand die resultierende IllegalStateException ab. Das Redirect-Schema ist mit der Kategorie BROWSABLE exportiert. Jede installierte Anwendung ohne jede Berechtigung und jede Webseite, auf der ein entsprechender Link angetippt wird, kann den Messenger-Prozess damit auf Zuruf beenden.
Beschreibung
Der Parser kennt genau zwei Formen der Redirect-URL, den Abbruchfall und den Erfolgsfall, und behandelt alles andere als unerreichbar. Der Kommentar sagt es selbst:
OAuthUrlParser.kt:36-43 (v26.06.1)
override fun parse(url: String): OAuthAction? { if (url.startsWith(oAuthRedirectUrlProvider.provide()).not()) return null if (url.contains("error=access_denied")) return OAuthAction.GoBack() if (url.contains("code=")) return OAuthAction.Success(url)
// Other case not supported, let's crash the app for now error("Not supported: $url")}Kotlins error() wirft eine IllegalStateException. Auf dem Pfad von der exportierten Activity bis zum Parser existiert kein Handler:
Aufrufkette
MainActivity.onNewIntent() -> MainNode.handleIntent() [lifecycleScope.launch, no CoroutineExceptionHandler] -> RootFlowNode.handleIntent() -> IntentResolver.resolve() -> DefaultOAuthIntentResolver.resolve() -> DefaultOAuthUrlParser.parse() -> error("Not supported: $url")MainNode.handleIntent() startet die Auflösung auf dem lifecycleScope ohne CoroutineExceptionHandler. Die Exception erreicht damit den Default-Handler, und der Prozess wird beendet.
Das Redirect-Schema ist als exportierter Intent-Filter registriert, und die Kategorie BROWSABLE macht es sowohl aus dem Browser als auch aus anderen Anwendungen erreichbar:
AndroidManifest.xml:80-87 (v26.06.1)
<!-- OAuth redirection--><intent-filter> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="@string/login_redirect_scheme" /></intent-filter>Der resultierende Absturz, aufgezeichnet auf einem Gerät mit der betroffenen Version:
Absturzausgabe (v26.03.3, Android 15)
FATAL EXCEPTION: mainProcess: io.element.android.x, PID: 4800java.lang.IllegalStateException: Not supported: io.element.android:/?state=... at io.element.android.libraries.oauth.impl.DefaultOAuthUrlParser.parse(OAuthUrlParser.kt:42)Alle Build-Varianten sind über ihr jeweiliges Schema betroffen: io.element.android für Release, io.element.android.debug für Debug, io.element.android.nightly für Nightly. Der Kommentar über dem Aufruf und der zugehörige Unit-Test zeigen, dass die Exception vor dem Fix das erwartete Ergebnis für diesen Pfad war. Der Code stammt aus der ursprünglichen OIDC-Implementierung vom April 2023 und wurde unverändert durch die Umbenennung der OIDC-Komponenten zu OAuth im April 2026 mitgeführt.
Am 2026-04-01 an Element gemeldet. Der Fix wurde am 2026-06-10 übernommen und mit 26.06.2 ausgeliefert. Aus dem error()-Aufruf wurden eine Log-Zeile und ein null-Rückgabewert, den der Aufrufer ohnehin als unbekannte URL behandelt:
OAuthUrlParser.kt:37-45 (v26.06.2, behoben)
override fun parse(url: String): OAuthAction? { if (url.startsWith(oAuthRedirectUrlProvider.provide()).not()) return null if (url.contains("error=access_denied")) return OAuthAction.GoBack() if (url.contains("code=")) return OAuthAction.Success(url)
// Other cases are not supported, log an error and return null Timber.w("Unsupported OAuth url") return null}Auswirkung
- Jede auf dem Gerät installierte Anwendung kann Element X Android jederzeit zum Absturz bringen, ohne Android-Berechtigung und ohne Interaktion. Eine Webseite erreicht dasselbe, sobald ein Link angetippt wird. Der Messenger bleibt so lange unbenutzbar, wie die angreifende Anwendung den Intent weiter sendet.
- Das Fehlerbild wiegt schwerer als der einzelne Absturz. Eine Anwendung, die den Intent zeitgesteuert wiederholt sendet, macht den Messenger unbrauchbar, ohne dessen Daten je zu berühren, und die betroffene Person erhält keinerlei Hinweis darauf, welche installierte Anwendung dafür verantwortlich ist. Den Absturz genau auf das Öffnen des Messengers zu legen ist ebenfalls möglich, erfordert aber die vom Nutzer zu erteilende Berechtigung
PACKAGE_USAGE_STATS, um die Vordergrund-App auszulesen; die ungezielte Variante benötigt keine. Beides bestätigt gegen Element X Android v26.03.3 aus dem Play Store unter Android 15. - Es werden weder Nachrichteninhalte noch Schlüsselmaterial oder Kontodaten offengelegt. Die Auswirkung betrifft ausschließlich die Verfügbarkeit, und sie trifft die Nutzenden, nicht den Homeserver.
Abhilfe
Aktualisieren Sie Element X Android auf 26.06.2 oder höher. Der Fix ersetzt den error()-Aufruf durch eine Log-Zeile und einen null-Rückgabewert, den der Aufrufer bereits als unbekannte URL behandelt. Für frühere Versionen gibt es keinen Workaround auf Konfigurationsebene: Der Intent-Filter muss exportiert bleiben, damit der OIDC-Login überhaupt funktioniert.
Checkliste für Betreiber
Auf Element X Android 26.06.2 oder höher aktualisieren.
Jede frühere Version mit OIDC-Unterstützung ist betroffen, über die Schemata für Release, Debug und Nightly.
Nicht auf einen Workaround warten.
Der OIDC-Redirect-Intent-Filter muss exportiert bleiben, damit der Login funktioniert. Ohne den Code-Fix schließt keine Konfiguration die Lücke. In verwalteten Geräteflotten gehört das Update zu den Pflichtmaßnahmen.
Forks auf dasselbe Muster prüfen.
Anwendungen auf Basis der Element-X-Android-Codebasis erben den Parser. Suchen Sie nach
error(auf jedem Pfad, der von einem exportierten Intent-Filter aus erreichbar ist: EineIllegalStateExceptionauf einer angreiferkontrollierten URL ist ein Absturz, keine Absicherung.Die übrigen exportierten Einstiegspunkte prüfen.
Die Ursache ist ein
error()-Aufruf, der einen nicht behandelten Fall auf einem Pfad vertritt, der später von außen erreichbar wurde. Jede exportierte Activity, jeder Receiver und jeder Provider, der angreiferkontrollierte Daten parst, verdient dieselbe Prüfung, einschließlich derer, deren Unit-Tests das Werfen einer Exception heute als korrekt festschreiben.
Bewertung im Detail
BROWSABLE macht das Redirect-Schema auch aus einer Webseite erreichbar, nicht nur aus einer lokalen Anwendung. Bewertet analog zu CVE-2025-27599, das denselben exportierten Intent-Filter in dieser Anwendung betraf.AC:LEin einzelner Intent mit unbekannter Parameterkombination. Keine Zeit- oder Umgebungsbedingungen.PR:NDie sendende Anwendung benötigt keine Android-Berechtigung und kein Konto auf irgendeinem Homeserver.UI:RDer webbasierte Pfad erfordert das Antippen eines Links. Der lokale Pfad von App zu App kommt ohne Interaktion aus, ergibt insgesamt aber einen niedrigeren Wert (AV:L/UI:N ergibt 6.2), daher wird der Netzwerkvektor bewertet.S:UDer Absturz bleibt auf den Anwendungsprozess beschränkt.C:NEs wird nichts gelesen.I:NEs wird nichts verändert.A:HDer Prozess wird beendet, und wiederholtes Senden hält ihn beendet.Referenzen
So können wir helfen
Wer wir sind
Die Sicherheitsforscher hinter diesem Sicherheitshinweis.

Dr. rer. nat. Simon Weber
Senior Pentester & MedSec-Forscher
Ich evaluiere Ihr SaMD mit derselben branchenprägenden Sicherheitsexpertise, die ich dem BAK MV für die Überarbeitung des B3S-Standards beigetragen habe.
- Promotion über Krankenhaus-Cybersicherheit
- Kritische Schwachstellen in Krankenhaussystemen gefunden
- Alumni der THB MedSec-Forschungsgruppe
- gematik Security Hero

Dipl.-Inf. Volker Schönefeld
Senior Application Security Expert
Als ehemaliger CTO und Entwickler, der zum Pentester wurde, arbeite ich mit Ihrem Team zusammen, um Schwachstellen aufzudecken und Lösungen zu finden, die zu Ihrer Architektur passen.
- 20+ Jahre als CTO, 50+ Mio. App-Downloads
- Architektur und Absicherung großer IoT-Flotten
- Certified Web Exploitation Specialist
- gematik Security Hero
Penetrationstest gesucht?
Machine Spirits ist spezialisiert auf Sicherheitsbewertungen für Medizinprodukte und Gesundheits-IT. Von MDR-Penetrationstests bis C5-Cloud-Compliance helfen wir MedTech-Unternehmen, regulatorische Anforderungen zu erfüllen.
