# Unicode-Bug

Als Unicode-Bug (auch „Unicode of Death“ bzw. Bug-spezifische Namen) wird ein Bug bezeichnet, bei dem ein Computersystem oder Mobilgerät bzw. darauf laufende Software oder Apps allein durch die Eingabe oder den Empfang von bestimmten Unicode-Sequenzen zum Absturz oder anderem Fehlverhalten gebracht wird.

## Fehlermechanismus und Behebung

Einige Betriebssysteme und Anwendungsprogramme existieren schon länger als der Unicode-Standard. Diese Systeme wurden daher ursprünglich für den ASCII-Zeichensatz entwickelt. Die Unterstützung von Unicode wurde erst in späteren Versionen eingeführt. Beispielsweise führte Microsoft die Unicode-Unterstützung für seine Betriebssysteme 1993 mit Windows NT ein, darin waren aber Funktionen und Libraries aus den älteren Betriebssystemen OS/2 und MS-DOS enthalten. Da sich der unterstützte Zeichensatz durch alle Schichten eines Systems (beispielhaft: OSI-Modell) zieht, kann es bei der nachträglichen Unterstützung von Unicode zu unerwünschten Effekten und Sicherheitslücken kommen.
Eine weitere systematische Fehlerquelle ist die Weiterentwicklung von Unicode, mit der manche Betriebssysteme und Anwendungsprogramme nicht Schritt halten, auch wenn sie nativ für Unicode entwickelt wurden. So konnte ein Unicode-Zeichen ursprünglich in UTF-16 nur aus 2 Byte bestehen, seit Unicode 3.1 können es je nach Zeichen 2 oder 4 Byte sein. Auch die Einführung von neuen Steuerzeichen (z. B. rechts-nach-links Steuerzeichen) kann zu nicht vorhergesehenem Verhalten führen.
Im Support von verschiedenen Kodierungen wie UTF-8 und UTF-16 bestehen große Unterschiede. Eine Software, die nur für UTF-8 entwickelt wurde, wird beim Empfang von UTF-16-Nachrichten ein unerwünschtes Verhalten zeigen und umgekehrt.
Der eigentliche Fehlermechanismus (bzw. die Sicherheitslücke) unterscheiden sich je nach Bug und betroffenem System. Gemeinsam ist den Bugs, dass der reine Empfang, bzw. die Anzeige einer UTF-Sequenz zu einem Fehlverhalten führt. Daher ist das verwundbare System jenes Modul, das den UTF-Text anzeigt (z. B.: Rendering Engine eines Browsers) oder weiterleitet. Dabei kommt es zu einem „Übersprung“ zwischen der Anzeige und einem Verhalten des Systems, d. h. die darzustellenden Zeichen werden zu Programmanweisungen (wie beim „IPP Integer Overflow“) oder führen zumindest zu unendlichen Loops, die das System zum Absturz bringen (wie beim „Black Dot“).
Ein universelles Gegenmittel gegen Unicode-Bugs existiert nicht. Wie bei Computerviren setzt der Schutz beim betroffenen System selbst an, das mittels Patch auf den neuesten Stand gebracht werden sollte. Auch die Verbreitung der fehlerauslösenden Unicode-Sequenzen kann behindert werden, so wie das Facebook beim „Effective Power“ Bug getan hat.

## Bekannte Unicode-Bugs

Die folgende Aufzählung in chronologischer Folge ist beispielhaft.

### „IPP Integer Overflow Exploit“ auf Microsoft IIS (2000)

Der „IPP Integer Overflow Exploit“ (auch „IPP Buffer Overrun Vulnerability“) trat beim Internet Printing Protocol (IPP) auf, so wie es von Microsoft als ISAPI in Microsoft Internet Information Services (IIS) umgesetzt wurde. Der Bug wurde erstmals im Oktober 2000 publiziert. Im Oktober 2001 setzte das FBI in Zusammenarbeit mit dem System Administration, Networking, and Security (SANS) Institut den Bug unter dem Namen „Unicode Vulnerability (Web Server folder traversal)“ auf Platz 2 der Windows-spezifischen Sicherheitslücken, gerankt nach Gefährlichkeit. Ab IIS Version 6 wurde der Bug behoben.
Der Exploit nutzt eine unterschiedliche Größe des Buffers für ASCII und Unicode aus. Der ausgenutzte Fehler findet sich in der Umsetzung von IPP, nicht im IIS-Server selbst. Durch den Angriff mittels Buffer Overflow kann Programmiercode nach Wahl des Angreifers auf dem Webserver ausgeführt werden, der Code kann dabei lokale Sicherheitsbefugnisse haben, die unbeschränkten Zugriff ermöglichen. Der Angriff kann auch als Denial of Service (DoS) erfolgen, indem auf dem angegriffenen IIS-Server eine große Anzahl von Prozessen gestartet wird, die nicht terminieren. Dadurch werden die Ressourcen des angegriffenen Systems aufgebraucht.

