Unsere Untersuchung von Schwachstellen in Antiviren-Anwendungen führte uns zu Bitdefender. Es muss betont werden: In Bezug auf die Sicherheit ist Bitdefender Antivirus eines der besten Produkte, die wir bisher gesehen haben, zumindest in den von uns überprüften Bereichen. Die Browser-Erweiterungen minimieren die Angriffsfläche, die Kryptografie ist solide und der Safepay-Webbrowser wird nur für Online-Banking vorgeschlagen, wo sein Einsatz wirklich sinnvoll ist. Ungewöhnlich ist auch, dass die Entwickler, obwohl gelegentlich jQuery verwendet wird, sich der Cross-Site-Scripting-Schwachstellen bewusst sind und wir nur ein nicht ausnutzbares Problem fanden. Und haben wir erwähnt, dass die Meldung einer Schwachstelle an sie ein unkomplizierter Prozess mit sofortigem Feedback war und ohne dass im Voraus irgendwelche Bedingungen unterzeichnet werden mussten? Es ist offensichtlich, dass Sicherheit hier kein nachträglicher Gedanke ist, was leider bei viel zu vielen Konkurrenzprodukten anders ist. Wenn Sie mehr über Software-Anwendungen erfahren möchten, könnte Ihnen unser Artikel über SolidWorks 2012 SP5 von Interesse sein.
Explosion vor Bitdefender-Logo
Doch auch Bitdefender ist nicht perfekt, sonst würden wir diesen Beitrag nicht schreiben. Wir entdeckten eine Kombination aus scheinbar kleinen Schwachstellen, von denen jede bereits von anderen Antiviren-Produkten bekannt war. Gemeinsam genutzt, war die Wirkung verheerend: Jede Webseite konnte beliebigen Code auf dem System des Benutzers mit den Rechten des aktuellen Benutzers ausführen (CVE-2020-8102). Ohne jegliche Benutzerinteraktion. Von jedem Browser aus, unabhängig davon, welche Browser-Erweiterungen installiert waren.
Eine Kombination von Schwachstellen ermöglichte Remote Code Execution
Im Rahmen seiner Online-Schutzfunktion überprüft Bitdefender Antivirus sichere HTTPS-Verbindungen. Anstatt die Fehlerbehandlung dem Browser zu überlassen, zieht es Bitdefender aus irgendeinem Grund vor, eigene Fehlerseiten anzuzeigen. Dies ähnelt dem Vorgehen von Kaspersky in der Vergangenheit, jedoch ohne die meisten der nachteiligen Effekte. Die Konsequenz ist dennoch, dass Websites bestimmte Sicherheitstoken von diesen Fehlerseiten auslesen können.
Diese Sicherheitstoken können nicht verwendet werden, um Fehler auf anderen Websites zu überschreiben, aber sie können dazu genutzt werden, eine Sitzung mit dem Chromium-basierten Safepay-Browser zu starten. Diese API war nie dazu gedacht, nicht vertrauenswürdige Daten zu akzeptieren, weshalb sie von derselben Schwachstelle betroffen ist, die wir bereits im Avast Secure Browser gesehen haben: Befehlszeilen-Flags können eingeschleust werden, was im schlimmsten Fall zum Starten beliebiger Anwendungen führt.
Wie Bitdefender HTTPS-Verbindungen handhabt
Es scheint, dass heutzutage jedes Antiviren-Produkt als Teil seiner “Online-Schutz”-Komponente drei Funktionen bieten muss: sicheres Surfen (Blockierung bösartiger Websites), sichere Suche (Kennzeichnung bösartiger Suchergebnisse) und sicheres Banking (Delegierung von Online-Banking-Websites an einen separaten Browser). Ungeachtet der Frage, ob diese Funktionen tatsächlich hilfreich sind, stellen sie Antiviren-Anbieter vor eine Herausforderung: Wie gelangt man in verschlüsselte HTTPS-Verbindungen, um diese zu implementieren?
Einige Anbieter wählten den “freundlichen” Ansatz: Sie bitten Benutzer, ihre Browser-Erweiterung zu installieren, die dann die notwendige Funktionalität implementieren kann. Denken Sie beispielsweise an McAfee. Andere wählten den “brutalen” Ansatz: Sie schalteten sich zwischen den Browser und die Webserver, entschlüsselten die Daten auf ihrer Seite und verschlüsselten sie dann mit ihrem eigenen Signaturzertifikat wieder für den Browser. Denken Sie an Kaspersky. Und wieder andere wählten den “kooperativen” Ansatz: Sie arbeiten mit den Browsern zusammen und verwenden eine API, die externen Anwendungen ermöglicht, die Daten zu sehen, ohne sie selbst zu entschlüsseln. Browser führten diese API speziell ein, weil Antiviren-Produkte sonst ein solches Chaos anrichten würden.
Bitdefender gehört zu den Anbietern, die den “kooperativen” Ansatz gewählt haben, zumindest größtenteils. Gelegentlich muss ihr Produkt die Serverantwort modifizieren, zum Beispiel auf Suchseiten, wo sie das Skript zur Implementierung der sicheren Suchfunktion injizieren. Hier müssen sie die modifizierte Serverantwort unweigerlich mit ihrem eigenen Zertifikat verschlüsseln.
Überraschenderweise behandelt Bitdefender jedoch auch Zertifikatsfehler selbst, anstatt sie dem Browser zu überlassen, obwohl dies bei diesem Setup unnötig ist.
Bitdefender Fehlerseite bei nicht übereinstimmendem Sicherheitszertifikat
Im Vergleich zu Kasperskys Fehlerseite macht diese Seite einiges richtig. Die hervorgehobene Aktion ist beispielsweise “Zurück zur Sicherheit”. Das Klicken auf “Ich verstehe die Risiken” zeigt eine zusätzliche Warnmeldung an, die sowohl informativ ist als auch Clickjacking-Angriffe weitgehend abschwächt. Es gibt jedoch auch das Problem, dass HSTS ignoriert wird, genau wie bei Kaspersky. Insgesamt führt dies zu unnötigen Risiken, wenn der Browser besser in der Lage ist, mit solchen Fehlern umzugehen.
Besonders bemerkenswert ist hier: Die URL in der Adressleiste des Browsers ändert sich nicht. Aus Sicht des Browsers stammt diese Fehlerseite also vom Webserver, und es gibt keinen Grund, warum andere Webseiten desselben Servers nicht darauf zugreifen könnten. Egal welche Sicherheitstoken darin enthalten sind, Websites können sie auslesen – ein Problem, das wir bereits bei Kaspersky-Produkten gesehen haben.
Was der Zugriff auf eine Fehlerseite bewirken kann
Unser Proof of Concept verwendete einen Webserver, der bei der ersten Anfrage ein gültiges Zertifikat präsentierte, aber danach zu einem ungültigen Zertifikat wechselte. Dies ermöglichte das Laden einer bösartigen Seite im Browser, das Umschalten auf ein ungültiges Zertifikat und die Verwendung von XMLHttpRequest zum Herunterladen der resultierenden Fehlerseite. Da es sich um eine Same-Origin-Anfrage handelt, wird der Browser dies nicht verhindern. Auf dieser Seite befindet sich der Code hinter dem Link “Ich verstehe die Risiken”:
