Eine Sicherheitslücke in Python (CVE-2014-1912) hat zur Folge, dass ein entfernter Angreifer Befehle mit den Rechten der Applikation ausführen kann. Ursache hierfür ist ein Buffer-Overflow-Fehler in der Funktion “recvfrom_into()” des Python-Socket-Interface. In Python entsprechend programmierte Netzwerkanwendungen sind anfällig für diese Schwachstelle. Ein einfacher Exploit für dieses Problem wurde bereits veröffentlicht.
Der Programmierfehler befindet sich in der Quelltextdatei “Modules/socketmodule.c”. Dort wird die “sock_recvfrom_guts()”-Funktion wie folgt aufgerufen:
readlen = sock_recvfrom_guts(s, buf.buf, recvlen, flags, &addr);
Das lädt Netzwerkdaten der Länge “recvlen” in einen internen Puffer. Die Länge dieses Puffers ist allerdings auf “buflen” beschränkt. Sollte der Angreifer nun zu viele Daten schicken, kann er diesen Puffer zum Überlauf bringen. Der Patch ist denkbar einfach:
/* Check if the buffer is large enough */
if (buflen < recvlen) { PyErr_SetString(PyExc_ValueError, "buffer too small for requested bytes"); goto error;
}
Hier kontrolliert eine If-Abfrage, ob der Puffer groß genug ist. Falls nicht, wird ein Fehler gemeldet. Damit ist die Attacke nicht mehr möglich.
Betroffen sind die Versionen 2.7.6 und 3.x. Python 3.3.4 und die kommende Version 3.4 beheben die Lücke.

