🕵️ Perl 5.8.9 UTF-8 Handler regexec.c Denial of Service
Nachrichtenbereich: 🕵️ Sicherheitslücken
🔗 Quelle: scip.ch
Allgemein
scipID: 82792
Betroffen: Perl 5.8.9
Veröffentlicht: 20.04.2016 (Karl Williamson)
Risiko: kritisch
Erstellt: 25.04.2016
Eintrag: 78.4% komplett
Beschreibung
In Perl 5.8.9 wurde eine Schwachstelle entdeckt. Sie wurde als kritisch eingestuft. Betroffen ist eine unbekannte Funktion der Datei regexec.c der Komponente UTF-8 Handler. Mittels Manipulieren mit einer unbekannten Eingabe kann eine Denial of Service-Schwachstelle (CPU Exhaustion) ausgenutzt werden. Das hat Auswirkungen auf die Verfügbarkeit.
Die Schwachstelle wurde am 20.04.2016 durch Karl Williamson als Patch #123562 in Form eines bestätigten Mailinglist Posts (oss-sec) an die Öffentlichkeit getragen. Bereitgestellt wird das Advisory unter seclists.org. Die Veröffentlichung wurde in Zusammenarbeit mit dem Hersteller durchgeführt. Eine eindeutige Identifikation der Schwachstelle wird seit dem 20.04.2016 mit CVE-2015-8853 vorgenommen. Sie ist leicht auszunutzen. Die Umsetzung des Angriffs kann dabei über das Netzwerk erfolgen. Um eine Ausnutzung durchzusetzen, muss keine spezifische Authentisierung umgesetzt werden. Es sind sowohl technische Details als auch ein öffentlicher Exploit zur Schwachstelle bekannt. Der folgende Code generiert das Problem:
if (UTF8_IS_CONTINUED(*s)) { while (s > lim && UTF8_IS_CONTINUATION(*s)) s--; (...)Das Advisory weist darauf hin:
The regex engine got into an infinite loop because of the malformation. It is trying to back-up over a sequence of UTF-8 continuation bytes. But the character just before the sequence should be a start byte. If not, there is a malformation. I added a test to croak if that isn’t the case so that it doesn’t just infinitely loop. I did this also in the similar areas of regexec.c.
Ein öffentlicher Exploit wurde durch Karl Williamson umgesetzt und schon vor und nicht nach dem Advisory veröffentlicht. Er wird als proof-of-concept gehandelt. Der Download des Exploits kann von perl5.git.perl.org geschehen. Als 0day erzielte der Exploit wohl etwa $1k-$2k auf dem Schwarzmarkt. Der durch den Exploit genutzte Code gestaltet sich wie folgt:
my $code=' BEGIN{require q(test.pl);} use Encode qw(_utf8_on); my $malformed = "ax80n"; _utf8_on($malformed); watchdog(3); $malformed =~ /(nr|r)$/; print q(No infinite loop here!); ';Die Schwachstelle lässt sich durch das Einspielen eines Patches beheben. Dieser kann von perl5.git.perl.org bezogen werden. Das Erscheinen einer Gegenmassnahme geschah schon vor und nicht nach der Veröffentlichung der Schwachstelle. Die Entwickler haben offensichtlich vorab reagiert. Die Schwachstelle wird durch folgenden Code angegangen:
if (! UTF8_IS_START(*s)) { dTHX; Perl_croak(aTHX_ "Malformed UTF-8 character (fatal)"); }Mitunter wird der Fehler auch in der Verwundbarkeitsdatenbank von X-Force (112536) dokumentiert.
CVSS
Base Score: 7.8 (CVSS2#AV:N/AC:L/Au:N/C:N/I:N/A:C) [?]
Temp Score: 6.1 (CVSS2#E:POC/RL:OF/RC:C) [?]
CPE
Exploiting
Klasse: Denial of Service
Lokal: Nein
Remote: Ja
Verfügbarkeit: Ja
Zugang: öffentlich
Status: Proof-of-Concept
Autor: Karl Williamson
Download: perl5.git.perl.org
Aktuelle Preisschätzung: $1k-$2k (0-day) / $0-$1k (Heute)
Gegenmassnahmen
Empfehlung: Patch
Status: Offizieller Fix
0-Day Time: 0 Tage seit gefunden
Patch: perl5.git.perl.org
Timeline
16.09.2015 | Exploit veröffentlicht
16.09.2015 | Gegenmassnahme veröffentlicht
20.04.2016 | Advisory veröffentlicht
20.04.2016 | CVE zugewiesen
25.04.2016 | VulDB Eintrag erstellt
25.04.2016 | VulDB Eintrag aktualisiert
Quellen
Advisory: Patch #123562
Person: Karl Williamson
Status: Bestätigt
Koordiniert: Ja
CVE: CVE-2015-8853 (mitre.org) (nvd.nist.org) (cvedetails.com)
X-Force: 112536 – Perl UTF8 inputs denial of service
...
🕵️ UTF-7 UTF-8 XSS in title
📈 41.71 Punkte
🕵️ Sicherheitslücken
🕵️ Medium CVE-2020-12723: PERL PERL
📈 25.06 Punkte
🕵️ Sicherheitslücken
🔧 Perl Weekly #668 - Perl v5.40
📈 25.06 Punkte
🔧 Programmierung
🔧 Perl Weekly #665 - How to get better at Perl?
📈 25.06 Punkte
🔧 Programmierung
🔧 Perl Weekly #664 - German Perl Workshop
📈 25.06 Punkte
🔧 Programmierung