Capacitor Android and iOS: remote content can be loaded at the app origin via the internal HTTP proxy path
Beschreibung
### Der WebView Navigationswächter von Impact Capacitor validierte nur den **Host und das Schema** einer Ziel-URL, nicht seinen **Pfad**. Da der interne HTTP-Proxypfad ("/ capacitor http interceptor ") am eigenen Ursprung der Anwendung bedient wird, wurde eine Frame-Navigation zu ihr immer als In-App-Navigation behandelt und erlaubt. Das Laden dieses Pfades als Dokument veranlasste die native Ebene, eine willkürliche, vom Anrufer spezifizierte URL abzurufen und den Antworttext an den WebView ** am eigenen Ursprung der App ** zurückzugeben. Script in dieser Antwort lief dann mit vollem Vertrauen gleichen Ursprungs: Zugriff auf "localStorage", Cookies und jede native Fähigkeit, die die Anwendung durch ihre registrierten Capacitor-Plugins ausstellt. Der Proxy-Handler wurde zusätzlich bedient **unabhängig davon, ob das `CapacitorHttp`-Plugin aktiviert wurde **, so dass auch Anwendungen betroffen waren, die `CapacitorHttp` nie aktiviert haben. Exploitation erfordert, dass ein opfer einen link in der webview der anwendung aktiviert. Jede Capacitor-Anwendung, die benutzergesteuerte oder unhygienische Links (Chat-Nachrichten, Kommentare, Rich-Text-Inhalte) darstellt, ist eine brauchbare Lieferoberfläche. Sowohl Android als auch iOS sind betroffen. ### Patches Zwei Änderungen auf jeder Plattform: 1. Der Navigationswächter blockiert nun Frame-Navigationen, deren Pfad der interne Proxy-Pfad ist. 2. Der Proxy-Handler wird nur dann bedient, wenn "CapacitorHttp" aktiviert ist, und niemals für eine Dokument- (Hauptrahmen-) Anforderung. Die legitime Verwendung von "CapacitorHttp" ist nicht betroffen. `fetch` und `XMLHttpRequest` sind Subresource Requests und passieren nicht den Navigationswächter. Aktualisieren Sie auf eine gepatchte Version und erstellen Sie dann Ihre Anwendung neu und verteilen Sie sie neu. ### Workarounds Wenn Sie nicht sofort upgraden können, beachten Sie zunächst, dass das Deaktivieren von „CapacitorHttp bei betroffenen Versionen nicht ausreicht, da der Proxypfad unabhängig von dieser Einstellung bedient wird. Registrierte Plugins werden vor dem Ausführen des Navigationswächters konsultiert, sodass ein kleines Plugin den Pfad blockieren kann. Unter Android überschreiben Sie `shouldOverrideLoad(Uri url)` und geben `true` zurück, wenn `url.getPath()` mit `/ capacitor http interceptor ` beginnt. Implementieren Sie auf iOS `shouldOverrideLoad( :)` und geben Sie `true` für den gleichen Pfad zurück. Die Rückgabe von `true` storniert die Navigation; die Rückgabe `null`/`nil` für alle anderen URLs, so dass die normale Navigation unverändert bleibt. Löschen Sie unabhängig voneinander benutzergesteuerte Link-Ziele, bevor Sie sie in der WebView rendern.
Quellen & weiterführende Informationen
Hier werden ausschließlich tatsächlich zu dieser Schwachstelle gespeicherte Quellenbelege angezeigt.
Was ist zur Behebung zu tun?
Auf eine behobene Version aktualisieren: 6.2.2, 7.6.9, 8.5.1, 8.4.3.
Empfohlene Schritte
- Betroffene Systeme identifizieren: Mehrere Hersteller @capacitor/android, @capacitor/ios, github.com/ionic-team/capacitor-swift-pm, com.capacitorjs:core.
- Exposition prüfen: Internet-Erreichbarkeit, Admin-Oberflächen, VPN, Mail- oder Webdienste.
- Update/Rollout auf behobene Version vorbereiten und priorisiert einspielen.
- Nacharbeiten dokumentieren: betroffene Assets, Maßnahme, Zeitpunkt, Restrestrisiko.
Übergangsmaßnahmen
- Zugriff auf betroffene Dienste auf vertrauenswürdige Netze einschränken.
- WAF/IDS/EDR-Regeln und Hersteller-IOCs aktivieren, sofern verfügbar.
- Nicht benötigte Funktionen, Plugins oder Dienste temporär deaktivieren.
- Administrative Zugänge besonders absichern: MFA, Passwortrotation, Session-Invalidierung.