Repositori ini berisi bukti eksploitasi konsep kerentanan di TeamViewer yang memungkinkan pengguna yang tidak memiliki hak istimewa untuk memuat Driver Kernel sewenang-wenang ke dalam sistem. Saya ingin mengucapkan terima kasih kepada Zero Day Initiative atas koordinasinya dengan mereka untuk melaporkan dan mengungkap kerentanan secara bertanggung jawab.
Detail tentang penelitian yang diakhiri dengan kerentanan ini dapat ditemukan dalam seri blog tiga bagian berikut di blog saya. Mereka membahas kerentanan ini secara lebih rinci dan juga menunjukkan di mana saya gagal selama proses tersebut. Bagian ketiga adalah yang menyenangkan :P.
Video eksploitasi dapat ditemukan di sini:
Setelah dapat melakukan spoof (hanya beberapa otentikasi sederhana seperti yang dijelaskan di blog) klien TeamViewer yang valid saat menyambung ke layanan SISTEM IPC, dimungkinkan untuk memicu instalasi driver yang sewenang-wenang. TeamViewer tidak memverifikasi tanda tangan driver yang sedang diinstal.
Dengan demikian, skalasi hak istimewa USER ke KERNEL dimungkinkan berkat TeamViewer.
Salah satu pendekatan terbaik adalah dengan menggunakan teknik BYOD yang terkenal, Bawa Driver Rentan Anda Sendiri untuk memuat driver yang ditandatangani secara valid ke dalam Kernel Windows dan kemudian mengeksploitasinya untuk melakukan tindakan istimewa dari tingkat pengguna, seperti mengubah token secara sewenang-wenang proses dengan yang memiliki hak istimewa.
Ketika TeamViewer diinstal pada sistem, ia menciptakan layanan yang berjalan sebagai SYSTEM, TeamViewer_service.exe
Layanan ini merupakan penolong bagi klien untuk beberapa tugas. Dengan demikian, klien tidak berjalan dengan hak istimewa yang lebih tinggi dan beberapa tugas didelegasikan ke layanan.
Komunikasi dengan layanan (IPC) diimplementasikan melalui soket (menggunakan I/O yang tumpang tindih dan IoCompletionPort ). Secara default, layanan SISTEM TeamViewer mendengarkan pada 5939/tcp di localhost.
TeamViewer tidak memfilter parameter yang dikirim oleh klien untuk meminta instalasi driver atau pemeriksaan tanda tangan, dll.
Jadi idenya adalah: kami akan memalsukan klien TV dan meminta instalasi Driver VPN tetapi menunjukkan INF lain. Saya menggunakan kembali INF asli TeamViewer yang sama tetapi di jalur lain (yang tidak memiliki hak istimewa) dengan mengganti nama driver "buruk" menjadi teamviewervpn.sys , karena ini adalah nama driver yang ditargetkan oleh INF asli.
Ini juga melewati opsi TeamViewer. Perubahan memerlukan hak administratif pada komputer ini .
Pemeriksaan ini hanya efektif melalui GUI, karena opsi TeamViewer dinonaktifkan ketika mengklik tombol dengan pengguna yang tidak memiliki hak istimewa. Tetapi dimungkinkan untuk terhubung ke soket dan melakukan pemuatan driver secara sewenang-wenang.
Eksploitasi ini bergantung pada versi karena pesan IPC di mana klien menentukan PID-nya dan data lain di antara versi tersebut. Versi klien harus sesuai dengan versi layanan SISTEM. Eksploitasi harus diubah (baris 140 hingga 143) di Main.cpp ke versi TeamViewer_service.exe yang ditargetkan.
Jadi, pada dasarnya, kami memalsukan klien TeamViewer yang menghubungkan layanan SYSTEM dan meminta instalasi driver sewenang-wenang. Layanan TeamViewer silakan memuatnya ke Kernel.
TeamViewer memiliki pesan IPC lain yang sangat mirip dengan pesan pertama yang saya temukan pertama kali (dilemparkan saat mengklik Instal Driver VPN ). Pesan lainnya ini adalah untuk menginstal Driver Printer .
Jadi, pada dasarnya, CVE-2024-7479 dan CVE-2024-7481 adalah sama tetapi TeamViewer melakukan kesalahan yang sama dua kali. Pesannya, meski berbeda, sangat mirip. Mereka memiliki ID Metode IPC yang berbeda.
Hasilnya sama, driver sembarang bisa dimuat.