ช่องโหว่ Print Spooler (CVE-2021-1675) และ ช่องโหว่ PrintNightmare (CVE-2021-34527)

ช่องโหว่ Print Spooler (CVE-2021-1675)

ในเดือนมิถุนายนที่ผ่านมาพบช่องโหว่บน Print Spooler (CVE-2021-1675) โดยทาง Microsoft กล่าวว่าเป็นช่องโหว่ที่ไม่รุนแรงมาก ซึ่งกระทบกับ Windows ตั้งแต่ Windows 7 SP1 ไปจนถึง Server 2019, ARM64 versions of Windows และ Windows RT 8.1 ต่อมาเมื่อวันที่ 21 มิถุนายนที่ผ่านมา ทาง Microsoft ได้ออกมาอัปเดตว่าช่องโหว่นี้อาจใช้ทำ Remote Code Execution ได้และระดับความรุนแรงจะมากขึ้น โดยนักวิจัยจากบริษัทรักษาความปลอดภัยทางไซเบอร์ Sangfor ซึ่งกำลังเตรียมนำเสนอบทความเกี่ยวกับจุดบกพร่องของ Print Spooler ในการประชุม Black Hat ที่กำลังจะมีขึ้นในเดือนสิงหาคม 2564 แต่ได้มีการเปิดเผยโค้ดเพื่อสาธิตก่อนกำหนดเพราะเข้าใจว่ามีแพตซ์แก้ไขช่องโหว่นี้ไปแล้ว แต่ช่องโหว่ที่ทาง Sangfor เปิดเผยโค้ด ไม่ใช่ช่องโหว่ด้านความปลอดภัยแบบเดียวกับที่ได้รับการแก้ไขใน Patch Tuesday โดยทีมนักวิจัยดังกล่าวได้รีบลบข้อมูลโค้ดนั้นทันที แต่โค้ดช่องโหว่ดังกล่าวได้ถูกดาวน์โหลดและเผยแพร่ซ้ำที่อื่นไปแล้ว โดยช่องโหว่ใหม่นี้มีชื่อเรียกว่า PrintNightmare เป็นช่องโหว่การเรียกใช้โค้ดจากระยะไกลของ Windows Print Spooler เช่นเดียวกับ CVE-2021-1675 แต่ยังไม่มีแพตซ์แก้ไขช่องโหว่นี้

ช่องโหว่ใหม่มีชื่อว่า PrintNightmare (CVE-2021-34527)

เป็นช่องโหว่ในการเรียกใช้ Remote code excution เมื่อผู้โจมตีประสบความสำเร็จในการใช้ประโยชน์จากช่องโหว่ Windows Print Spooler สามารถเรียกใช้รหัสด้วย SYSTEM privileges สามารถติดตั้งโปรแกรม ดู เปลี่ยนแปลง ลบข้อมูล หรือสร้างบัญชีใหม่พร้อมสิทธิ์ผู้ใช้เต็มรูปแบบ

ทั้ง 2 ช่องโหว่จะมีความคล้ายคลึงกัน

  1. CVE-2021-1675 เป็นช่องโหว่ที่สามารถโจมตีแบบ Remote Code Execution บน Print Spooler ได้ มี Patch แก้ไขแล้ว สามารถดาวน์โหลดได้ที่ Microsoft
  2. CVE-2021-34527 มีลักษณะการโจมตีที่คล้ายคลึงกันแต่แตกต่างกันที่ RpcAddPrinterDriverEx() เกี่ยวกับการตั้งค่าไดรเวอร์ของ Printer ยังไม่มี Patch แก้ไข สามารถติดตามข้อมูลได้ที่ msrc.microsoft

ผลกระทบ

Windows ตั้งแต่ Windows 7 SP1 ไปจนถึง Server 2019, ARM64 versions of Windows และ Windows RT 8.1

คำแนะนำ

