Erkennen Sie die Eskalation von Berechtigungen in ABBYY FineReader

Der Zyklus, in dem ich Sicherheitsanfälligkeiten bezüglich der Eskalation von Berechtigungen in Windows-Anwendungen finde, wird fortgesetzt. In der vorherigen Serie: Steam ( CVE-2019-14743 , CVE-2019-15316 , CVE-2019-17180 ) und Origin ( CVE-2019-19247, CVE-2019-19248 ). Aber heute werden wir nicht über den Game Launcher sprechen, sondern über das ABBYY FinerReader-Anwendungssoftwarepaket.



Zusammenfassung - Ich werde Ihnen sagen, wie Sie dank der Komponente, die die Lizenz überprüft, in 10 Minuten Ihre Rechte von der Benutzerebene auf NT AUTHORITY \ SYSTEM erhöhen können. Der Sicherheitsanfälligkeit wurde die Kennung CVE-2019-20383 zugewiesen, ein Link zur ABBYY-Website .

Nachrichtendienst


Ich habe die Testversion von FineReader von der ABBYY-Website heruntergeladen und schnell überprüft, ob es sinnvoll ist, das Produkt auszuwählen, um die Berechtigungen zu erhöhen. Ja, das Produkt enthält einen Dienst, der nach dem Namen "ABBYY-Netzwerklizenzserver" Lizenzen zugeordnet ist und standardmäßig vom Benutzer NT AUTHORITY \ SYSTEM gestartet wird. Ich habe ProcMon gestartet, um das Verhalten des Dienstes zu beobachten.

Ich wurde auf die Datei aufmerksam gemacht, die sich im Pfad "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \ Licensing.cnt" befindet. Der Dienst liest etwas daraus, schreibt etwas darauf, im Allgemeinen sah die Datei wie ein interessanter Kandidat für Experimente aus. Betrachten Sie den Ordner "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses". Die vom übergeordneten Ordner geerbte All-Full Access-ACL ("C: \ ProgramData \ ABBYY \ FineReader \ 15") ist für diesen Ordner gültig. Dies bedeutet, dass Sie den gesamten Inhalt einschließlich der Datei "Licensing.cnt" löschen können.

Nachdem der Dienst das Fehlen der Datei entdeckt hatte, versuchte er sie auf etwas seltsame Weise zu erstellen. Er erstellte eine Datei der Form "tmpXXXX-YYYYYYYYY.tmp", schrieb einige Daten hinein und benannte sie dann in "Licensing.cnt" um.

Hier ist das ProcMon-Protokoll, in dem dieser Vorgang zweimal ausgeführt wird.



Zuerst um 20:36 Uhr und dann um 20:46 Uhr. Zwischen diesen Zeitstempeln wurde die Datei erneut gelöscht, um erneut erstellt zu werden.

Rechteck 1 zeigt die Situation an, in der der Dienst das Fehlen einer Datei festgestellt hat. Rechteck 2 - Erstellen Sie eine temporäre Datei. Rechteck 3 - Benennen Sie die temporäre Datei um. Rechteck 4 - Vorgang nach 10 Minuten wiederholen.

Betrachten Sie das Format des Namens "tmpXXXX_YYYYYYYYY.tmp". Als Teil eines laufenden Prozesses ist XXXX immer konstant. Außerdem ist dies die Kennung des Threads, der diese Arbeit ausführt. JJJJJJJJJ bleibt nicht konstant, aber wenn wir uns zwei benachbarte Starts ansehen (Werte: 430210515 und 430810515), dann scheint dies nur eine Zeitmarke zu sein - der Unterschied zwischen den Zahlen 600000 - fällt überraschenderweise mit 10 Minuten Unterschied zusammen. Einige weitere Tests bestätigen unsere Annahme.
Um diesen Teil zusammenzufassen. Jeder Benutzer kann die Datei "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \ Licensing.cnt" löschen und dann sehr häufig den Inhalt des Ordners "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses" in anfordern Suchen Sie dort irgendwann eine Datei mit dem Namen "tmpXXXX_YYYYYYYYY.tmp". Jetzt ist der Benutzer darauf vorbereitet, nach dem Löschen der Datei genau zu wissen, zu welchem ​​Zeitpunkt und mit welchem ​​Namen die Datei beim nächsten Mal erstellt wird.

