Hacking mit Unicode (am Beispiel von GitHub)

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() // 'ss' 'ß'.toLowerCase() === 'SS'.toLowerCase() // true // Note the Turkish dotless i 'John@Gıthub.com'.toUpperCase() === 'John@Github.com'.toUpperCase() 

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.

UnterschreibenCodepunktErgebnis
ß0x00DFSS
ı0x0131I
ſ0x017FS
0xFB00FF
fi0xFB01FI
fl0xFB02FL
0xFB03FFI
0xFB04FFL
0xFB05ST
0xFB06ST
K0x212Ak

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:

  1. Die eingegebene Adresse wird mit der toLowerCase-Methode in Kleinbuchstaben angegeben.
  2. Die eingegebene Adresse wird mit der Adresse in der Datenbank der registrierten Benutzer verglichen.
  3. 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.comxn—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.






Source: https://habr.com/ru/post/de481318/


All Articles