Kenali peningkatan privilege di ABBYY FineReader

Siklus bagaimana saya menemukan kerentanan eskalasi hak istimewa dalam aplikasi Windows terus berlanjut. Dalam seri sebelumnya: Steam ( CVE-2019-14743 , CVE-2019-15316 , CVE-2019-17180 ) dan Origin ( CVE-2019-19247, CVE-2019-19248 ). Tetapi hari ini kita tidak akan berbicara tentang peluncur game, tetapi tentang paket perangkat lunak aplikasi ABBYY FinerReader.



Ringkasan - Saya akan memberi tahu Anda bagaimana, berkat komponen yang memeriksa lisensi, dalam 10 menit Anda dapat meningkatkan hak Anda dari level pengguna ke NT AUTHORITY \ SYSTEM. Kerentanan diberikan pengenal CVE-2019-20383, tautan ke situs web ABBYY .

Badan intelijen


Saya mengunduh versi percobaan FineReader dari situs web ABBYY dan segera memeriksanya untuk melihat apakah masuk akal untuk memilih produk untuk meningkatkan hak istimewa. Ya, produk termasuk layanan yang, dilihat dari nama "ABBYY network license server", dikaitkan dengan lisensi dan diluncurkan secara default dari pengguna NT AUTHORITY \ SYSTEM. Saya mulai, ProcMon mulai memperhatikan perilaku layanan.

Perhatian saya tertuju pada file yang terletak di sepanjang jalur "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licenses \ Licensing.cnt". Layanan membaca sesuatu darinya, menulis sesuatu untuknya, secara umum, file tersebut tampak seperti kandidat yang menarik untuk eksperimen. Pertimbangkan folder "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Lisensi". ACL All-Full Access yang diwarisi dari folder induk ("C: \ ProgramData \ ABBYY \ FineReader \ 15") berlaku untuk folder ini, yang berarti bahwa Anda dapat menghapus semua kontennya, termasuk file "Licensing.cnt".

Layanan, setelah menemukan tidak adanya file, mencoba membuatnya, dan dengan cara yang agak aneh. Dia membuat file dari bentuk "tmpXXXX-YYYYYYYYY.tmp", menulis beberapa data ke dalamnya, dan kemudian menamainya "Licensing.cnt".

Berikut adalah log ProcMon di mana operasi ini dilakukan dua kali.



Pertama, itu terjadi pada 20:36, dan kemudian pada 20:46. Di antara cap waktu ini, file itu dihapus lagi untuk dibuat lagi.

Kotak 1 menunjukkan situasi ketika layanan mendeteksi tidak adanya file. Rectangle 2 - buat file sementara. Rectangle 3 - ganti nama file sementara. Rectangle 4 - ulangi operasi setelah 10 menit.

Pertimbangkan format nama "tmpXXXX_YYYYYYYYY.tmp". Sebagai bagian dari satu proses yang berjalan, XXXX akan selalu konstan, terlebih lagi, pada kenyataannya, ini adalah pengidentifikasi dari utas yang melakukan pekerjaan ini. YYYYYYYYY tidak tetap konstan, tetapi jika kita melihat dua awal yang bertetangga (nilai: 430210515 dan 430810515), maka nampaknya ini hanya tanda waktu - perbedaan antara angka 600000 - secara mengejutkan bertepatan dengan perbedaan 10 menit. Beberapa tes lagi mengkonfirmasi asumsi kami.
Untuk meringkas bagian ini. Setiap pengguna dapat menghapus file "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Licensing \ Licensing.cnt", maka ia dapat sangat sering meminta isi folder "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Lisensi" di di beberapa titik, temukan di sana file yang disebut "tmpXXXX_YYYYYYYYY.tmp". Sekarang pengguna akan siap, setelah menghapus file, dia akan tahu persis pada saat apa dan dengan nama apa file tersebut akan dibuat lain kali.

Sekarang kita akan bermain dengan symlink


Cara membuat symlink tanpa hak administrator
, . . , , «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».

Pada awalnya, proses membuat file lisensi terlihat seperti ini:



Ketika kita mengetahui saat yang tepat dari operasi seperti berikutnya, kita dapat membuat symlink berikut (kita akan melewatkan nama folder sumber "C: \ ProgramData \ ABBYY \ FineReader \ 15 \ Lisensi \"): Di mana YYYYYYYYA, YYYYYYYB, YYYYYYYYYC, ... YYYYYYYYYYZ - ini adalah cap waktu yang berbeda dalam YYYYYYYYYYY + 10 menit (jika stempel waktu sedikit terlambat). Selanjutnya, buat tautan: Perhatikan bahwa tidak satu pun dari file-file ini benar-benar ada. Ini diperlukan agar ketika merujuk, misalnya, ke tmpXXXX_YYYYYYYYB.tmp, terjadi dua pengalihan dan, sebagai hasilnya, layanan bekerja dengan file "C: \ test \ l2 \ nope". Segera setelah kami menemukan pembuatan file "C: \ test \ l2 \ nope", kita harus segera membuat dua symlink baru:

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


Layanan akan terus menulis konten file ke "C: \ test \ l2 \ nope", tetapi akan mengganti nama setelah melewati symlink baru. Jadi, alih-alih mengganti nama, misalnya, “tmpXXXX_YYYYYYYYY.Cmp” menjadi “Licensing.cnt”, “C: \ test \ l2 \ payload” sebenarnya akan diubah namanya (dipindahkan) menjadi “C: \ target \ path”. Bahkan, kita dapat menempatkan file dengan konten apa pun di jalur apa pun atas nama pengguna NT AUTHORITY \ SYSTEM .

Secara skematis, akan terlihat seperti ini:



Warna menunjukkan apa yang sebenarnya akan dilakukan karena pengaruh symlink.

Meningkatkan hak menggunakan primitif yang dihasilkan sudah mudah - Anda dapat melampirkan dll Anda ke proses sistem dan hal-hal serupa lainnya. Pada tahap ini, saya menghubungi perwakilan ABBYY dan memberikan informasi tentang kerentanan kepada mereka.

Saat ini, menurut ABBYY, kerentanan ditutup.

Linimasa


11/25/2019 - deteksi kerentanan
11/26/2019 - meminta kontak keamanan dari produsen
11/26/2019 - mengirim laporan kerentanan ke produsen
12/09/2019 - kerentanan dikonfirmasi oleh produsen
10/01/2020 - kerentanan diperbaiki
pada 01/22/2020 - kerentanan ditetapkan pada CVE-2019-20383
02/19/2019 .2020 - publikasi artikel ini

Ada banyak proyek sekarang dan kami memperluas tim "Prospective Monitoring". Kami mencari para ahli dalam studi kode sumber, serta para ahli dalam analisis aplikasi mobile. Ingin bergabung dengan tim saya - menulis kepada saya, Anastasia (Ana2121) atau melalui surat info@amonitoring.ru

Artikel ini dalam bahasa Inggris.

All Articles