ทำความเข้าใจช่องโหว่ที่เรียบง่ายแต่ดุดัน CVE-2025–32462:Sudo-h local privilege escalation

โดย admin

2 นาที
แชร์
Blog Thumbnail

ทำความเข้าใจช่องโหว่ที่เรียบง่ายแต่ดุดัน CVE-2025–32462:Sudo-h local privilege escalation

By Prawee lertprasertphan,

Penetration Tester Team, Datafarm Company Limited

CVE-2025–32462: Sudo -h local privilege escalation

สวัสดีทุกท่านที่เดินผิดทางมาจนพบกับบทความนี้เข้า โดยในบทความนี้เราจะมาอธิบายถึงช่องโหว่ CVE-2025–32462: Sudo -h local privilege escalation กัน ถ้าถามว่าทำไมถึงเลือกเรื่องนี้ ก็เพราะจากบทความ “CVE-2025–32463 Sudo chroot Elevation of Privilege” ที่ผ่านมาของ Datafarm ได้มีการเกริ่นไว้ถึงช่องโหว่ CVE-2025–32462 แบบคร่าว ๆ เอาไว้ที่ท้ายสุดของเรื่อง ด้วยเหตุนี้จากความสงสัยว่าช่องโหว่ตัวนี้มันคืออะไรกันนะ จึงได้เกิดเป็นบทความนี้ขึ้นมานั้นเอง

เรามาอธิบายคร่าว ๆ ถึงช่องโหว่ CVE-2025–32462: Sudo -h local privilege escalation กันสักหน่อยโดยช่องโหว่นี้เป็นช่องโหว่ที่เรียบง่ายแต่ดุดัน เพราะมันเกิดจากแค่ option ของ sudo เพียงตัวเดียวที่ชื่อว่า “-h ” ซึ่งปกติมันควรจะเอาไว้ใช้คู่กับ options “-l” เท่านั้นเพื่อตรวจสอบว่าผู้ใช้งานปัจจุบันมีสิทธิ์ในการใช้งาน sudo แบบไหนบ้างบนเครื่อง host ที่ระบุ ใช่ครับมันเอาไว้ใช้แค่นี้จริง ๆ มันถูกออกแบบมาเพื่อทำแค่นี้เลย แต่ว่าสำหรับใน sudo เวอร์ชัน 1.8.8–1.9.17 มันกลับกลายเป็น option ที่สามารถทำอะไรได้มากกว่าที่คิด และรวมถึงการยกระดับสิทธิ์ของผู้ใช้งานจากสิทธิ์ต่ำไปสิทธิ์สูงได้นั้นเอง ก่อนอื่นเลยมารู้จัก option ของ “-h” ก่อนว่ามันสร้างมาเพื่ออะไรกัน

Sudo -h

“sudo -h” เป็นคำสั่งที่ถ้าเอาไปถามใครต่อใคร ก็น่าจะได้คำตอบคล้าย ๆ กันก็คือ เป็นคำสั่งที่จะ แสดงข้อความช่วยเหลือ (help) หรือเอาไว้ใช้เพื่อขอวิธีการใช้งานของ sudo ออกมานั้นเอง

รูปที่ 1

แต่จริง ๆ แล้วมันไม่ได้มีแค่นั้นนะสิ มันสามารถทำได้มากกว่านั้นถ้าเกิดเราใส่ host เข้าไปหลัง option “-h” เช่น “sudo -h ” มันจะกลายเป็นว่ามันจะเอาคำสั่ง sudo ไปจับคู่กับกฎ sudoers ของ host ที่เราระบุเข้าไปแทน ว่าผู้ใช้งานปัจจุบันใช้คำสั่ง sudo อะไรได้บ้างบน host ที่เราระบุไว้

รูปที่ 2

เอาล่ะทุกคนคงจะงงแน่นอนว่ามันหมายความว่ายังไงนะที่พูดมา งั้นเดี๋ยวผมจะสาธิตการใช้งานให้ดู โดยก่อนอื่นเลยผมจะทำการออกกฎให้กับ sudoers ว่าที่เครื่อง host “lowpriv” (DEV) ผู้ใช้งาน “DoForWhat” จะไม่มีสิทธิ์ใช้งาน sudo แต่ที่เครื่อง host “highpriv” (PROD) ผู้ใช้งานจะมีสิทธิ์ใช้งาน sudo ตามรูป

