Zum Inhalt springen
BlogSicherheitLinode Security Digest März 7 - 14, 2022

Linode Security Digest 7. bis 14. März 2022

Linode Security Digest

Diese Woche werden wir uns mit hochgefährlichen Sicherheitslücken im Linux-Kernel beschäftigen.

Dirty Pipe - Linux Lokale Privilegieneskalation

CVE-2022-0847 erlaubt es einem unprivilegierten Linux-Benutzer, eine beliebige schreibgeschützte Datei zu überschreiben. Ein Benutzer könnte diese Schwachstelle ausnutzen, indem er Code in Root-Prozesse einschleust und seine Privilegien zum Root-Benutzer ausweitet. 

Ähnlich wie bei der allgegenwärtigen "Dirty Cow"-Schwachstelle kann ein Angreifer den Dirty Pipe Exploit ausführen und Text in eine Datei schreiben. Was Dirty Pipe zu einer leichter auszunutzenden Schwachstelle macht, ist die Tatsache, dass ein Benutzer Text in eine beliebige Datei schreiben kann und in einigen Fällen kann er seine Rechte über SUID-Binärdateien leicht ausweiten. 

Ursache - Die Sicherheitslücke Dirty Pipe wird durch eine nicht initialisierte Variable pipe_buffer.flags verursacht. Pipes sind Werkzeuge, die für die Kommunikation zwischen Prozessen verwendet werden. Ein Ende schiebt Daten in die Pipe, während das andere Ende diese Daten abrufen kann. Eine nicht initialisierte Pipe-Puffer-Variable stellt eine schwerwiegende Sicherheitslücke dar. Bei der Injektion von PIPE_BUF_FLAG_CAN_MERGE in einen Seitencache-Verweis ist es möglich, Daten im Seitencache zu überschreiben, indem einfach neue Daten in die Pipe geschrieben werden, die auf eine spezielle Weise vorbereitet wurde.

Diese Schwachstelle ist mit einigen Vorbehalten behaftet: 

  • Der Angreifer muss über Leserechte für die Datei
  • Der Versatz darf nicht auf einer Seitenbegrenzung liegen 
  • Der Schreibvorgang kann eine Seitengrenze nicht überschreiten 
  • Die Größe der Datei kann nicht geändert werden 

Derzeit gibt es keine Abhilfemaßnahmen für diese Sicherheitslücke. Wenn Sie mit einer Linux-Kernel-Version größer als 5.8 arbeiten, empfiehlt der Hersteller, auf die folgenden Versionen zu patchen: 5.16.11, 5.15.25 und 5.10.102.

Aktualisiert am 14. März 2022: Der neueste Linode-Kernel ist verfügbar, der Dirty Pipe behebt.

Container-Flucht über cgroups

Kontrollgruppen oder cgroups sind eine Funktion des Linux-Kernels, mit der die Nutzung von Computerressourcen für Prozesse zugewiesen und zugeteilt wird. In einigen Fällen werden diese Prozesse dann in hierarchischen Gruppen organisiert, wobei die Ressourcenzuweisung auf der Grundlage der Gruppe erfolgt.

Cgroups werden häufig in Linux-Containern verwendet, da in einem Container mehrere Prozesse laufen, die in Gruppen zusammengefasst werden müssen. 

CVE-2022-0492 ist eine Container-Escape-Schwachstelle, bei der ein Benutzer aus dem Container ausbrechen und auf den Host-Rechner wechseln kann. Dies betrifft nur die cgroup-Architektur v1

Ursache - Die Schwachstelle betrifft die release_agent-Datei, eine Funktion von cgroups v1. Die release_agent-Datei ermöglicht es Administratoren, einen "Release Agent" zu konfigurieren, der ausgeführt wird, wenn ein Prozess in der cgroup beendet ist. Der release_agent ist nur im Stammverzeichnis der cgroup sichtbar und wirkt sich auf alle untergeordneten cgroups aus. Immer wenn ein Prozess stirbt, prüft der Kernel, ob notifiy_on_release aktiviert ist, und wenn ja, wird die konfigurierte release_agent-Binärdatei gestartet. Der Container-Escape tritt auf, weil Linux nicht überprüft hat, ob der Prozess, der die release_agent Datei setzt, administrative Rechte hat (z.B. die CAP_SYS_ADMIN Fähigkeit). 

