Root-Exploit in Samba

Ein Buffer-Overflow-Fehler im Network Data Representation (NDR) Marshalling Code in Samba hat zur Folge, dass ein Angreifer Befehle mit Root-Rechten ausführen kann.

Ein Angriff ist über einen geschickt konstruierten Remote Procedure Call (RPC) möglich. Die Schwachstelle kann ohne Authentifizierung ausgenutzt werden und ist dadurch sehr kritisch. Diese Sicherheitslücke ist seit circa 10 Jahren Im Code versteckt, es könnte sich also um eine Schwachstelle handeln, die vor allem in Black-Hat-Kreisen verstärkt ausgenutzt wurde.

Ursache für den Overflow ist ein Problem beim Generieren von PIDL-basiertem Code. Bei PIDL handelt es sich um einen in Perl geschriebenen IDL-Compiler, der für DCE/RPC IDL-Dateien konzipiert wurde. Samba verwendet PIDL, um Client- und Server-Code automatisch zu generieren. IDL (Interface description language) ist eine Schnittstellenbeschreibungssprache, die zur Beschreibung von Software-Komponenten dient. Damit lassen sich ganz allgemein Objekte ohne direkten Bezug auf eine Programmiersprache beschreiben. Ein Compiler wie PIDL wandelt diese Beschreibung dann in eine bestimmte Programmiersprache um (Language Binding). Hauptanwendungsfeld von IDL ist der Austausch von Software-Komponenten zwischen verschiedenen Programmiersprachen über verteilte Systeme.

Die Sicherheitslücke entsteht dadurch, dass von PIDL generierter Code beim Allozieren von dynamischen Arrays zwei Variablen durcheinander bringt: Zum einen kann ein Array-Objekt ein explizites “size_is()”-Attribute besitzen, welches die Größe des Arrays angibt. Dieser Wert wird dann beispielsweise von Schleifen über Elemente des Arrays verwendet. Andererseits kann in
dem IDL-Code für das Objekt aber auch die Größe des Arrays implizit kodiert sein. Unglücklicherweise verwendet nun die Routine zur Allokation diesen zweiten impliziten Wert, während die Schleifen sich auf das Attribut verlassen. Beide Werte werden aber effektiv vom Client gesetzt, der das Objekt sendet. Das heißt, ein Angreifer kann sehr leicht einen Overflow des Arrays auslösen, indem er ein entsprechendes Objekt sendet. Mit einem entsprechenden Exploit lassen sich dann auch beliebige Befehle mit Root-Rechten auf dem Server ausführen.

Die ersten Advisories zu dieser Sicherheitslücke enthielten einen funktionsfähigen Proof-Of-Concept Exploit. Aufgrund der Brisanz der Schwachstelle wurde dieser jedoch von den meisten offiziellen Seiten entfernt. Der Nmap-Entwickler Fyodor hat aber eine Kopie auf der Nmap-Seite abgelegt. Dieser Exploit besteht aus einer Sammlung von Python-Code. Der Anwender braucht nur einen Hostnamen und Port anzugeben, um die Attacke gegen anfällige Samba-Systeme durchzuführen:

python run.py 127.0.0.1 139

Die Nmap-Entwickler arbeiten derzeit auch an einer effizienten Nmap-Erweiterung, um Dienste auf diese Schwachstelle zu scannen. Es ist anzunehmen, dass eine größere Angriffswelle basierend auf dieser Sicherheitslücke sehr bald startet.

Betroffen sind die Samba Versionen 3.0.x bis 3.6.3. Da Samba 3.0.0 bereits 2003 veröffentlich wurde, dürften praktisch alle derzeit installierten Samba-Installationen von dieser Sicherheitslücke betroffen sein. Die Samba-Spezialisten von Sernet stellen Updates bereit (Linux-Magazin Online berichtete)

Nach oben