Das Unternehmen Qualys hat eine dritte gefĂ€hrliche SicherheitsanfĂ€lligkeit in diesem Jahr (CVE-2022-3328) in dem Tool snap-confine entdeckt, das mit dem SUID-Root-Flag geliefert wird und vom Prozess snapd aufgerufen wird, um eine AusfĂŒhrungsumgebung fĂŒr in selbstĂ€ndigen Paketen im Snap-Format verteilte Anwendungen zu erstellen. Die SicherheitsanfĂ€lligkeit erlaubt es einem lokalen unprivilegierten Benutzer, Code mit Root-Rechten in der Standardkonfiguration von Ubuntu auszufĂŒhren. Das Problem wurde mit der Veröffentlichung von snapd 2.57.6 behoben. Pakete-Updates wurden fĂŒr alle unterstĂŒtzten Ubuntu-Versionen bereitgestellt.
Interessanterweise wurde die betreffende SicherheitsanfĂ€lligkeit im Zuge der Behebung einer Ă€hnlichen SicherheitsanfĂ€lligkeit im Februar in snap-confine festgestellt. Die Forscher konnten einen funktionierenden Exploit entwickeln, der Root-Zugriff auf Ubuntu Server 22.04 gewĂ€hrt; hierbei sind neben der SicherheitsanfĂ€lligkeit in snap-confine auch zwei SicherheitsanfĂ€lligkeiten im Prozess multipathd (CVE-2022-41974, CVE-2022-41973) beteiligt, die mit der Umgehung der BerechtigungsprĂŒfung bei der Ăbertragung von privilegierten Befehlen und unsicherem Umgang mit symbolischen Links verbunden sind.
Die Schwachstelle in snap-confine wird durch einen Race Condition in der Funktion must_mkdir_and_open_with_perms() verursacht, die zum Schutz vor der Umgehung des Verzeichnisses /tmp/snap.$SNAP_NAME auf einen symbolischen Link hinzugefĂŒgt wurde, und zwar nach der ĂberprĂŒfung des EigentĂŒmers, aber bevor der Systemaufruf mount aufgerufen wird, um Verzeichnisse fĂŒr das Snap-Paket einzubinden. Der hinzugefĂŒgte Schutz bestand darin, das Verzeichnis /tmp/snap.$SNAP_NAME in ein anderes Verzeichnis mit einem zufĂ€lligen Namen im /tmp umzubenennen, sofern es existiert und nicht dem Benutzer root gehört.
Bei der Ausnutzung der Umbenennung des Verzeichnisses /tmp/snap.$SNAP_NAME nutzten die Forscher aus, dass snap-confine auch ein Verzeichnis /tmp/snap.rootfs_XXXXXX fĂŒr den Root-Inhalt des Snap-Pakets erstellt. Der Teil âXXXXXXâ im Namen wird zufĂ€llig mit mkdtemp() ausgewĂ€hlt, aber ein Paket mit dem Namen ârootfs_XXXXXXâ kann die ĂberprĂŒfung in der Funktion sc_instance_name_validate bestehen (d.h. die Idee ist, dass der Name $SNAP_NAME den Wert ârootfs_XXXXXXâ annimmt und somit die Umbenennung zu einer Ăberschreibung des Verzeichnisses /tmp/snap.rootfs_XXXXXX mit dem Root des Snap fĂŒhrt).
Um die gleichzeitige Verwendung von /tmp/snap.rootfs_XXXXXX und die Umbenennung von /tmp/snap.$SNAP_NAME zu ermöglichen, wurden zwei Instanzen von snap-confine gestartet. Sobald die erste Instanz /tmp/snap.rootfs_XXXXXX erstellte, wurde der Prozess blockiert und die zweite Instanz mit dem Paketnamen rootfs_XXXXXX gestartet, was dazu fĂŒhrte, dass das temporĂ€re Verzeichnis /tmp/snap.$SNAP_NAME der zweiten Instanz zum Wurzelverzeichnis /tmp/snap.rootfs_XXXXXX der ersten wurde. Unmittelbar nach der Umbenennung wurde die zweite Instanz abgestĂŒrzt, und /tmp/snap.rootfs_XXXXXX wurde durch Manipulation des Race Conditions ausgetauscht, Ă€hnlich wie bei der Ausnutzung der SicherheitsanfĂ€lligkeit im Februar. Nach dem Austausch wurde die AusfĂŒhrungsblockierung der ersten Instanz aufgehoben und Angreifer erhielten die volle Kontrolle ĂŒber das Wurzelverzeichnis von snap.
In der letzten Phase wurde ein symbolischer Link /tmp/snap.rootfs_XXXXXX/tmp erstellt, der von der Funktion sc_bootstrap_mount_namespace() verwendet wurde, um das schreibbare reale Verzeichnis /tmp in jedes beliebige Verzeichnis des Dateisystems zu binden. Da der Aufruf von mount() symbolischen Links vor dem Mounten folgt, wird ein solches Mounten durch AppArmor-BeschrĂ€nkungen blockiert. Um diese Blockade zu umgehen, wurden im Exploit zwei unterstĂŒtzende Schwachstellen in multipathd genutzt.
Quelle: opennet.ru