Diese Sicherheitslücke kann durch folgende Maßnahmen entschärft werden:

  • Aktivieren von AppArmor-, SELinux- oder Seccomp-Sicherheitsprofilen 
  • Deaktivierung von Namensräumen für unprivilegierte Benutzer, wenn dies nicht erforderlich ist
  • Ausführen des Containers als unprivilegierter Benutzer

Die Sicherheitsforscher von Palo Alto haben einen Test entwickelt, um festzustellen, ob Ihre Container-Umgebung für CVE-2022-0492 anfällig ist:

Diese Sicherheitslücke ist mit einigen Vorbehalten behaftet. Um diese Sicherheitslücke erfolgreich ausnutzen zu können, müssen Sie die folgenden Bedingungen für eine erfolgreiche Ausnutzung erfüllen: 

  • Ein Container muss als privilegierter Benutzer ausgeführt werden (root oder ein Benutzer mit dem no_new_privs-Flag )
  • AppArmor, SELinux oder Seccomp müssen deaktiviert werden
  • Der Host muss Namespaces für unprivilegierte Benutzer aktivieren
  • Ein Container muss sich in einer root v1 cgroup befinden 

Netfilter Lokale Privilegieneskalation über Heap-out-of-bounds write

Netfilter ist ein Framework des Linux-Kernels, das verschiedene netzwerkbezogene Operationen ermöglicht. Es ermöglicht die Paketfilterung, die Übersetzung von Netzwerkadressen (und Ports), die Paketprotokollierung und das Einreihen von Paketen in eine Warteschlange im Userspace. Sie können auch Internet-Firewalls bauen, die auf zustandsloser und zustandsabhängiger Paketfilterung basieren. 

CVE-2022-25636, ist eine Sicherheitslücke, in der ein lokaler Benutzer kann ein Heap-out-of-bounds schreiben in der Funktion nft_fwd_dup_netdev_offload (nf_dup_netdev.c) ausführen und Privilegien erlangen kann. Diese Sicherheitslücke betrifft derzeit die Kernel-Versionen 5.4-rc1 bis 5.6.10. 

Ursache - In der Funktion nft_fwd_dup_netdev_offload wird ctx->num_actions++ zum Offset in das Array flow->rule->action.entries(nf_dup_netdev.c:67) verwendet, wenn Dup- oder Fwd-Flow-Regeln auf einer Kette mit aktiviertem Hardware-Offload eingerichtet werden. Die Diskrepanz tritt zwischen der Anzahl der Aufrufe des Inkrementes und der Anzahl der zugewiesenen Einträge auf. Die Größe des zugewiesenen Arrays basiert auf der Anzahl der nftables-Ausdrücke, die expr.offload_flags&NFT_OFFLOAD_F_ACTION(nf_tables_offload.c:97) haben, aber nur der unmittelbare Ausdruckstyp hat dies (nicht dup oder fwd). Diese Diskrepanz erlaubt es jemandem, eine Regel mit dup/fwd-Ausdrücken ohne einen entsprechenden/vorangestellten immediate-Ausdruck zu erstellen, was zu einem unterdimensionierten entries-Array und einer beliebigen Anzahl von out of bounds-Array-Schreibvorgängen führt. Jemand könnte ein Skript schreiben und einen OOB-Schreibvorgang durchführen, der in eine Kernel-ROP / lokale Privilegieneskalation umgewandelt werden kann.

Es wird empfohlen, den Kernel auf die neueste Version zu patchen. 

Kommentare

Kommentar abgeben

Ihre E-Mail Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit *gekennzeichnet