Jetzt werden wir mit Symlinks spielen


So erstellen Sie Symlinks ohne Administratorrechte
, . . , , «C:\abc\1» «C:\def\2».

NTFS reparse point ( NTFS mount point) «C:\abc» «\RPC Control\". «\RPC Control\» – , , , . , , , , . NTFS reparse point , , . - , - .

. "\RPC Control\1" <-> «C:\def\2». , «C:\abc\1», «C:\def\2».

Der Vorgang zum Erstellen einer Lizenzdatei sieht zunächst folgendermaßen aus:



Wenn wir den genauen Zeitpunkt des nächsten solchen Vorgangs kennen, können wir die folgenden Symlinks erstellen (wir überspringen den Namen des Quellordners "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \"): Where YYYYYYYYA, YYYYYYYB, JJJJJJJJ, ... JJJJJJJJ - dies sind verschiedene Zeitstempel im JJJJJJJJ + 10 Minuten (falls der Zeitstempel etwas spät ist). Erstellen Sie als Nächstes einen Link: Beachten Sie, dass keine dieser Dateien wirklich vorhanden ist. Dies ist erforderlich, damit beim Verweisen auf beispielsweise tmpXXXX_YYYYYYYYB.tmp zwei Weiterleitungen auftreten und der Dienst daher mit der Datei "C: \ test \ l2 \ nope" arbeitet. Sobald wir die Erstellung der Datei "C: \ test \ l2 \ nope" entdecken, sollten wir sofort zwei neue Symlinks erstellen:

tmpXXXX_YYYYYYYYA.tmp <-> C:\test\l1\proxy
tmpXXXX_YYYYYYYYB.tmp <-> C:\test\l1\proxy
tmpXXXX_YYYYYYYYC.tmp <-> C:\test\l1\proxy

tmpXXXX_YYYYYYYYZ.tmp <-> C:\test\l1\proxy






C:\test\l1\proxy <-> C:\test\l2\nope




C:\test\l1\proxy <-> C:\test\l2\payload
Licensing.cnt <-> C:\target\path


Der Dienst schreibt den Inhalt der Datei weiterhin in "C: \ test \ l2 \ nope", benennt ihn jedoch nach dem Durchlaufen des neuen Symlinks um. Anstatt beispielsweise "tmpXXXX_YYYYYYYYC.tmp" in "Licensing.cnt" umzubenennen, wird "C: \ test \ l2 \ payload" tatsächlich in "C: \ target \ path" umbenannt (verschoben). Tatsächlich können wir im Auftrag des Benutzers NT AUTHORITY \ SYSTEM eine Datei mit beliebigem Inhalt in einem beliebigen Pfad ablegen .

Schematisch sieht es so aus:



Die Farbe gibt an, was aufgrund des Einflusses von Symlinks tatsächlich ausgeführt wird.

Das Erhöhen von Berechtigungen mithilfe des resultierenden Grundelements ist bereits einfach - Sie können Ihre DLL an Systemprozesse und ähnliche Dinge anhängen. Zu diesem Zeitpunkt kontaktierte ich ABBYY-Vertreter und gab ihnen Informationen über die Sicherheitsanfälligkeit.

Laut ABBYY ist die Sicherheitslücke derzeit geschlossen.

Zeitleiste


25.11.2019 - Schwachstellenerkennung
26.11.2019 - vom Hersteller einen Sicherheitskontakt angefordert
26.11.2019 - Senden eines Schwachstellenberichts an den Hersteller
12.09.2019 - Die Sicherheitslücke wurde vom Hersteller bestätigt
01.10.2020 - Die Sicherheitslücke wurde
am 22.01.2020 behoben - Schwachstellen wurden zugewiesen CVE-2019-20383
19.02.2019 .2020 - Veröffentlichung dieses Artikels

Es gibt derzeit viele Projekte und wir erweitern das Team „Prospective Monitoring“. Wir suchen Experten für das Studium von Quellcodes sowie Experten für die Analyse mobiler Anwendungen. Willst du meinem Team beitreten - schreibe mir, Anastasia (Ana2121) oder per Mail info@amonitoring.ru

Dieser Artikel in Englisch.

All Articles