Unicode ist außergewöhnlich komplex. Nur wenige kennen
alle Tricks : von unsichtbaren Zeichen und Steuerzeichen bis hin zu Ersatzpaaren und kombinierten Emojis (wenn zwei Zeichen hinzugefügt werden, entsteht ein dritter). Der Standard enthält 2
16 Codepositionen in 17
Ebenen . Tatsächlich kann das Erlernen von Unicode mit dem Erlernen einer separaten Programmiersprache verglichen werden.
Es überrascht nicht, dass Webentwickler einige der Feinheiten übersehen. Auf der anderen Seite können Angreifer die Funktionen von Unicode für ihre eigenen Zwecke nutzen, was sie auch tun.
Der Sicherheitsspezialist John Gracie
demonstrierte ein Beispiel für einen GitHub- Fehler bei der E-Mail-Überprüfung, um ein vergessenes Passwort wiederherzustellen. Ähnliche Fehler finden Sie auf anderen Websites.
John Gracie erklärt, was eine "Zeichenübersetzungskollision" ist, wenn zwei verschiedene Zeichen nach der Konvertierung in dasselbe Zeichen übersetzt werden.
In diesem Fall verwendete er das türkische Zeichen 'ı' ('i' ohne Punkt), das in das lateinische 'i' übersetzt wird, sodass die E-Mail-Adresse
John@Gıthub.com
nach der Verarbeitung zu
John@Github.com
:
'ß'.toLowerCase()
Solche Kollisionen sind in allen Unicode-Ebenen zu finden: Hier finden Sie die
vollständige Liste .
Wir interessieren uns hauptsächlich für die Zeichen, die in lateinische Zeichen übersetzt werden. Es gibt nur elf Möglichkeiten. An dritter Stelle in der Tabelle steht nur das türkische Zeichen 'i' ohne Punkt.
Mit GitHub konnte ein Angreifer ein Kennwort von einem anderen Konto abrufen, da das Verfahren zum Wiederherstellen eines vergessenen Kennworts nicht ordnungsgemäß funktionierte.
Im Rahmen dieses Vorgangs wurde die eingegebene E-Mail-Adresse mit der in der Datenbank gespeicherten Adresse verglichen. Überprüfungsalgorithmus:
- Die eingegebene Adresse wird mit der toLowerCase-Methode in Kleinbuchstaben angegeben.
- Die eingegebene Adresse wird mit der Adresse in der Datenbank der registrierten Benutzer verglichen.
- Wird eine Übereinstimmung gefunden, wird das Passwort aus der Datenbank an die eingegebene Adresse gesendet.
Offensichtlich waren sich die Entwickler der Kollision der Adressumsetzung bei Verwendung der
toLowerCase
Methode nicht bewusst.
In diesem Fall ist die Behebung des Fehlers einfach. Es reicht aus, das Passwort nicht an die eingegebene Adresse, sondern an die Adresse aus der Datenbank zu senden.
Dies ist natürlich keine vollständige Fehlerbehebung, sondern nur ein schneller Patch. Eine vollständigere Lösung wäre das Senden an Punycode zur Überprüfung:
John@Gıthub.com
→
xn—john@gthub-2ub.com
. Punycode wurde entwickelt, um Domain-Namen eindeutig in eine Folge von ASCII-Zeichen umzuwandeln. Die E-Mail-Adresse kann auf dieselbe Weise überprüft werden, die meisten Webanwendungen jedoch nicht.
John Gracie erhielt eine Geldprämie und
2500 Punkte für die Sicherheitsanfälligkeit, obwohl er immer noch weit entfernt vom Haupt-Github-Hacker
Alexander Dobkin ist : Ein Benutzer mit einem so ungewöhnlichen Namen hat bereits 30.750 Punkte verdient. Einschließlich zur Ausführung von beliebigem Code auf GitHub-Servern, die GitHub-Seiten generieren.
Messenger stürzt beim Empfang von Emoji mit schwarzen Punkten ab (Messenger unter iOS, WhatsApp für Android)Mit Unicode zusammenhängende Fehler haben eine solche Eigenschaft, dass sie in jeder Anwendung gefunden werden können, die den vom Benutzer eingegebenen Text verarbeitet. Sicherheitslücken bestehen in Webanwendungen und in nativen Programmen für Android und iOS. Einer der bekanntesten war der
iOS-Bug aus dem Jahr 2015 , als mehrere Unicode-Zeichen in einer SMS das Betriebssystem zum Absturz brachten. Letztes Jahr wurde in iOS 11.3 ein ähnlicher Unicode-Fehler entdeckt, der als
"schwarzer Punkt" bezeichnet wird . Ein ähnlicher Absturz trat in der WhatsApp-Anwendung für Android auf, wenn Sie das Emoji berühren.

