Sicherheitsanfälligkeiten in AppArmor, die root-Zugriff im System ermöglichen

Das Unternehmen Qualys hat 9 Schwachstellen im AppArmor-Managementsystem zur Zugriffskontrolle identifiziert, von denen die gefährlichsten es lokal nicht privilegierten Benutzern ermöglichen, root-Rechte im System zu erlangen, aus isolierten Containern auszubrechen und die über AppArmor festgelegten Einschränkungen zu umgehen. Die Schwachstellen haben den Codenamen CrackArmor erhalten. CVE-IDs wurden noch nicht zugewiesen. Erfolgreiche Beispiele für Privilege Escalation wurden in Ubuntu 24.04 und Debian 13 demonstriert.

Die Probleme bestehen im LSM-Modul AppArmor seit Kernel 4.11 von Linux, das 2017 veröffentlicht wurde, und treten in Distributionen auf, die AppArmor nutzen, wie Ubuntu, Debian, openSUSE und SUSE (seit openSUSE/SUSE 16 ist standardmäßig SELinux aktiv, aber AppArmor bleibt optional). Patches zur Behebung der Schwachstellen wurden an die Entwickler des Linux-Kernels übergeben und werden den Benutzern in den kommenden Tagen im Rahmen der Updates 6.18.18, 6.19.8, 6.12.77, 6.6.130, 6.1.167, 5.15.203 und 5.10.253 angeboten. Die Korrektur ist ebenfalls in den heutigen Paketupdates für den Kernel in Ubuntu enthalten. Gleichzeitig wurden in Ubuntu Updates für die Pakete sudo, sudo-ldap und util-linux (einschließlich des Dienstprogramms su) veröffentlicht, in denen Mängel behoben wurden, die es ermöglichten, die Schwachstelle in AppArmor auszunutzen. In Debian befindet sich das Update in der Vorbereitung.

Die Probleme werden durch eine grundlegende Schwachstelle in AppArmor der Klasse „verwirrter Stellvertreter“ (confused-deputy) verursacht, die nicht privilegierten Benutzern das Hochladen, Ersetzen und Löschen beliebiger AppArmor-Profile ermöglicht. Diese Schwachstelle kann direkt genutzt werden, um den Schutz von Programmen und Diensten vor lokalen und Remote-Angriffen zu deaktivieren (durch das Schreiben in Pseudodateien /sys/kernel/security/apparmor/.load, .replace und .remove, um beispielsweise die Einschränkungen in cupsd und rsyslogd aufzuheben), einen Dienstverweigerungsangriff hervorzurufen (durch die Anwendung verbotener Profile) und die Einschränkungen von Namensräumen zu umgehen (durch das Laden eines neuen AppArmor-Profils „userns“, beispielsweise für /usr/bin/time, das die Erstellung unbegrenzter Benutzer-Namensräume ermöglicht).

Die Möglichkeit, AppArmor-Profile zu ändern, ermöglicht es außerdem, Root-Rechte zu erlangen, indem neue Profile, die den Zugriff auf bestimmte Systemaufrufe blockieren, an privilegierte Programme wie su und sudo gebunden werden. Insbesondere können Root-Rechte erlangt werden, indem der setuid-Vorgang (CAP_SETUID) für das Programm sudo blockiert und die Umgebungsvariable MAIL_CONFIG manipuliert wird, um das Verzeichnis mit den Einstellungen für die E-Mail zu ändern. Server Postfix.

Das Konzept der Methode besteht darin, dass das Programm sudo bei Problemen eine E-Mail an den Administrator sendet, indem es /usr/sbin/sendmail aufruft. Indem man die Privilegienrückgabe blockiert, kann dieser Prozess mit Root-Rechten gestartet werden, und wenn man vor dem Start von sudo die Umgebungsvariable MAIL_CONFIG festlegt, können andere Einstellungen an das Programm sendmail übergeben werden, einschließlich die Angabe eines eigenen postdrop-Handlers, der beim Versand von E-Mails ausgeführt wird. $ mkdir /tmp/postfix $ cat > /tmp/postfix/main.cf < /tmp/postfix/postdrop <> /tmp/postfix/pwned EOF $ chmod -R 0755 /tmp/postfix $ apparmor_parser -K -o sudo.pf < /sys/kernel/security/apparmor/.replace Passwort: $ env -i MAIL_CONFIG=/tmp/postfix /usr/bin/sudo whatever sudo: PERM_SUDOERS: setresuid(-1, 1, -1): Operation nicht erlaubt sudo: kann /etc/sudoers nicht öffnen: Operation nicht erlaubt sudo: setresuid() [0, 0, 0] -> [1001, -1, -1]: Operation nicht erlaubt sudo: Fehler beim Initialisieren des Audit-Plugins sudoers_audit $ cat /tmp/postfix/pwned uid=0(root) gid=1001(jane) groups=1001(jane),100(users)

Andere Methoden zur Erhöhung von Privilegien beziehen sich auf Schwachstellen im AppArmor-Code, der auf der Ebene des Linux-Kernels arbeitet. Es wird gezeigt, wie man Root-Rechte erlangen kann durch Schwachstellen, die durch die doppelte Ausführung der Funktion free() und den Zugriff auf bereits freigegebenen Speicher (use-after-free) im Code zum Laden und Ersetzen von AppArmor-Profilen ausgelöst werden. Zum Beispiel speichert AppArmor das Profil in der Struktur aa_loaddata, deren Speicher im slab-Cache kmalloc-192 reserviert wird; dabei ist es aufgrund eines Rennens nicht ausgeschlossen, auf den Speicher zuzugreifen, den die Struktur nach ihrer Freigabe belegte. Dieses Problem kann genutzt werden, um die Kontrolle über den freigegebenen Speicher zu erlangen und die freigegebene Seite des Speichers neu zuzuweisen, um den Inhalt der Datei /etc/passwd zu mappen und die Passwortzeile für root zu überschreiben.

Quelle: opennet.ru

60GB SSD 8Gb DDR4