Ansicht umschalten
Avatar von Fefe

400 Beiträge seit 12.01.2000

Kurze Erklärung zu dem Bug

Also bei SMB (CIFS == neuer politisch korrekter Name für SMB, weil
SMB so
nach Windows klingt und einen schlechten Ruf hat) hat man in den
Paketen Unicode-Strings als UCS2.  UCS2 heißt, dass man pro Zeichen
im String zwei Bytes hat.  Im Normalfall (ASCII) ist halt jedes
zweite Zeichen Null.

In diesem Code kommt "length" von UniStrnlen, welches die Anzahl der
Zeichen (!) zurück liefert.  Das Problem ist, dass beim Schreiben des
Zielpuffers einmal durch die Codepage-Routinen konvertiert wird.  Der
worst case ist dabei UTF-8.  Für den Wertebereich der
UCS2-Eingabezeichen (0-0xffff) braucht UTF8 pro Zeichen im
schlechtesten Fall 3 Bytes.

Daher muß man hier die Länge mal drei nehmen, nicht mal zwei.  Und
das +1 ist für den Null-Terminator.  C-Strings werden durch ein
Null-Byte am Ende abgeschlossen.

In diesem Feld steht das Dateisystem drin, das ist bei allen mir
bekannten SMB-Implementationen ASCII, daher ist da noch nie was
passiert.  Das ist auch konstant, da steht dann halt NTFS drin.

Um das auszunutzen müßte ein Angreifer einen Mini-SMB-Server hacken
(oder den Code von Samba oder von mir nehmen), und ein Opfer dazu
kriegen, dort hin zu connecten, und er müßte einen UTF-8 Shellcode
bauen.Das ist prinzipiell möglich, siehe auch
> http://www.phrack.com/issues.html?issue=62&id=9

Falls das jemand tun will, meinen SMB-Server-Code gibt es bei
http://www.fefe.de/gatling/ in smb.c

Es sei der Hinweis gestattet, dass man für diesen Angriff nicht
unbedingt jemanden dazu bringen muss, einen bösen Server zu mounten. 
Es reicht, wenn jemand im LAN mit cifs irgendwas mounted.  Dann kann
man die bestehende Verbindung abbrechen und beim nächsten
Verbindungsversuch einen Exploit unterschieben.

Oh und bei allem Linux-Bashing und "Windows hat jetzt mehr
Sicherheit" Argumentieren muß man doch erwähnen, dass wir dieses
Problem sehen konnten, weil wir zu Linux und dem Patch den Quellcode
gekriegt haben.

Bewerten
- +
Ansicht umschalten