Sicherheitsanfälligkeit im Paketmanager Guix, die die remote Ausführung von Code im System ermöglicht

Im Paketmanager Guix wurden Sicherheitsanfälligkeiten (keine CVEs zugewiesen) in der Implementierung des internen Befehls „guix substitute“ festgestellt, der automatisch vom Hintergrundprozess guix-daemon bei der Ausführung von Paketinstallationsvorgängen aufgerufen wird. Der Befehl wird verwendet, um bereits kompilierte Binärpakete von externen Servern herunterzuladen und deren Integrität mittels digitaler Signatur zu überprüfen. Die gefährlichste Sicherheitsanfälligkeit ermöglicht es, remote Code im System des Benutzers mit den Rechten auszuführen, unter denen der Hintergrundprozess guix-daemon läuft.

Das Problem betrifft alle Konfigurationen mit dem Prozess guix-daemon, unabhängig davon, ob er mit Root-Rechten oder mit einem unprivilegierten Benutzer ausgeführt wird. Für die Ausnutzung der Sicherheitsanfälligkeit genügt ein beliebiger Versuch, vorgefertigte Binärpakete von Server, die unter der Kontrolle des Angreifers stehen. Dabei muss die schädliche Server nicht unbedingt ausdrücklich vom Benutzer ausgewählt oder in den Einstellungen angegeben werden – sie kann über die Option „—discover“ bestimmt werden, was es ermöglicht, den Server im Rahmen eines MITM-Angriffs auszutauschen. In Konfigurationen, in denen guix-daemon mit erhöhter Berechtigung läuft, kann ein lokaler Benutzer einen Angriff durchführen, wenn er die Möglichkeit hat, sich über einen Unix-Socket mit dem Hintergrundprozess zu verbinden (standardmäßig für alle Benutzer zugänglich).

Die Sicherheitsanfälligkeit tritt im Handler „restore-file“ auf, der verwendet wird, um beim Laden des Pakets zu entpacken, ohne auf den vollständigen Download und die Verifizierung des heruntergeladenen Archivs mittels digitaler Signatur zu warten. Das Problem wird durch das Fehlen einer Überprüfung auf die Zeichen „.“ , „/“ und „..“ in den im Archiv enthaltenen Dateipfaden verursacht. Durch das Einfügen falscher Dateinamen ins Archiv kann der Angreifer erreichen, dass eine beliebige Datei in jeden Bereich des Dateisystems geschrieben wird, soweit es die Rechte erlauben, unter denen der Hintergrundprozess guix-daemon ausgeführt wird.

Um die Ausführung seines Codes im System zu organisieren, kann man beispielsweise ein automatisch gestartetes Skript wie „~/.bashrc“ oder „~/.profile“ hinzufügen oder die Datei „~/.ssh/authorized_keys“ mit den SSH-Schlüsseln ändern. Wenn in einem Mehrbenutzersystem guix-daemon unter dem Benutzer root ausgeführt wird, kann der Angreifer die Datei mit Passwörtern oder Systemskripten überschreiben.

Die Möglichkeit, gefälschte Server zur Verbreitung von Malware-Paketen zu erstellen, resultiert daraus, dass das Verfahren zur Abfrage von Metadaten (narinfo) zu verfügbaren Binärpaketen (fetch-narinfos) die Serverzertifikatsüberprüfung nicht durchführte und sich darauf verließ, dass der größte Teil der Metadaten durch eine digitale Signatur gesichert wurde. Es stellte sich heraus, dass die Signatur die URL zum Herunterladen des Pakets nicht abdeckte, was eine Manipulation ohne Beeinträchtigung der Integrität der Metadaten ermöglichte. Letztendlich wäre das gefälschte Paket aufgrund des Scheiterns der Überprüfung seines Inhalts durch den digitalen Signatur-Hash verworfen worden, jedoch fand diese Überprüfung erst nach dem Entpacken statt, bei dem das Problem mit den Sonderzeichen in den Dateinamen auftrat.

Neben dem Befehl „guix substitute“ wird der anfällige Handler „restore-file“ auch in den Befehlen „guix offload“, „guix archive —extract“ und „guix challenge“ verwendet, über die ebenfalls die Schwachstelle ausgenutzt werden kann. Als Umgehungslösung zur Blockierung der Schwachstelle wird empfohlen, die Option „—no-substitutes“ in allen guix-Befehlen ausdrücklich anzugeben. Die Schwachstelle wurde in den Code der Guix-Basis übernommen. Benutzern wird geraten, die von den Entwicklern bereitgestellten Patches für guix und guix-daemon umgehend zu installieren.

Neben dem genannten Problem wurden in Guix noch drei weitere Schwachstellen beseitigt:

  • Die Möglichkeit, Binärpakete zu manipulieren, aufgrund fehlender Übereinstimmungsüberprüfung des angeforderten Pakets mit den zurückgegebenen Metadaten im fetch-narinfos-Handler. Diese Schwachstelle kann zum Ausliefern einer veralteten Version des angeforderten Pakets genutzt werden, die Sicherheitsanfälligkeiten aufweist.
  • Die Bestimmung des Inhalts der ersten Zeile beliebiger Dateien im System durch die Übermittlung einer Anfrage von einem lokalen Benutzer mit der URI „file://“ („—substitute-urls file:////etc/shadow“). Wenn der guix-daemon mit Root-Rechten ausgeführt wird, wird die angeforderte Datei gelesen, festgestellt, dass sie keine Metadaten ist, und gibt einen Fehler aus, in dem die Zeile erwähnt wird, die nicht analysiert werden konnte.
  • Die Angabe eines spezifisch formatierten Namens eines externen Repositories («..\/..\/..\/..\/newfile») bei der Ausführung der Befehle «guix pull» und «guix time-machine» ermöglicht es, Daten mit Informationen zu Commits in eine beliebige bestehende Datei im Dateisystem zu schreiben, sofern ihr Inhalt einer Liste von Zeilen in der Sprache Scheme ähnelt. Diese Schwachstelle kann für DoS-Angriffe verwendet werden, aber es ist nicht auszuschließen, dass durch ausgeklügelte Manipulationen mit dem Pseudo-Dateisystem /proc gefährlichere Eingriffe in das System erzielt werden können.

Quelle: opennet.ru

60GB SSD 8Gb DDR4