Eine Sicherheitslücke in Xen hat zur Folge, dass ein lokaler Angreifer höhere
Rechte auf dem Host-System erlangen kann. Zum Durchführen der Attacke
benötigt der Angreifer Kernel-Privilegien auf dem Gastsystem. Hat er diese,
kann er einen Fehler im Speichermanagement ausnutzen, um beliebige Befehle
auf dem Host-System abzusetzen.
Der verantwortliche Programmierfehler befindet sich in der Datei
xen/common/event_channel.c. Hierin ist die get_free_port()-Funktion
fehlerhaft. Ein Patch für diese Funktion wurde kürzlich veröffentlicht und
sieht folgendermassen aus:
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -104,7 +104,6 @@ static int get_free_port(struct domain *
if ( unlikely(chn == NULL) )
return -ENOMEM;
memset(chn, 0, EVTCHNS_PER_BUCKET * sizeof(*chn));
- bucket_from_port(d, port) = chn;
for ( i = 0; i < EVTCHNS_PER_BUCKET; i++ )
{
@@ -117,6 +116,8 @@ static int get_free_port(struct domain *
}
}
+ bucket_from_port(d, port) = chn;
+
return port;
Der einzige Fix hier besteht darin, den bucket_from_port()-Aufruf erst nach der
For()-Schleife aufzurufen und nicht davor. Mit dieser kleinen Modifikation ist
die Attacke nicht mehr durchführbar und der Angreifer kann keine Befehle mehr
auf dem Host-System ausführen.
Betroffen sind die Versionen 3.2 und älter.

