
Eine kleine Zusammenfassung mit Beispielen zum Verständnis von CVE-2023-43115
Eine kleine Zusammenfassung mit Beispielen, um CVE-2023-43115 zu verstehen.
[!WARNING] Ich habe dies hauptsächlich für mich selbst geschrieben, um das Problem zu verstehen und etwas über Cybersicherheit zu lernen. Daher könnte es Fehler enthalten.
Um das IJS-Gerät (Improved Inkjet Printing) zu nutzen, muss Ghostscript einen IJS-Server starten. Dies wird erreicht, indem der im IjsServer-Parameter angegebene Pfad verwendet wird. Der IjsServer-Parameter kann so konfiguriert werden, dass er auf jede gewünschte Datei im Dateisystem verweist, und Ghostscript führt diese festgelegte Datei anschließend aus. Hier ist leicht zu erkennen, wie dies potenziell missbraucht werden könnte, z.B. können Sie den folgenden Ghostscript-Befehl ausführen, um 'Hello World' auszugeben.
❯ gs -sDEVICE=ijs -sIjsServer="bash -c 'echo Hello World>&2'"
GPL Ghostscript 9.55.0 (2021-09-27)
Copyright (C) 2021 Artifex Software, Inc. All rights reserved.
This software is supplied under the GNU AGPLv3 and comes with NO WARRANTY:
see the file COPYING for details.
Hello World
An sich ist das nicht so problematisch, da dieser Parameter vom Benutzer bereitgestellt werden muss. Es ist jedoch auch möglich, dieses Gerät und den IJsServer-Parameter innerhalb eines Postscript-Skripts zu setzen. Siehe zum Beispiel attack_example_*.ps (ausführen mit gs DATEINAME). Dies könnte wiederum einem Angreifer ermöglichen, Code auf dem Rechner auszuführen, auf dem dieses Skript läuft. Aber dieses Problem ist bekannt und offiziell und könnte auf true .
Um diese CVE auszunutzen, während LockSafetyParams aktiviert ist, müsste ein Angreifer einen funktionierenden Exploit haben, um LockSafetyParams zu ändern. Wenn ein solcher Exploit jedoch verfügbar ist, könnte es je nach verwendeter Version eine Reihe anderer möglicher Angriffsvektoren geben.
Der Autor des Fixes Ken Sharp nannte die erwähnte Sicherheitslösung LockSafetyParams hacky, da sie in Postscript implementiert und daher anfällig für Postscript-Code ist. Dies führte in der Vergangenheit zu mehreren Sicherheitsproblemen, bei denen es möglich war, diesen Parameter zu überschreiben (siehe z.B. CVE-2018-19475 writeup). Der Fix ändert den Schutzmechanismus, der das Setzen des IjsServer-Pfades verhindert, von LockSaftyParams auf den neuen -dSAFER Parameter, der nicht von Postscript-Code beeinflusst werden kann.
[!NOTE] Die Dokumentation der anfälligen Version 9.55.0 gibt bereits an, den -dSAFER Parameter zu verwenden, was ein Dokumentationsfehler zu sein scheint.