Bufferüberlauf in Perl, verursacht durch die Verarbeitung von Zeichen

Es wurden korrigierende Updates für die Perl-Interpreter-Versionen 5.40.2 und 5.38.4 veröffentlicht, in denen eine Schwachstelle (CVE-2024-56406) behoben wurde, die zu einem Pufferüberlauf bei der Transliterierung speziell formatierter Nicht-ASCII-Zeichen mit dem Operator „tr/..../..../“ führt. Es besteht die Möglichkeit, diese Schwachstelle auszunutzen, um die Ausführung eigenen Codes im System zu ermöglichen. Das Problem tritt in den stabilen Versionen von Perl seit 2021 auf und betrifft die Zweige Perl 5.34, 5.36, 5.38 und 5.40. Informationen zur Behebung der Schwachstelle in den Distributionen finden Sie auf den folgenden Seiten: Debian, Ubuntu, Fedora, Arch, FreeBSD. Distributionen, die auf RHEL 9, SUSE 15 und openSUSE Leap 15.6 basieren, sind nicht anfällig für diese Schwachstelle, da sie die Versionen Perl 5.32 und 5.26 enthalten.

Die Schwachstelle betrifft Programme, die nicht verifizierte externe Daten im linken Teil des Operators „tr“ verwenden, in dem die Variable mit den Daten für den Zeichenersatz angegeben wird (z. B. „$external_string =~ tr/a/b/“). In der Funktion S_do_trans_invmap(), die den Operator ermöglicht, erfolgt bei der Verarbeitung bestimmter Nicht-ASCII-Bytes ein Zugriff auf den Speicher außerhalb des zugewiesenen Puffers. Der Pufferüberlauf tritt auf, weil bestimmte Bytefolgen im ursprünglichen Datensatz in UTF-8-Folgen umgewandelt werden können, für die zwei Bytes anstelle von einem benötigt werden.

Bemerkenswert ist, dass die Schwachstelle nach einer 2020 eingeführten Änderung aufgetreten ist, die die zusätzliche Überprüfung der ausreichenden Speicherzuweisung beseitigt hat, unter dem Vorwand, dass bei der Berechnung der Größe eine Aufrundung erforderlich sei. Um die Anwesenheit der Schwachstelle zu überprüfen, kann der folgende Code ausgeführt werden: perl -e '$_ = "\x{FF}" x 1000000; tr/\xFF/\x{100}/;' Segmentation fault (core dumped)

Quelle: opennet.ru

60GB SSD 8Gb DDR4