Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2022-45451 — PoC für Acronis Arbitrary File Read - CVE-2022-45451 | Kitploit
Tools/GitHubGitHub/alfarom256/cve-2022-45451
Privilege EscalationSchwachstellenanalyseCode-AnalyseExploitationBinäranalyse
GitHubalfarom256/cve-2022-45451

CVE-2022-45451

PoC für Acronis Arbitrary File Read - CVE-2022-45451

Repository anzeigen
186vor 3 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Einführung

System-Spezifikationen:
  • Windows 10 1809 x64 EN
Ziel:
  • Acronis Home Cyber Protect
  • Acronis Cyber Protect

Beschreibung der Schwachstelle

Der Anti-Malware-Scanner-Treiber „ngscan" von Acronis leidet unter einer falschen/unsachgemäßen Zugriffskontrolle, die auf den Filter-Kommunikationsport angewendet wird. Der Minifilter-Treiber unterstützt die folgenden Funktionen, die ausgenutzt werden können:

  • Beliebige Dateien lesen
  • Änderung sensibler Registrierungsschlüssel (nicht ausgenutzt, Auslösebedingungen unbekannt), die möglicherweise zur lokalen Codeausführung führen kann

Beliebige Dateien lesen

Die Analyse des Treibers ngscan.sys begann mit der Dekompilierung des Treibers mit Ida Pro. Dem Forscher fiel auf, dass zwar ein Device-Objekt erstellt wurde, aber keine Symlinks erstellt wurden, um über DeviceIoControl mit dem Treiber zu interagieren. Daher wurde die Analyse fortgesetzt, indem die Fähigkeiten des Filter-Kommunikationsports beobachtet wurden. Während der Initialisierung erstellt der Treiber fünf (5) Kommunikationsports, um die Interaktion mit anderen Prozessen zu unterstützen.

Abb. 1: Routine, die die Erstellung von bis zu fünf (5) Filter-Kommunikationsports (FCP) unterstützt

Es wurde beobachtet, dass diese Funktion aufgerufen wird und jeden der 5 FCPs mit einem Standard-DACL initialisiert, wobei der letzte FCP mit einem NULL-DACL erstellt wird.

Abb. 2: FCP-Erstellung mit Standard-/NULL-DACL

Die Analyse wurde fortgesetzt, indem die vom Filtertreiber angegebenen CreateNotifyCallback- und MessageNotifyCallback-Funktionen beobachtet wurden. Diese Callback-Funktionen werden immer dann aufgerufen, wenn ein Prozess eine Verbindung öffnet und eine Nachricht an den Kommunikationsport sendet.

Die erste Untersuchung des MessageNotifyCallback zeigte, dass der Puffer der eingehenden Nachricht die folgenden Anforderungen erfüllen muss:

  • das erste DWORD muss mit einem erwarteten Header-Wert „TrMs" übereinstimmen (Zeile 37)
  • das zweite DWORD muss die Länge des Nachrichteninhalts enthalten (Hinweis: Dies unterscheidet sich von der InputBufferLength)
  • Die Länge des Nachrichteninhalts muss kleiner oder gleich der Größe des gesamten Eingabepuffers abzüglich der Größe des Nachrichtenkopfs sein
    • Der Nachrichtenkopf besteht aus dem Header und der Größe sowie einem weiteren unbekannten Wert, insgesamt 0xC (12) Bytes

Sobald die Prüfungen bestanden sind, wird eine Funktionsnummer aus dem InputBuffer geparst und in den folgenden switch-Fällen verwendet, um auszuwählen, welche Funktion mit der bereitgestellten Eingabe ausgeführt werden soll.

Abb. 3: Teilmenge der vom MessageNotifyCallback unterstützten Funktionen

Die Untersuchung jeder der unterstützten Funktionen zeigte zwei Funktionen, die für einen möglichen Missbrauch hin zu beliebigem Dateilesen von Interesse sind.

Abb. 4: Funktionen, die das Erstellen eines Scan-Kontexts und die Rückgabe des Dateihandles des Scan-Kontexts unterstützen (Zeilen 206, 233)

