November 1, 2026
Local privilege escalation via user-owned /opt/ghelper directory with NOPASSWD sudo rule
สวัสดีครับ ผม GHOSPT ผมได้ไปเจอช่องโหว่ misconfiguration ของ โปรแกรมนึงที่เป็น open source มาครับ สำหรับใครที่ใช้ Laptop Asus ที่มี Armoury…
By GHOSPT
2 min read
สวัสดีครับ ผม GHOSPT ผมได้ไปเจอช่องโหว่ misconfiguration ของ โปรแกรมนึงที่เป็น open source มาครับ สำหรับใครที่ใช้ Laptop Asus ที่มี Armoury Crate อาจเจอปัญหา แล้วต้องหา program optimize อื่นมาใช้ อาจจะพอคุ้นๆ หูกันบ้างอย่าง
https://github.com/utajum/g-helper-linuxhttps://github.com/utajum/g-helper-linuxG-Helper 1.0.79 <= version <= v1.0.97(Linux) ซึ่งผมได้เจอช่องโหว่นี้จากการที่ เพื่อนของผมได้ใช้ program นี้ในการ optimize เครื่องแล้วพบว่าสามารถ kill process ไหนก็ได้ ด้วยสิทธิ์ root ซึ่งตัว program ถูกออกแบบมาให้ทำได้อยู่แล้วเพราะมีการ สร้าง config กับไฟล์ sudoers.d
จากภาพ ก็จะเห็นได้ว่าเรายินยอมให้ใช้ได้ โดยคำสั่งที่ใช้ได้ก็จะมีเพียง สิ่งที่ gpu-helper ทำได้ เช่น kill และการอ่านค่าจาก hardware แต่กลับพบว่า Path ที่เก็บbinary gpu-helper นั้นไม่ปลอดภัย
เห็นได้ว่า directory นี้อนุญาต ให้ user สามารถ เขียนอะไรลงไปก็ได้ใน folder รวมถึงการที่สามารถเปลี่ยนชื่อไฟล์ใน folder นี้ได้ทำให้เกิดการปลอม binary file ใน path นี้ได้ ผมได้ทดสอบ ว่าความร้ายแรงหาก Laptop ที่ใช้ program นี้โดน RCE(Remote Code Execution) จะสามารถโดน Local Privilege Escalation ได้หรือป่าว (directory สามารถอ่านเขียนจาก user ที่เป็น directory owner เท่านั้น)
จาก PoC ( Proof of Concept) ที่ผมทำขึ้นพบว่า
ซึ่งทำให้เกิดการ Privilege Escalation ได้จริง และ ค่อนข้างอันตราย
ช่องโหว่นี้เกิดจากการ Script install.sh ใน บรรทัดที่ 525–528 ซึ่งไม่ควรมีอยู่ ที่เราทำการ Curl มาแล้ว Run script ดังกล่าว
curl -sL https://raw.githubusercontent.com/utajum/g-helper-linux/master/install/install.sh | sudo bashcurl -sL https://raw.githubusercontent.com/utajum/g-helper-linux/master/install/install.sh | sudo bash
ซึ่งเห็นได้ว่าพยายามทำการเปลี่ยนให้ directory ghelper ใน /opt เป็นของ user โดยไม่มีความจำเป็นเพราะ การที่ให้ user เป็นเจ้าของ path ที่อยู่ใน NOPASSWD ROOT ทำให้เกิดการปลอมแปลงชื่อ binary หรือ เขียนไฟล์ขึ้นมาทดแทนตัว binary ที่ถูกตั้งใน path ของ NOPASSWD ROOT และ ตัว binary กำหนดสิทธิ์ไว้เป็น 755 ซึ่งอนุญาตให้สามารถ execute โดยทุกคนได้ รวมถึงตัว program เก็บ config file ไว้ใน ~/.config/ghelper ไม่มีผลต่อการใช้งานของ user
วิธีการแก้ไข
จะเห็นได้ว่าตอนติดตั้งจะใช้คำสั่ง
curl -sL https://raw.githubusercontent.com/utajum/g-helper-linux/master/install/install.sh | sudo bashcurl -sL https://raw.githubusercontent.com/utajum/g-helper-linux/master/install/install.sh | sudo bashสำหรับคนที่ยังไม่เคยใช้แล้วกลัวว่าจะมีปัญหาหากต้องใช้ program นี้ ทำได้โดย
ให้โหลด script ลงมาบนเครื่องแล้ว "ลบ" บรรทัดดังกล่าวออก แล้วรัน script ได้ตามปกติเลย
สำหรับคนที่ใช้อยู่แล้ว
sudo chown root:root /opt/ghelpersudo chown root:root /opt/ghelper
PoC ( Proof Of Concept )
clear.sh ใช้ เพื่อล้าง exploit file ทิ้งหลังจาก exploit.sh ให้กลับสู่ default เหมือนตอน install
ทั้งหมดนี้ ผมค้นพบจากการฟังเพื่อนที่ใช้ program นี้อยู่แล้วรู้สึกว่าการตั้งค่า permission ที่ผิดปกติ และ ช่องโหว่บางอย่างจนนำมาสู่การทำ PoC ที่กล่าวมา
ขอบคุณทุกคนที่อ่านมาจนถึงตรงนี้นะครับ การเขียน medium ครั้งนี้ของผมอาจจะไม่ได้สมบูรณ์มาก เพราะเป็นครั้งแรกของผมในการเขียนอะไรแบบนี้
หากต้องการติดต่อสอบถามเพิ่มเติม สามารถติดต่อได้ที่ IG: why_perty Facebook: Peter Cha LinkedIn: https://www.linkedin.com/in/chayutphol-wongsaichuea-73a55a308/