ปัจจุบัน ยังไม่มีแพทซ์อย่างเป็นทางการจากทาง Microsoft ควรติดตามข่าวสาร การ Update patch ดังกล่าว และรีบอัปเดตให้เร็วที่สุดหลังจากมีการ Update patch จนกว่าจะมีแพทซ์อย่างเป็นทางการจาก Microsoft การปิดใช้งาน Print Spooler บนคอมพิวเตอร์ที่มีช่องโหว่เป็นวิธีแก้ปัญหาได้มากที่สุด แต่อาจจะมีผลกระทบกับการใช้งาน Printer ได้ หากจำเป็นต้องใช้งาน Print Spooler ขอแนะนําให้ทำการจํากัด การเข้าถึงเครือข่ายไปยังเซิร์ฟเวอร์เหล่านั้นอย่างเคร่งครัดที่สุด แม้ว่าจะมีผู้ใช้บางรายอาจประสบกับความไม่สะดวกชั่วคราว หากมีเซิร์ฟเวอร์ใช้งาน Print Spooler แต่เป็นเครื่องที่ไม่จําเป็นจริง ๆ แม้ว่าหลังจากที่แพตช์ออกมาสําหรับข้อผิดพลาดนี้ ก็ควรปิดการใช้งาน Print Spooler เช่นกันเพื่อป้องกันการโจมตีอื่น สามารถดูรายละเอียดเพิ่มเติมได้ที่ github

วิธีตรวจสอบ และ Disable Spooler Service บนเครื่องของเราเอง

รันคำสั่ง "sc query Spooler" บน Command Prompt หาก Spooler Service มีการใช้งานอยู่จะเป็นดังภาพ

รันคำสั่ง "sc config Spooler start= disabled" หากต้องการ Disable Spooler (ต้องรัน Command Prompt ด้วยสิทธิ์ Admin คำว่า disabled เว้นวรรคจากเครื่องหมาย =) Reboot และรันคำสั่ง "sc query Spooler" บน Command Prompt อีกครั้งจะเป็นดังภาพ

หลังจากแก้ไข Config เรียบร้อยแล้ว สามารถตรวจสอบ Spooler service ได้ผ่านทาง registry key HKEY_LOCAL_MACHINE\SYSTEM\​CurrentControlSet\​Services\Spooler ที่ registry value "Start"

0 = start at bootup

1 = start while Windows is loading

2 = start automatically once the Windows System Control Manager software is running

3 = start only when explicitly requested (e.g. using sc start command)

4 = disabled (refuse to start even if asked)

Workaround Fix เพิ่มเติม

เนื่องจากปัจจุบันยังไม่มี Patch Update ออกมาจาก Microsoft ตามรายละเอียดข้างต้น สามารถแก้ไขด้วยวิธีการ Workaround ตามวิธีด้านล่างนี้ทั้งทาง GPO และ PowerShell ทั้งนี้ทั้งนั้นขึ้นอยู่กับความจำเป็นในการใช้งาน Print Spooler ตามรายละเอียดข้างต้น

วิธีการลบ Authenticated User ออกจาก Feature Pre-Windows 2000 Compatible Access

  1. เปิด "Active Directory Users and Computers" (หรือ run ด้วยคำสั่ง "dsa.msc").
  2. เลือก "Builtin" ตามภาพ
  3. ดับเบิ้ลคลิก "Pre-Windows 2000 Compatible Access" ตามภาพ
  4. เลือก Tab "Members"
  5. ถ้าพบว่ามี User "Anonymous Logon", "Authenticated Users" หรือ "Everyone" ให้ทำการลบออกทั้งหมด

การแก้ไขบน GPO

ตั้งค่าให้ปฏิเสธการเชื่อมต่อระหว่าง Client กับ Spooler โดยปิดการใช้งาน Spooler Service

หมายเหตุ: Workaround นี้ยังแก้ไข CVE-2021-34527 ตามที่ระบุไว้ในหน้าช่องโหว่ของ Microsoft ด้วยเช่นกัน Computer Configuration -> Administrative Templates -> Printers -> Allow Print Spooler to accept client connections เลือกเป็น Disabled ตามภาพ

การแก้ไขด้วย PowerShell

รายละเอียด PowerShell Script เต็มๆสามารถดูได้จาก : github

Reference. nakedsecurity threatpost