Von Webseiten ungefiltert ausgegebene Steam-Profilnamen lassen sich leicht für XSS-Attacken missbrauchen. Das zeigt der Fall der Webseite Steamanalyst.com. Schuld an dem Problem ist nicht Valve, sondern ein unsauber arbeitender Programmierer.

Nicht nur Spiele lesen unterschiedliche Informationen eines Steam-Accounts aus. Auch verschiedene Webseiten und Webdienste greifen mittels Steam Web API zahlreiche Details eines Steam Users und seines Steam-Accounts ab. So kann SteamDB etwa den Wert eines Steam Accounts anhand der aktuellen Preislage ermitteln. Auf anderen Seiten können sich Steam User mit ihrem Account einloggen und dann Kommentare verfassen. Wiederum andere Webseiten bieten auf Basis der Steam Web API Lotterie-Dienste oder Trading-Möglichkeiten für Ingame-Gegenstände an.

Einige der Informationen eines Steam-Accounts können vom Inhaber selbst festgelegt werden, etwa der Steam-Profilname. Erfahrene Programmierer wissen, dass dies eine Menge Raum für Missbrauch bietet. Besonders viele Zeichen lassen sich für den Profilnamen zwar nicht eingeben – sie sind auf 32 Zeichen begrenzt. Allerdings reicht das aus, um schon verschiedene Effekte zu erzielen. So akzeptiert Steam etwa als Profilnamen Varianten wie <script src=//ze.ly>Zel</script>. Und schon präsentiert sich eine XSS-Lücke.

Während Steam diesen Profilnamen exakt wie eingegeben anzeigt, also auch mit den spitzen Klammern, kann es für die Betreiber und die Anwender einer Webseite ungemütlich werden. Nämlich dann, wenn der Programmier die bei Steam abgerufenen Informationen als valide und sicher annimmt. Säubert er den Steam-Profilnamen nicht von HTML-Tags und gibt ihn ungefiltert aus, dann sieht der Anwender der Webseite als Profilnamen zwar „Zel“, per HTML wird aber ein unter der „ze.ly“ abgelegtes Javascript eingebunden. Dieses Script kann nun beliebigen Code im Browser-Kontext der Besuchers ausführen und von der Webseite gezeigte Inhalte verändern.

Steamanalyst.com von XSS-Attacke betroffen

Erst kürzlich war die Lotterie-Webseite Steamanalyst.com von eben jenem Problem betroffen. Das per XSS eingebundene Javascript änderte das Ziel des Buttons „Free CS:GO Keys“, das nun zum Download einer EXE-Datei führte. Die Besucher nahmen an, dass die von Steamanalyst gesetzten Links vertrauenswürdig seien, starteten den Download und führten die Datei „CSGOFortunes.exe“ aus. Dahinter versteckte sich natürlich Malware, die das Inventar eines Steam Users leerräumte. In einem konkreten Fall gingen einem Steam User, nach eigenen Angaben, damit Gegenstände im Wert von etwa 600 US-Dollar verloren.

Allerdings kann man für dieses Fehler nicht Valve verantwortlich machen. Die Programmierer von Steamanalyst haben unsauber gearbeitet, schließlich ist XSS ein mehr als bekannter Angriffsverktor. Vermeiden lässt sich das Problem, wenn alle abgerufenen Details eines Steam-Accounts als potenzielle Benutzereingaben interpretiert und auch entsprechend behandelt werden. Ein strip_tags() auf den Profilnamen angewendet, hätte das problematische script-Tag entfernt. Alternativ lässt sich auch htmlspecialchars() anwenden. Es wandelt etwa einfache und doppelte Anrührungszeichen (bei Verwendung des Flags ENT_QUOTES) sowie auch spitze Klammern in die entsprechenden HTML-Entities um. Der untergeschobene HTML-Code wäre also nicht ausgeführt, sondern lediglich dargestellt worden.