Obwohl die genaue Funktionalität eines „Scan-Kontexts" nicht vollständig bekannt ist, zeigte die Analyse, dass für jede im Benutzer-InputBuffer angegebene Datei ein Datei-Scan-Kontext erstellt werden kann. Sobald ein Scan-Kontext erstellt wurde, wird die Scan-Kontext-ID über den Ausgabepuffer an den Benutzer zurückgegeben.

Abb. 5: Routine zum Erstellen eines Scan-Kontexts, die die Scan-Kontextdaten an den Benutzer zurückgibt

Abb. 6: Daten, die an den Minifilter-Treiber gesendet werden und Zugriff auf die geschützte SAM-Registrierungsdatei anfordern (\??\C:\Windows\System32\config\SAM)

Abb. 7: Antwort vom Minifilter-Treiber einschließlich Scan-Kontext-ID (0x3aaf)

Sobald ein Scan-Kontext erstellt und die ID abgerufen wurde, kann ein Handle auf die Datei, für die der Scan-Kontext erstellt wurde, in der anfordernden Anwendung geöffnet werden, indem erneut eine Nachricht an den Kommunikationsport gesendet wird.

Abb. 8: Abruf des Dateihandles des erstellten Scan-Kontexts

Die Funktion mit der Bezeichnung CreateFileReturnHandle0 wurde nur aufgerufen, wenn die vorherige Funktion SearchScanContextsByID einen gültigen Scan-Kontext zurückgab. Z. B. nur, wenn der anfordernde Prozess eine gültige Kontext-ID bereitstellte, die zuvor durch Aufruf der oben genannten Scan-Erstellungsfunktion erzeugt wurde. Das anfordernde Programm öffnete erfolgreich ein Handle auf die privilegierte Datei, indem es die Scan-Kontext-ID an die in Abbildung 8 (Abbildung 4, Zeile 233) angegebene Funktion übergab.

Abb. 9: Erfolgreicher Abruf des Dateihandles für die SAM-Datei

Mit processhacker wurde der Zugriff auf das Dateihandle bestätigt, indem die Handles des anfordernden Prozesses angezeigt wurden:

Abb. 10: Prozess, der ein Handle auf die SAM-Datei enthält

Abb. 11: Lesezugriff auf das erhaltene Handle gewährt

Potenzielle Code-Injektion

Die weitere Untersuchung der unterstützten Funktionen zeigte die Kontrolle über drei Registrierungsschlüssel, die möglicherweise genutzt werden können, um Codeausführung zu erlangen.

Abb. 12: Funktionen, die das Öffnen von Handles auf Registrierungsschlüssel unterstützen

Abb. 13: Öffnen der Registrierungsschlüssel, die die Hook-Monitor-DLL angeben, die in einen Prozess injiziert werden soll

Abb. 14: OpenKey-Funktion, die die Möglichkeit demonstriert, einen Registrierungsschlüssel mit benutzerkontrollierten Daten zu ändern

Die Umstände für die DLL-Injektion zum Hooking durch die Acronis-Suite wurden nicht ermittelt. Es wird jedoch angenommen, dass bei aktiviertem Hook-Monitoring die durch die Registrierungsschlüssel x64HookLib und x86HookLib angegebene DLL in einen bestimmten Prozess injiziert würde.

Abb. 15: x64HookLibKey mit der Hooking-DLL C:\ProgramData\Acronis\NGMP\shared\acr_protect.x64.dll

Race Condition, die begrenztes beliebiges Dateilesen ermöglicht

Der Vorgang des Öffnens eines Scan-Kontexts wurde in der Analyse für das beliebige Dateilesen ausgelassen. Ein Prozess kann anstatt einen Scan-Kontext zu erstellen, Scan-Kontext-IDs per Brute-Force ermitteln, indem er wiederholt Anfragen an die Funktion GetScanContextByID sendet und dabei ContextID-Werte durchläuft, bis ein oder mehrere gültige Scan-Kontexte gefunden werden.

Tool herunterladen