Sicherheitslücke in Python beim Umgang mit nicht validierten Bruchzahlen in ctypes

Es sind Korrekturversionen der Programmiersprachen Python 3.7.10 und 3.6.13 verfügbar, die eine Schwachstelle (CVE-2021-3177) beheben, die bei der Verarbeitung nicht validierter Gleitkommazahlen in Handlern, die C-Funktionen mithilfe des ctypes-Mechanismus aufrufen, zur Codeausführung führen kann . Das Problem betrifft auch die Python-Zweige 3.8 und 3.9, allerdings befinden sich die Updates für sie noch im Status „Release Candidate“ (Veröffentlichung ist für den 1. März geplant).

Das Problem wird durch einen Pufferüberlauf in der ctypes-Funktion PyCARg_repr() verursacht, der aufgrund einer unsicheren Verwendung von sprintf auftritt. Insbesondere um das Ergebnis der Transformation 'sprintf(buffer, " zu verarbeiten ", self->tag, self->value.b)' hat einen statischen Puffer von 256 Bytes zugewiesen ("char buffer[256]"), während das Ergebnis diesen Wert überschreiten könnte. Um die Anfälligkeit von Anwendungen für die Schwachstelle zu überprüfen, können Sie versuchen, den Wert „1e300“ zu übergeben, der bei Verarbeitung durch die Methode c_double.from_param zu einem Absturz führt, da die resultierende Zahl 308 Zeichen enthält und nicht in a passt 256-Byte-Puffer. Beispiel für problematischen Code: import ctypes; x = ctypes.c_double.from_param(1e300); repr(x)

Das Problem bleibt in Debian, Ubuntu und FreeBSD unbehoben, wurde aber bereits in Arch Linux, Fedora, SUSE behoben. In RHEL tritt die Schwachstelle aufgrund der Paketassemblierung im FORTIFY_SOURCE-Modus nicht auf, der solche Pufferüberläufe in String-Funktionen blockiert.

Source: opennet.ru

Kommentar hinzufügen