พื้นที่เก็บข้อมูลนี้มีหลักฐานการใช้ประโยชน์จากแนวคิดเรื่องช่องโหว่ใน TeamViewer ซึ่งช่วยให้ผู้ใช้ที่ไม่มีสิทธิ์สามารถโหลดไดรเวอร์เคอร์เนลตามอำเภอใจลงในระบบได้ ฉันขอขอบคุณ Zero Day Initiative สำหรับการประสานงานกับพวกเขาในการรายงานและเปิดเผยช่องโหว่อย่างมีความรับผิดชอบ
รายละเอียดเกี่ยวกับการวิจัยที่จบลงด้วยช่องโหว่เหล่านี้สามารถพบได้ในบล็อกสามส่วนต่อไปนี้ในบล็อกของฉัน พวกเขาครอบคลุมช่องโหว่เหล่านี้โดยละเอียดมากขึ้นและยังแสดงจุดที่ฉันล้มเหลวในระหว่างกระบวนการอีกด้วย ภาคสามสนุกดี :P
วิดีโอของการใช้ประโยชน์สามารถพบได้ที่นี่:
หลังจากที่สามารถ ปลอมแปลง (เพียงการรับรองความถูกต้องง่ายๆ ตามรายละเอียดในบล็อก) ไคลเอนต์ TeamViewer ที่ถูกต้องเมื่อเชื่อมต่อกับบริการ IPC ของระบบ ก็เป็นไปได้ที่จะทริกเกอร์การติดตั้งไดรเวอร์โดยอำเภอใจ TeamViewer ไม่ได้ตรวจสอบลายเซ็นของไดรเวอร์ที่กำลังติดตั้ง
ดังนั้นการปรับขนาดสิทธิ์ USER เป็น KERNEL จึงเป็นไปได้ด้วย TeamViewer
หนึ่งในแนวทางที่ดีที่สุดคือการใช้เทคนิค BYOD ที่รู้จักกันดี นำไดรเวอร์ที่มีช่องโหว่มาเอง เพื่อโหลดไดรเวอร์ที่ลงนามที่ถูกต้องลงใน Windows Kernel จากนั้นจึงใช้ประโยชน์จากมันเพื่อดำเนินการพิเศษจากระดับผู้ใช้ เช่น การเปลี่ยนโทเค็นของสิทธิ์โดยพลการ ประมวลผลด้วยสิทธิพิเศษ
เมื่อติดตั้ง TeamViewer บนระบบจะสร้างบริการที่ทำงานเป็นระบบ TeamViewer_service.exe
บริการนี้เป็นตัวช่วยสำหรับลูกค้าในการทำงานบางอย่าง ดังนั้นไคลเอ็นต์จะไม่ทำงานด้วยสิทธิ์ระดับสูง และงานบางอย่างจะถูกมอบหมายให้กับบริการ
การสื่อสารกับบริการ (IPC) ดำเนินการผ่านซ็อกเก็ต (โดยใช้ I/O ที่ทับซ้อนกัน และ IoCompletionPort ) ตามค่าเริ่มต้น บริการ TeamViewer SYSTEM จะรับฟัง 5939/tcp ที่ localhost
TeamViewer ไม่ได้กรองพารามิเตอร์ที่ไคลเอ็นต์ส่งมาเพื่อขอการติดตั้งไดรเวอร์หรือการตรวจสอบลายเซ็น ฯลฯ
แนวคิดก็คือ: เราจะหลอกไคลเอนต์ทีวีและขอให้ติดตั้ง ไดรเวอร์ VPN แต่ระบุ INF อื่น ฉันนำ INF ดั้งเดิมของ TeamViewer มาใช้ใหม่อีกครั้ง แต่ในพา ธ อื่น (ไม่มีสิทธิ์) เปลี่ยนชื่อไดรเวอร์ "ไม่ดี" เป็น teamviewervpn.sys เนื่องจากนี่คือชื่อไดรเวอร์ที่ถูกกำหนดเป้าหมายโดย INF ดั้งเดิม
ซึ่งจะข้ามตัวเลือก TeamViewer ด้วย การเปลี่ยนแปลงต้องใช้สิทธิ์ผู้ดูแลระบบบนคอมพิวเตอร์เครื่องนี้
การตรวจสอบนี้จะมีผลผ่าน GUI เท่านั้น เนื่องจาก ตัวเลือก TeamViewer จะถูกปิดใช้งานเมื่อคลิกปุ่มกับผู้ใช้ที่ไม่มีสิทธิ์ แต่คุณสามารถเชื่อมต่อกับซ็อกเก็ตและโหลดไดรเวอร์ได้ตามใจชอบ
การใช้ประโยชน์ขึ้นอยู่กับเวอร์ชันเนื่องจากข้อความ IPC ที่ไคลเอ็นต์ระบุ PID และข้อมูลอื่นในเวอร์ชัน เวอร์ชันของไคลเอ็นต์ต้องตรงกับเวอร์ชันของบริการระบบ การใช้ประโยชน์ต้องได้รับการแก้ไข (บรรทัด 140 ถึง 143) ใน Main.cpp เป็นเวอร์ชัน TeamViewer_service.exe ที่ถูกกำหนดเป้าหมาย
โดยพื้นฐานแล้ว เราปลอมแปลงไคลเอ็นต์ TeamViewer ที่เชื่อมต่อบริการ SYSTEM และขอติดตั้งไดรเวอร์ตามอำเภอใจ บริการ TeamViewer กรุณาโหลดลงในเคอร์เนล
TeamViewer มีข้อความ IPC อื่นที่คล้ายกับข้อความแรกที่ฉันค้นพบก่อน (โยนทิ้งเมื่อคลิก ติดตั้ง VPN Driver ) ข้อความอื่นนี้คือการติดตั้ง ไดรเวอร์เครื่องพิมพ์
ดังนั้น โดยพื้นฐานแล้ว CVE-2024-7479 และ CVE-2024-7481 จะเหมือนกัน แต่ TeamViewer ได้กระทำข้อผิดพลาดเดียวกันสองครั้ง ข้อความแม้จะแตกต่างแต่ก็คล้ายกันมาก พวกเขามี IPC Method Id ที่แตกต่างกัน
ผลลัพธ์จะเหมือนกัน สามารถโหลดไดรเวอร์ที่กำหนดเองได้