10. Sicherheitsüberlegungen
Implementierer von UTF-8 müssen die Sicherheitsaspekte berücksichtigen, die sich aus dem Umgang mit unzulässigen UTF-8-Sequenzen ergeben. Es ist denkbar, dass ein Angreifer unter bestimmten Umständen einen unvorsichtigen UTF-8-Parser ausnutzt, indem er ihm eine Oktettfolge sendet, die von der UTF-8-Syntax nicht zugelassen ist.
Angriff über überlange Kodierung (overlong)
Eine besonders raffinierte Form dieses Angriffs kann gegen einen Parser gerichtet werden, der sicherheitskritische Gültigkeitsprüfungen an der UTF-8-kodierten Form seiner Eingabe durchführt, bestimmte unzulässige Oktettfolgen jedoch als Zeichen interpretiert.
Beispiel 1: NUL-Zeichen
So könnte ein Parser etwa das NUL-Zeichen verbieten, wenn es als Ein-Oktett-Sequenz 00 kodiert ist, die unzulässige Zwei-Oktett-Sequenz C0 80 jedoch fälschlicherweise zulassen und als NUL-Zeichen interpretieren.
Beispiel 2: Pfadtraversierung
Ein weiteres Beispiel wäre ein Parser, der die Oktettfolge 2F 2E 2E 2F („/../“) verbietet, die unzulässige Oktettfolge 2F C0 AE 2E 2F jedoch zulässt.
Reale Auswirkungen
Letzterer Exploit wurde tatsächlich von einem weit verbreiteten Virus genutzt, der im Jahr 2001 Webserver angriff; die Sicherheitsbedrohung ist also durchaus real.
Risiko eines Pufferüberlaufs
Ein weiteres Sicherheitsproblem tritt beim Kodieren nach UTF-8 auf: Die Beschreibung von UTF-8 in ISO/IEC 10646 erlaubt die Kodierung von Zeichennummern bis U+7FFFFFFF und erzeugt dabei Sequenzen von bis zu 6 Byte.
Es besteht daher die Gefahr eines Pufferüberlaufs, wenn:
- Der Bereich der Zeichennummern nicht ausdrücklich auf U+10FFFF begrenzt wird
- Bei der Dimensionierung von Puffern die Möglichkeit von 5- und 6-Byte-Sequenzen nicht berücksichtigt wird
Probleme der kanonischen Äquivalenz
Die Sicherheit kann außerdem durch ein Merkmal mehrerer Zeichenkodierungen, darunter UTF-8, beeinträchtigt werden: „Dasselbe“ (soweit ein Benutzer dies wahrnimmt) kann durch mehrere verschiedene Zeichenfolgen dargestellt werden.
Beispiel: Akzentzeichen
Ein e mit Akut kann beispielsweise dargestellt werden durch:
- Das vorkomponierte Zeichen U+00E9 E ACUTE
- Die kanonisch äquivalente Folge U+0065 U+0301 (E + COMBINING ACUTE)
Auswirkungen auf die Sicherheit
Obwohl UTF-8 für jede Zeichenfolge eine eindeutige Bytefolge liefert, kann die Existenz mehrerer Zeichenfolgen für „dasselbe“ überall dort sicherheitsrelevante Folgen haben, wo Folgendes eine Rolle spielt:
- Zeichenkettenvergleich
- Indizierung
- Suche
- Sortierung
- Abgleich mit regulären Ausdrücken
- Auswahloperationen
Beispiel für ein Angriffsszenario
Ein Beispiel wäre der Zeichenkettenvergleich einer Kennung in einem Berechtigungsnachweis mit den Einträgen einer Zugriffssteuerungsliste.
Unicode-Normalisierung
Dieses Problem lässt sich mit Lösungen auf Basis der Unicode-Normalisierungsformen angehen, siehe [UAX15].
Die Normalisierungsformen stellen kanonische Repräsentationen bereit, die sicherstellen, dass äquivalente Zeichen beim Vergleich als gleich gelten.
Verwandte Links
- Zurück: 9. IANA-Überlegungen
- Zurück zur RFC 3629 Startseite
- Weiter: 11. Danksagungen