Stabsstelle DV-Sicherheit der
Universität Stuttgart (RUS-CERT)
https://cert.uni-stuttgart.de
logo
Meldung Nr: RUS-CERT-392

[Generic/i18n] Locale-Einstellungen mit überraschenden Auswirkungen
(2001-07-02 21:43:04+00)


Die Umsetzung von Standards, die die Internationalisierung der klassischen UNIX-Kommandozeilen-Tools vorantreiben sollen, kann die Korrektheit von Shell-Skripten und ähnlichen Programmen signifikant beeinflussen.

Betroffene Systeme

Einfallstor
Lokaler Account. Serverdienste verwenden in der Regel die Internationalisierungsroutinen nicht.

Auswirkung
Fehlverhalten von Programmen, möglicherweise in einer Weise, die das System gefährdet.

Typ der Verwundbarkeit
Änderungen an etablierten Schnittstellen, ohne daß die die Schnittstellen nutzenden Skripte und Programme angepaßt werden.

Gefahrenpotential
Nicht abzuschätzen.

Beschreibung
Mit der Adaptierung von Standards wie der Single UNIX Specification, Version 2 hält auch auf UNIX-Systemen die Internationalisierung auf breiter Front Einzug. Davon sind auch die üblichen Systemprogramme wie die Shell selbst, grep, find und viele mehr betroffen. Die Internationalisierung beläuft sich dabei nicht nur auf die Übersetzung von Fehlermeldungen, sondern verändert auch das Verhalten einiger C-Laufzeitroutinen und damit auch dieser Hilfsprogramme.

Um zu einer anderen locale, also einem Satz von Regeln zur Berücksichtung regionaler Gebräuche bei Verarbeitung von Zahlen und Zeichen, zu wechseln, existieren eine Reihe von Umgebungsvariablen:

Die letztendlich gesetzten Werte lassen sich mit dem Programm locale anzeigen. Für uns sind im folgenden vor allem LC_CTYPE, LC_COLLATE und LC_MESSAGES interessant.

Über LC_CTYPE wird kontrolliert, wie Oktette als Zeichen interpretiert werden. Ein Beispiel: die hexadezimale Zahlenfolge 'C3 A4' wird als Text im ISO-8859-Zeichensatz als 'ä' eingelesen, im UTF-8-Zeichensatz aber als 'ä'. Die Risiken, die das Setzen der LC_CTYPE-Variable eventuell birgt, sind unter anderen:

LC_COLLATE hingegen verändert die Sortierreihenfolge bei Zeichenketten und paßt sie lokalen Erfordernissen an. Man vergleiche selbst:
$ printf 'a\nb\nA\nB\n' | sort
A
B
a
b
$ printf 'a\nb\nA\nB\n' | LC_COLLATE=en_US sort
a
A
b
B
$ 
Dadurch ergeben sich folgende Auswirkungen:

Mit LC_MESSAGE wird ein message catalog ausgewählt, der Übersetzungen enthält. Möglicherweise lassen sich Programmen über diese Variable und weitere Mechanismen Übersetzungen mit gefährlichen format strings unterjubeln.

Auch das Setzen der Variablen LC_CTYPE und LC_COLLATE kann mit dem Unterschieben spezieller locale-Definitionen verbunden werden; dadurch ergeben sich zusätzliche Möglichkeiten.

Angesichts dieser Probleme erscheint es zunehmend fragwürdig, ob dieser Weg zur Internationalisierung der klassischen UNIX-Tools wirklich empfehlenswert ist, zumal diese Mechanismen einige Probleme nicht behandeln (z.B. unterschiedliche Zeichensätze für Dateiinhalte, Dateinamen und zur Kommunikation mit dem Terminal).

Gegenmaßnahmen

(fw)

Hinweis
Die in diesem Text enthaltene Information wurde für die Mitglieder der Universität Stuttgart recherchiert und zusammengestellt. Die Universität Stuttgart übernimmt keinerlei Haftung für die Inhalte. Dieser Artikel darf ausschließlich in unveränderter Form und nur zusammen mit diesem Hinweis sowie dem folgenden Copyrightverweis veröffentlicht werden. Eine Veröffentlichung unter diesen Bedingungen an anderer Stelle ist ausdrücklich gestattet.

Copyright © 2017 RUS-CERT, Universität Stuttgart, https://cert.uni-stuttgart.de/


https://cert.uni-stuttgart.de/ticker/article.php?mid=392