### „Unicode of Death“ auf Apple iOS (2013)

Im August 2013 trat ein als „Unicode of Death“ bezeichneter Bug unter iOS 6 und OS X 10.8 („Mountain Lion“) auf. Der Bug wurde durch Apple ab iOS 7 und OS X 10.9 („Mavericks“) behoben. Das Fehlverhalten wird ausgelöst, wenn die Komponente CoreText eine spezielle Unicode-Sequenz von fünf 16-Bit-Zeichen darstellen soll. Der Kernel reagiert auf den Stack Overflow, indem das betreffende Programm (Messaging App, Web Browser) beendet wird. Aus Usersicht wirkt das wie ein unprovozierter Absturz des betreffenden Programms.

### „Effective Power“ auf Apple iOS (2015)

Der Effective-Power-Bug (in Anlehnung an ältere Vorkommnisse auch als „Unicode of Death“ bezeichnet) trat ab Mai 2015 auf Apple-iOS-Geräten wie iPhone oder iPad auf. Die auslösende Zeichenkette von 75 Zeichen Länge bestand u. a. aus dem Text „effective. Power“ und arabischen Schriftzeichen. Der Bug befand sich in Apples Core-Text-API, das für Textdarstellung und Schriften zuständig ist. Nach Bekanntwerden des Problems Ende Mai 2015 hatte sich die Zeichenfolge in Messenger-Programmen verbreitet.
Durch den Bug war es teilweise nicht möglich, ein Programm wieder zu starten, das im Start-Screen die auslösende Zeichenkette zeigt. Als temporäre Lösung empfahl Apple, mit Hilfe von Siri die entsprechende Nachricht zu löschen, da Siri nur mit Sprachsteuerung und ohne Darstellung der Zeichenkette auskommt. Das Wiederauftreten des Problems konnte dann behoben werden, indem die Anzeige von Benachrichtigungen in den betroffenen Apps generell abgestellt wurde. Apple kündigte Ende Mai 2015 einen Bugfix im kommenden Software-Update an. Ab Anfang Juni 2015 wurde im Facebook Messenger die Anzeige der Zeichenfolge unterdrückt.

### „Single Unicode Symbol“ auf Apple iOS (2018)

Im Februar 2018 wurde ein Bug bekannt, der sich auf iPhones bis hin zu Version iOS 11.2.5 sowie auf MacBook mit OS 10.13 („High Sierra“) auswirkt. Durch den Bug werden Mail, Twitter, wie auch Chrome zum Absturz gebracht, teilweise ist eine Neuinstallation erforderlich. Im Gegensatz zu den meisten anderen Unicode-Eingabe-Bugs erfordert dieser Bug nur ein einziges Symbol, berichtet wurde u. a. über ein Symbol, das aus Buchstaben der indischen Sprache Telugu besteht.

### „Black Dot“ auf Apple iOS und Android (2018)

Der Black-Dot-Bug wirkte ab Mai 2018 auf iPhones und iPads mit iOS 10 oder 11. Dabei brachte eine bestimmte Zeichenfolge die native Nachrichtenapp zum Absturz. Die Zeichenfolge musste dazu bestimmte Emojis enthalten, u. a. einen schwarzen Punkt sowie eine Hand.
Der Bug wurde erstmals im Mai 2018 publiziert und tritt auf Android-Geräten auf. Die Nachricht scheint nur aus einem schwarzen Punkt zu bestehen, der namensgebend für den Bug war. Jedoch enthalten die auslösenden Nachrichten auch unsichtbaren Text. Diese nutzen eine Verwundbarkeit der Android Textdarstellungs-Engine aus und verwenden dabei Symbole, welche die Darstellungsrichtung des Textes (Links-zu-Rechts bzw. Rechts-nach-Links) steuern.