รูปที่ 3

โอเคเมื่อเราออกกฎเสร็จเรามาลองทดสอบดูกัน

sudo -l

รูปที่ 4

จากรูปด้านบนเราจะเห็นได้ว่าที่เครื่อง host “lowpriv” ที่เราอยู่ผู้ใช้งาน “DoForWhat” ไม่มีสิทธิ์ทีจะรันคำสั่ง sudo อะไรได้เลยซึ่งถูกต้อง เพราะว่ากฎใน sudoers บอกว่านายไม่มีสิทธิ์รัน sudo ที่ host นี้นะ จากนั้นเราลองเพิ่ม options “-h highpriv.test.local” เข้าไปเพิ่มเพื่อบอกให้ sudo ไปใช้กฎ sudoers ของ host “highpriv” แทนนะ ผลที่ได้คือ

sudo -h highpriv.test.local -l

รูปที่ 5

จะเห็นได้ว่า sudo จะไปดูกฎ sudoers ของเครื่อง host “highpriv” ซึ่งผู้ใช้งาน “DoForWhat” เนี่ยมีสิทธิ์ที่จะรันคำสั่ง sudo ได้ซึ่งเป็นจริงเพราะกฎ sudoers เขียนไว้แบบนั้น และนี้คือหลักการทำงานของตัว options “-h ” นั้นเอง อีกทั้งตัวมันออกแบบมาให้สามารถใช้ได้แค่กับ option “-l” เท่านั้น เอาล่ะในเมื่อเรารู้แล้วว่า options “-h” สามารถเอาไว้ทำอะไรได้บ้างแล้ว ทีนี้เราจะใช้มันเพื่อยกสิทธิ์ยังไงละในเมื่อมันทำได้แค่นี้ เราไปดูวิธีการโจมตีกัน

CVE-2025–32462 โจมตียังไง?

อย่างที่ได้เกริ่นกันไปในตอนต้นช่องโหว่นี้จะมีปัญหากับแค่ sudo เวอร์ชันตั้งแต่ 1.8.8–1.9.17 เท่านั้น และจะมีแค่ตัว options “-h ” ที่เป็นปัญหาเท่านั้นเพราะว่าแทนที่มันจะใช้ได้กับแค่ option “-l” กลายเป็นว่ามันมีบัคที่สามารถเอามันไปใช้ร่วมกับคำสั่งอะไรก็ได้ ตัวอย่างเช่น

sudo -h < bash

ด้วยบัคนี้ทำให้กลายเป็นว่าต่อให้เครื่อง host ที่เราใช้งานอยู่เราจะไม่มีสิทธิ์ใช้งาน sudo เนื่องจากกฎของ sudoers ก็ตามแต่ถ้าเราเจอเครื่อง host ที่เราสามารถใช้งาน sudo ได้ เราก็สามารถที่จะ bypass กฎของ sudoers บนเครื่องที่เราใช้งานอยู่ได้นั้นเอง

ก่อนอื่นเลยเรามาเตรียมเครื่องเพื่อทดสอบช่องโหว่นี้กันก่อน โดยทางผมได้นำเครื่องมาจาก github ของคนนี้ “https://github.com/MAAYTHM/CVE-2025-32462\_32463-Lab” หลังจากติดตั้งเครื่องสำเร็จ เรามาตั้งกฎที่ sudoers กันต่อโดยผมจะทำการตั้งกฎตามนี้

รูปที่ 6

จากรูปเราจะมีเครื่อง host 2 เครื่องได้แก่ “highpriv.test.local” และ “lowpriv.test.local” มีผู้ใช้งานด้วยกันทั้งหมด 2 คนได้แก่ “DoForWhat” และ “pwn” โดยผู้ใช้งาน “DoForWhat” จะมีสิทธิ์รันคำสั่ง sudo ได้ที่เครื่อง host “highpriv.test.local” เท่านั้น และ ผู้ใช้งาน “pwn” จะมีสิทธิ์รันคำสั่ง sudo ได้ที่เครื่อง host “lowpriv.test.local” เท่านั้น ซึ่งถ้าใครอยากทำตามก็สามารถไปแก้ไขที่ไฟล์ “/etc/sudoers” ได้เลย เอาล่ะในเมื่อเราจัดการทุกอย่างเสร็จหมดแล้วเรามาเริ่มโจมตีกันเลย

