{"id":263201,"date":"2022-03-08T07:57:48","date_gmt":"2022-03-08T06:57:48","guid":{"rendered":"https:\/\/www.borncity.com\/blog\/?p=263201"},"modified":"2023-03-03T09:56:15","modified_gmt":"2023-03-03T08:56:15","slug":"dirty-pipe-linux-schwachstelle-ermglicht-root-zugriff","status":"publish","type":"post","link":"https:\/\/borncity.com\/blog\/2022\/03\/08\/dirty-pipe-linux-schwachstelle-ermglicht-root-zugriff\/","title":{"rendered":"Dirty Pipe-Linux-Schwachstelle erm&ouml;glicht Root-Zugriff"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" style=\"float: left; margin: 0px 10px 0px 0px; display: inline;\" src=\"https:\/\/borncity.com\/blog\/wp-content\/uploads\/2015\/11\/Linux.jpg\" width=\"64\" height=\"76\" \/>[<a href=\"https:\/\/borncity.com\/win\/2022\/03\/08\/dirty-pipe-linux-schwachstelle-ermglicht-root-zugriff\/\" target=\"_blank\" rel=\"noopener\">English<\/a>]In so gut wie allen Linux-Distributionen gibt es die als Dirty Pipe bezeichnete Linux-Schwachstelle CVE-2022-0847. Diese erm\u00f6glicht unprivilegierten Nutzern &#8211; ab dem Linux Kernel 5.8 und h\u00f6her &#8211; root-Rechte zu erlangen. Gef\u00e4hrdet sind Linux-Distributionen, IoT-Ger\u00e4te (und m\u00f6glicherweise auch Android-Systeme, falls dort bereits der Kernel 5.8 und h\u00f6her zum Einsatz kommt). Zu allem \u00dcberfluss ist inzwischen ein Exploit \u00f6ffentlich bekannt.<\/p>\n<p><!--more--><\/p>\n<h2>Schwachstelle CVE-2022-0847 erm\u00f6glicht root<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/vg04.met.vgwort.de\/na\/8d0093f20dc349e2b81bb9823c88eb9f\" alt=\"\" width=\"1\" height=\"1\" \/>Der Entwickler Max Kellermann hat die Schwachstelle <a href=\"https:\/\/cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2022-0847\" target=\"_blank\" rel=\"noopener\">CVE-2022-0847<\/a> in <a href=\"https:\/\/dirtypipe.cm4all.com\/\" target=\"_blank\" rel=\"noopener\">diesem Beitrag<\/a> der <a href=\"https:\/\/web.archive.org\/web\/20220930162037\/https:\/\/t3n.de\/consent?redirecturl=%2Fnews%2Fcm4all-ionos-uebernimmt-we22-cm4all-website-builder-webdesign-1353196%2F\" target=\"_blank\" rel=\"noopener\">IONOS-Tochter CM4All<\/a> offen gelegt (siehe auch <a href=\"https:\/\/www.ionos.de\/newsroom\/news\/dirty-pipe-schwerwiegende-sicherheitsluecke-im-linux-kernel-behoben\/\" target=\"_blank\" rel=\"noopener\">diese IONOS-Meldung<\/a>). Die als Dirty Pipe bezeichnete Schwachstelle steckt ab Version 5.8 im Linux-Kernel und erm\u00f6glicht das \u00dcberschreiben von Daten in beliebigen schreibgesch\u00fctzten Dateien. Dies kann zu einer Privilegienerweiterung ausgenutzt werden, da unprivilegierte Prozesse Code in Root-Prozesse einschleusen k\u00f6nnen. Mitre <a href=\"https:\/\/cve.mitre.org\/cgi-bin\/cvename.cgi?name=CVE-2022-0847\" target=\"_blank\" rel=\"noopener\">beschreibt<\/a> die Schwachstelle (f\u00fcr Debian) so:<\/p>\n<blockquote><p>A flaw was found in the way the \"flags\" member of the new pipe buffer structure was lacking proper initialization in copy_page_to_iter_pipe and push_pipe functions in the Linux kernel and could thus contain stale values. An unprivileged local user could use this flaw to write to pages in the page cache backed by read only files and as such escalate their privileges on the system. This flaw affects Linux kernel versions prior to 5.17-rc6.<\/p><\/blockquote>\n<p>Die Schwachstelle \u00e4hnelt laut Kellermann der als Dirty Cow bekannten und 2016 gefixten CVE-2016-5195, ist aber leichter auszunutzen. Die Sicherheitsl\u00fccke wurde in Linux 5.16.11, 5.15.25 und 5.10.102 behoben. Problem werden die Systeme im Bereich IoT-Ger\u00e4te und Android sein, die keine Updates des Linux-Kernels mehr erhalten.<\/p>\n<h2>Entdeckung durch Zufall<\/h2>\n<p>Die Entdeckung erfolgte durch einen Zufall mit einem einem Support-Ticket \u00fcber besch\u00e4digte Dateien. Ein Kunde beschwerte sich, dass die im .gzip-Format heruntergeladenen Zugriffsprotokolle nicht dekomprimiert werden konnten. Bei der Analyse konnte eine besch\u00e4digte Protokolldatei auf einem der Protokollserver gefunden werden, die sich zwar dekomprimiert lie\u00df. Aber gzip meldete einen CRC-Fehler. Eine Erkl\u00e4rung f\u00fcr die Besch\u00e4digung gab es nicht.<\/p>\n<p>Als dieser CRC-Fehler Monate sp\u00e4ter wiederholt bei der Protokolldatei und anderen Dateien auftrat, begann Kellermann mit Nachforschungen. Dabei stie\u00df er auf die Schwachstelle im Linux-Kernel ab Version 5.8. Die Sicherheitsl\u00fccke CVE-2022-0847 tritt in der Pipe-Funktion auf, die f\u00fcr die unidirektionale Kommunikation zwischen Prozessen verwendet wird.<\/p>\n<h2>Schwachstelle im Pipe-Mechanismus<\/h2>\n<p>Der Linux-Kernel implementiert dies durch einen Ring von <em>struct pipe_buffer<\/em>, die jeweils auf eine Seite verweisen. Ein Ende dient dazu, Daten hineinzuschieben, das andere Ende kann diese Daten abrufen. Beim ersten Schreiben in eine Pipe wird eine Seite (mit max. Platz f\u00fcr 4 kB Daten) reserviert. Wenn der letzte Schreibvorgang die Seite nicht vollst\u00e4ndig f\u00fcllt, kann ein nachfolgender Schreibvorgang an die bestehende Seite angeh\u00e4ngt werden, anstatt eine neue Seite zuzuweisen. So funktionieren \"anonyme\" Pipe-Puffer (anon_pipe_buf_ops).<\/p>\n<p>Werden jedoch Daten per splice() aus einer Datei in die Pipe eingef\u00fcgt, l\u00e4dt der Kernel die Daten zun\u00e4chst in den Seiten-Cache. Dann erstellt er eine struct pipe_buffer-Struktur, die in den Seiten-Cache zeigt (Null-Kopie). Im Gegensatz zu anonymen Pipe-Puffern d\u00fcrfen zus\u00e4tzliche Daten, die in die Pipe geschrieben werden, nicht an eine solche Seite angeh\u00e4ngt werden, da die Seite dem Seiten-Cache geh\u00f6rt, nicht der Pipe. Diese Mechanismus erm\u00f6glicht es einem nicht privilegierten Benutzer \u00fcber die Dirty Pipe-Schwachstelle, Daten in schreibgesch\u00fctzte Dateien zu injizieren und zu \u00fcberschreiben, einschlie\u00dflich SUID-Prozesse, die als Root laufen.<\/p>\n<h2>Fixes, Offenlegung und Proof of Concept<\/h2>\n<p>Das oben erw\u00e4hnte Support-Ticket nach einer Kundenbeschwerde \u00fcber kaputte .gz-Archive stammt vom 29. April 2021 &#8211; aber erst am 19. Februar 2022 konnte Kellermann die Schwachstelle im Linux-Kernel ausmachen. Am 20. Februar 2022 wurde das Linux Kernel-Sicherheitsteam informiert. Diese begannen mit der Entwicklung einer bereinigten Kernel-Version.<\/p>\n<ul>\n<li>2022-02-23: Linux Stable Releases mit Fix freigegeben (<a href=\"https:\/\/lore.kernel.org\/stable\/1645618039140207@kroah.com\/\" target=\"_blank\" rel=\"noopener\">5.16.11<\/a>, <a href=\"https:\/\/lore.kernel.org\/stable\/164561803311588@kroah.com\/\" target=\"_blank\" rel=\"noopener\">5.15.25<\/a>, <a href=\"https:\/\/lore.kernel.org\/stable\/164561802556115@kroah.com\/\">5.10.102<\/a>)<\/li>\n<li>2022-02-24: <a href=\"https:\/\/android-review.googlesource.com\/c\/kernel\/common\/+\/1998671\" target=\"_blank\" rel=\"noopener\">Google f\u00fcgt den Fix in den Android-Kernel ein<\/a><\/li>\n<\/ul>\n<p>Am 28. Februar wurde die <a href=\"https:\/\/oss-security.openwall.org\/wiki\/mailing-lists\/distros#how-to-use-the-lists\" target=\"_blank\" rel=\"noopener\">Linux-Distros<\/a> Mailing-Liste informiert und am 7. M\u00e4rz 2022 erfolgte die Offenlegung der Schwachstelle in <a href=\"https:\/\/dirtypipe.cm4all.com\/\" target=\"_blank\" rel=\"noopener\">diesem Blog-Beitrag<\/a>. Dort sind auch weitere Details sowie ein Proof of Concept zu finden.<\/p>\n<p><a href=\"https:\/\/twitter.com\/BleepinComputer\/status\/1500944934848942088\" target=\"_blank\" rel=\"noopener\"><img decoding=\"async\" title=\"Dirty Pipe in Linux\" src=\"https:\/\/i.imgur.com\/On9Lvda.png\" alt=\"Dirty Pipe in Linux\" \/><\/a><\/p>\n<p>Die Kollegen von Bleeping Computer weisen <a href=\"https:\/\/www.bleepingcomputer.com\/news\/security\/new-linux-bug-gives-root-on-all-major-distros-exploit-released\/\" target=\"_blank\" rel=\"noopener\">hier<\/a> darauf hin, dass es ein zweites Proof of Concept existiert, bei dem ein Sicherheitsforscher <a href=\"https:\/\/twitter.com\/phithon_xg\/status\/1500905126076157953\" target=\"_blank\" rel=\"noopener\">die passwd-Datei eines Linux-Nutzers zur\u00fcck setzt<\/a>. So kann er ein leeres Passwort vorgeben, wodurch Angreifer sich \u00fcber <em>su root <\/em>Super User-Berechtigungen holen. Und ein weiterer Sicherheitsforscher hat <a href=\"https:\/\/twitter.com\/bl4sty\/status\/1500822440569708545\" target=\"_blank\" rel=\"noopener\">einen Weg skizziert<\/a>, um eine Web-Shell \u00fcber die Schwachstelle in einem Linux-System zu injizieren.<\/p>\n<p>Der Angreifer muss aber auf dem lokalen System angemeldet sein, um die Pipes nutzen zu k\u00f6nnen. Hier ist die Frage, ob Anwendungen wie Browser, Mail-Clients oder aus Downloads einen solchen Angriff mit Privilegien-Erh\u00f6hungen fahren k\u00f6nnen.<\/p>\n<p>Der Linux-Kernel 5.8 wurde im August 2020 ver\u00f6ffentlicht (siehe <a href=\"https:\/\/www.heise.de\/news\/Linux-5-8-Bislang-groesstes-Kernel-Update-veroeffentlicht-4865611.html\" target=\"_blank\" rel=\"noopener\">diesen heise-Beitrag<\/a>). Das Problem, was jetzt besteht: Es gibt zwar Kernel-Patches f\u00fcr die meisten Linux-Distributionen, aber nicht alle Linux-Systeme werden bereits gepatcht sein. Speziell bei IoT-Ger\u00e4ten k\u00f6nnte es einige Firmware-Implementierungen betreffen &#8211; obwohl dort m\u00f6glicherweise noch die \u00e4lteren Kernel vor Version 5.8 verwendet werden.<\/p>\n<h2>Entwarnung f\u00fcr Android<\/h2>\n<p>Bez\u00fcglich Android habe ich mal nachgesehen: Auf Wikipedia hei\u00dft es, dass Android 11 erst die Kernelversionen 4.14, 4.19 sowie 5.4 verwendet. Hier w\u00fcrde ich vorsichtig Entwarnung geben &#8211; da nur experimentelle Versionen von Android 12 einen Kernel 5.10 verwenden (siehe <a href=\"https:\/\/source.android.com\/devices\/architecture\/kernel\/android-common\" target=\"_blank\" rel=\"noopener\">hier<\/a> und <a href=\"https:\/\/android.stackexchange.com\/questions\/51651\/which-android-runs-which-linux-kernel\" target=\"_blank\" rel=\"noopener\">hier<\/a>). Die Android 12-Ger\u00e4te, die eine betroffene Kernel-Version verwenden, d\u00fcrften (sofern betroffen) auch Sicherheitsupdates bekommen. Die Annahme setzt nat\u00fcrlich voraus, dass die \u00e4lteren Kernel-Versionen nicht betroffen sind.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[English]In so gut wie allen Linux-Distributionen gibt es die als Dirty Pipe bezeichnete Linux-Schwachstelle CVE-2022-0847. Diese erm\u00f6glicht unprivilegierten Nutzern &#8211; ab dem Linux Kernel 5.8 und h\u00f6her &#8211; root-Rechte zu erlangen. Gef\u00e4hrdet sind Linux-Distributionen, IoT-Ger\u00e4te (und m\u00f6glicherweise auch Android-Systeme, falls &hellip; <a href=\"https:\/\/borncity.com\/blog\/2022\/03\/08\/dirty-pipe-linux-schwachstelle-ermglicht-root-zugriff\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[95,426],"tags":[4305,4328],"class_list":["post-263201","post","type-post","status-publish","format-standard","hentry","category-linux","category-sicherheit","tag-linux","tag-sicherheit"],"_links":{"self":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/263201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/comments?post=263201"}],"version-history":[{"count":0,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/posts\/263201\/revisions"}],"wp:attachment":[{"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/media?parent=263201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/categories?post=263201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/borncity.com\/blog\/wp-json\/wp\/v2\/tags?post=263201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}