Sensible Daten an Analysedienste weitergegeben
CWE-200CWE-359OWASP A05:2021Aktualisiert 4. September 20264 Min. Lesezeit
Skripte für Analyse, Fehlerberichte und Sitzungsaufzeichnung laufen in Ihrer Seite mit denselben Rechten wie Ihr eigener Code. Sie übermitteln standardmäßig URLs, Seitentitel und mitunter Formularinhalte. Auf einer Seite mit einer Vorgangsnummer, einer Diagnose oder einem Wiederherstellungstoken bedeutet das eine Weitergabe sensibler Daten, die Sie nicht beabsichtigt haben.
Analyse, Fehlerberichte und Sitzungsaufzeichnungen werden von Menschen eingerichtet, die wissen möchten, wie die Anwendung genutzt wird. Die dafür hinzugefügten Skripte laufen jedoch in Ihrer Seite mit denselben Rechten wie Ihr eigener Code, und sie sammeln standardmäßig mehr, als wozu sie eingesetzt wurden. Im Folgenden lesen Sie, was dabei mitgeht und wie Sie das eingrenzen, ohne Ihren Einblick zu verlieren.
Was geht dabei mit?
Ein Analyseskript sammelt standardmäßig die vollständige URL jeder besuchten Seite, den Titel dieser Seite, die verweisende Seite und eine Kennung, mit der Besuche verknüpft werden. Fehlerberichtsskripte übermitteln zusätzlich den Stack-Trace und häufig den Inhalt von Variablen zum Zeitpunkt des Fehlers. Skripte zur Sitzungsaufzeichnung halten fest, was der Besucher tatsächlich tut, einschließlich dessen, was er eintippt.
Von an Analysedienste weitergegebenen sensiblen Daten spricht man, wenn darunter Angaben sind, die bei einem Dritten nichts zu suchen haben. Das geschieht selten bewusst; es geschieht dadurch, dass die Standardeinstellungen übernommen wurden und niemand nachgesehen hat, was auf den betreffenden Seiten in URL und Titel steht.
Der passende Vergleich: Sie bitten jemanden mitzuzählen, wie viele Besucher vorbeikommen, und er notiert daraufhin auch, wohin jeder ging und was auf den Formularen stand. Er tut nichts Böses, er notiert alles, denn das ist es, was er standardmäßig tut.
Wie sieht eine solche Analyseanfrage aus?
Verwundbar:
<!-- Standardinstallation, alles wird übermittelt -->
<script>
analytics.init({ site: 'PORT-4471' }); // sendet URL, Titel und Verweis
</script>
Auf den meisten Seiten ist das harmlos. Auf dieser nicht:
URL : /vorgang/38921/ergebnis?mandant=j.walter%40firma.de&art=arbeitskonflikt
Titel : Untersuchungsergebnis | J. Walter | Arbeitskonflikt | Beispiel GmbH
Beides wird an den Analysedienst übermittelt. In der Auswertung dieser Partei stehen nun eine Vorgangsnummer, eine E-Mail-Adresse und der Gegenstand der Sache: Angaben, die Sie nie teilen wollten. Schwerwiegender wird es auf einer Seite mit einem Wiederherstellungstoken in der URL: Dieses Token geht dann an eine externe Partei und steht in deren Protokolldateien, womit es kein Geheimnis mehr ist.
Bei Fehlerberichten ist das Muster vergleichbar. Ein Fehler in der Verbindung mit einer externen API nimmt häufig die vollständige Anfrage mit, einschließlich des verwendeten Schlüssels:
{
"message": "Request failed with status 401",
"config": {
"url": "https://api.zahlungsdienst.example/v2/transaktionen",
"headers": { "Authorization": "Bearer sk_live_51H8xQ2..." }
}
}
Sicher:
// Selbst bestimmen, was übermittelt wird
analytics.init({
site: 'PORT-4471',
automatischerPfad: false,
});
function meldeSeite(pfad) {
// Kennungen durch eine Vorlage ersetzen
const sauber = pfad
.replace(/\/vorgang\/\d+/, '/vorgang/:id')
.replace(/\?.*$/, '');
analytics.seite({ pfad: sauber, titel: document.title.split(' | ')[0] });
}
// Und Fehlerberichte, die Geheimnisse vor dem Senden herausfiltern
fehlerbericht.init({
vorVersand(ereignis) {
delete ereignis.request?.headers?.Authorization;
delete ereignis.request?.cookies;
ereignis.request.url = ereignis.request.url?.split('?')[0];
return ereignis;
},
maskiereFelder: ['passwort', 'steuernummer', 'iban', 'token'],
});
Der Ausgangspunkt ist umgekehrt: Sie bestimmen, was gesendet wird, statt des Skripts. Die Statistiken bleiben brauchbar, Sie sehen weiterhin, wie viele Vorgangsseiten aufgerufen wurden, doch die identifizierenden Angaben bleiben im Haus.
Referrer-Policy begrenzt einen dieser Wege und löst das zugrunde liegende Problem nicht.Welche Auswirkungen hat Datenweitergabe an Analysedienste?
Der Schweregrad ist niedrig bis mittel, abhängig davon, was genau ausläuft. Geht es um Seitentitel und Pfadnamen ohne identifizierende Angaben, bleibt es vor allem eine Datenschutzfrage. Stehen dort personenbezogene Daten, Vorgangsnummern oder medizinische, juristische oder finanzielle Bezeichnungen, ist es eine Weitergabe, für die Sie nach der DSGVO verantwortlich sind und die Sie vermutlich nicht in Ihrem Verarbeitungsverzeichnis stehen haben.
Zu einem Sicherheitsproblem wird es, sobald Werte mitgehen, die Zugang gewähren. Ein Wiederherstellungstoken oder eine Sitzungskennung in der URL, die in den Protokolldateien einer externen Partei landet, ist ein Geheimnis, das Sie nicht mehr verwalten. Wer Zugriff auf diese Protokolle hat, Mitarbeiter dieser Partei, ein Angreifer, der sie kompromittiert, hat damit Zugang zu Ihren Konten.
Es besteht zudem ein Risiko, das von den Daten selbst losgelöst ist. Diese Skripte laufen in Ihrer Seite mit vollen Rechten. Wird der Anbieter oder das Verteilnetz kompromittiert, läuft veränderter Code auf Ihrer Domain bei all Ihren Besuchern. Genau deshalb sind Integritätsprüfung und eine strenge Content Security Policy hier von Bedeutung.
Wie spürt man Datenweitergabe an Analysedienste auf?
Ein Tester betrachtet den ausgehenden Netzwerkverkehr der Anwendung und erfasst, an welche externen Parteien Daten gesendet werden. Anschließend wird je Anfrage betrachtet, was genau mitgeht: die URL, der Titel, der Verweis und bei Fehlerberichten der Inhalt des gemeldeten Objekts.
Die Aufmerksamkeit richtet sich dabei auf die sensiblen Seiten, nicht auf die Startseite. Was steht in URL und Titel einer Vorgangsseite, eines Ergebnisses, einer Zahlungsbestätigung oder einer Wiederherstellungsseite? Wird dort eine Kennung oder ein Token übermittelt? Ebenso wird geprüft, ob Sitzungsaufzeichnungen laufen und ob Eingabefelder dabei maskiert werden. Ferner wird geprüft, ob die Skripte mit Integritätsprüfung geladen und in der Content Security Policy eingegrenzt werden. AssistSec beurteilt zusätzlich, ob die Zahl der externen Parteien in einem Verhältnis zu dem steht, was die Organisation davon nutzt, denn Skripte werden in der Praxis häufiger hinzugefügt als entfernt.
Wie verhindert man Datenweitergabe an Analysedienste?
- Bestimmen Sie selbst, welche Daten Sie übermitteln, statt die Standardeinstellungen zu übernehmen.
- Ersetzen Sie Kennungen in Pfaden durch eine Vorlage und senden Sie Abfrageparameter nicht mit.
- Verwenden Sie neutrale Seitentitel ohne Namen, Vorgangsnummern oder Gegenstände.
- Filtern Sie bei Fehlerberichten Header, Cookies und Token vor dem Versand heraus.
- Maskieren Sie Eingabefelder bei Sitzungsaufzeichnungen ausdrücklich und übergehen Sie Passwortfelder stets.
- Setzen Sie niemals Token oder personenbezogene Daten in eine URL.
- Laden Sie externe Skripte mit einer Integritätsprüfung und grenzen Sie sie in Ihrer Content Security Policy ein.
- Erfassen Sie regelmäßig, welche externen Parteien mitlesen, und entfernen Sie, was nicht mehr genutzt wird.
- Nehmen Sie die Weitergabe in Ihr Verarbeitungsverzeichnis auf und prüfen Sie, ob dafür eine Rechtsgrundlage besteht.
Quellen
Häufige Fragen
Was senden Analyseskripte standardmäßig?
Die vollständige URL einschließlich Parametern, den Seitentitel, die verweisende Seite, Bildschirmangaben, die Sprache und eine Kennung, mit der Besuche miteinander verknüpft werden. Bei Fehlerberichten kommen der Stack-Trace und häufig der Inhalt von Variablen hinzu; bei Sitzungsaufzeichnungen die tatsächlichen Handlungen auf dem Bildschirm.
Ist das eine Sicherheits- oder eine Datenschutzfrage?
Beides, und was überwiegt, hängt davon ab, was ausläuft. Geht es um Seitentitel, ist es vor allem Datenschutz. Steckt ein Wiederherstellungstoken oder eine Sitzungskennung in der URL, ist es ein Sicherheitsproblem, denn diese Werte gewähren Zugang.
Was sind Sitzungsaufzeichnungen genau?
Skripte, die die Handlungen eines Besuchers festhalten und später als Film abspielen: Mausbewegungen, Klicks und eingetippten Text. Ohne sorgfältige Maskierung bedeutet das die Aufzeichnung von allem, was jemand eingibt, einschließlich personenbezogener Daten und mitunter Passwörter.
Wie begrenze ich das, ohne meine Statistiken zu verlieren?
Indem Sie senden, was Sie messen möchten, statt dessen, was das Skript standardmäßig sammelt. Übergeben Sie einen bereinigten Pfad statt der vollständigen URL, verwenden Sie neutrale Seitentitel und maskieren Sie Felder ausdrücklich. Ihre Statistiken bleiben brauchbar; nur der Detailgrad bei der externen Partei sinkt.
Verwandte Artikel
- SchwachstellenCWE-693A05:2021Fehlende Content Security PolicyOhne Content Security Policy lädt der Browser Skripte aus jeder Quelle. Lesen Sie, was eine CSP leistet und welche Fehler sie entwerten.
- SchwachstellenCWE-200A01:2021Information DisclosureInformation Disclosure erklärt: wie Stack Traces, .git-Verzeichnisse, Source Maps und zu großzügige API-Antworten Daten preisgeben.
- SchwachstellenCWE-200A05:2021Fehlende Referrer-PolicyOhne Referrer-Policy gibt der Browser die vollständige URL Ihrer Seite an jede externe Website weiter. Lesen Sie, was dabei ausläuft.
- SchwachstellenCWE-598A07:2021Sitzungskennung in der URLEine Session-ID in der URL landet in Protokolldateien, im Browserverlauf und in Referrer-Headern. Lesen Sie, warum das Sitzungen preisgibt.
- SchwachstellenCWE-353A08:2021Externe Skripte ohne IntegritätsprüfungWer JavaScript ohne integrity-Attribut von einem CDN lädt, führt jede dortige Änderung unmittelbar aus. Lesen Sie, wie SRI das blockiert.