อย่างแรกเลย เราจะทำการเข้าใช้งานเครื่อง host “lowpriv.test.local” ด้วยผู้ใช้งาน “DoForWhat” แล้วลองใช้คำสั่ง sudo ดู

sudo -l

รูปที่ 7

จะพบว่าตัวผู้ใช้งาน “DoForWhat” เนี่ยไม่สามารถใช้งานคำสั่ง sudo ได้เพราะกฎของ sudoers ที่เราได้ตั้งไว้ให้สามารถใช้งาน sudo ได้เพียงแค่เครื่อง host “highpriv.test.local” เท่านั้น เอาล่ะที่นี้ลองใส่ options “-h highpriv.test.local” เข้าไปดู

sudo -h highpriv.test.local -l

รูปที่ 8

เมื่อเราลองรันคำสั่งก็จะพบว่าเราสามารถใช้งาน sudo ได้นั้นหมายความว่าเราสามารถเปลี่ยนไปใช้กฎที่เครื่อง host “highpriv.test.local” ได้สำเร็จแล้วนั้นเอง เอาล่ะเมื่อเราได้ข้อมูลทั้งหมดแล้วที่นี้เรามาลองใช้ options “-h ” รวมกับคำสั่งอื่น ๆ เพื่อทดสอบช่องโหว่นี้อย่างเช่น

sudo -h highpriv.test.local bash

รูปที่ 9

จะเห็นได้ว่าเราสามารถรันคำสั่งอย่าง “bash” ผ่าน sudo เพื่อสร้าง shell root บนเครื่อง host “lowpriv.test.local” ได้สำเร็จ โดยที่ตัวของผู้ใช้งานอย่าง “DoForWhat” ไม่มีสิทธิ์

วิธีการแก้ไขช่องโหว่

สำหรับช่องโหว่เรื่องนี้การป้องกันที่ง่ายที่สุดก็คงไม่พ้นที่จะทำการอัปเดทตัวของเวอร์ชัน sudo ให้เป็น 1.9.17s1 ขึ้นไป

# Ubuntu/Debian
sudo apt update && sudo apt install sudo
# RHEL/CentOS/Rocky
sudo dnf update sudo
# macOS
brew upgrade sudo

แต่ถึงอย่างงั้นถ้ายังไม่สามารถที่จะทำการอัปเดทตัวของ sudo ได้ทางผมก็แนะนำให้ตรวจสอบการตั้งกฎของ sudoers ดี ๆ และใช้ tag NOPASSWD อย่างระมัดระวังนั้นเองครับ

และก็จบกันไปแล้วนะครับสำหรับบทความ CVE-2025–32462 ในครั้งนี้ ก็จะเห็นได้เลยว่าต่อให้เป็นฟังก์ชั่นเล็ก ๆ หรือเป็น feature ที่ดูไม่ค่อยสามารถทำอะไรได้มากขนาดไหนสุดท้ายก็ยังมีช่องโหว่เกิดขึ้นจนได้ถ้าเราไม่จัดการให้มันดีมากพอนะครับ สุดท้ายผมก็หวังว่าบทความนี้มันจะมีประโยชน์บ้างไม่มากก็น้อยสำหรับทุกท่านที่หลงเข้ามาอ่านกันนะครับ ขอบคุณครับ

References:

https://medium.com/@mhdg./cve-2025-32462-how-a-12-year-old-sudo-bug-lets-you-become-root-where-you-shouldnt-780699101736

https://mrcyber.medium.com/the-matrix-of-sudo-cve-2025-32462-and-the-red-pill-of-root-access-ebc5c53bac85

https://github.com/MAAYTHM/CVE-2025-32462_32463-Lab

แชร์
กลับไปด้านบน

บทความที่เกี่ยวข้อง

อัปเดตข้อมูลด้านไซเบอร์ ทุกสัปดาห์
รับข่าวสารความรู้เชิงลึกเกี่ยวกับความปลอดภัยไซเบอร์จากดาต้าฟาร์มก่อนใคร

ฟีเจอร์นี้จะเปิดให้ใช้งานเร็ว ๆ นี้ โปรดติดตาม

ส่งสัปดาห์ละ 1 ครั้ง ไม่มีสแปม ยกเลิกการรับข่าวสารได้ทุกเมื่อ