สรุปสั้น
บริษัท JFrog เปิดเผยเมื่อสัปดาห์นี้ว่า Parallels Desktop for Mac มีช่องโหว่ที่ทำให้บัญชีผู้ใช้ธรรมดาในเครื่องสามารถรันโค้ดด้วยสิทธิ์ root ซึ่งเป็นสิทธิ์สูงสุดบน Mac ได้ ช่องโหว่นี้ถูกตั้งชื่อว่า ParaShells และติดตามในรหัส CVE-2026-90894 ซึ่งเป็นรหัสที่ JFrog กำหนดขึ้นเอง โดยให้คะแนนความรุนแรง 7.8 จาก 10 การโจมตีต้องอาศัยโค้ดที่รันอยู่แล้วในเครื่องด้วยสิทธิ์ผู้ใช้ธรรมดา จึงไม่สามารถทำผ่านเครือข่ายได้ แต่เมื่อทำสำเร็จผู้โจมตีจะได้สิทธิ์ระดับสูงสุดเหนือตัวเครื่อง Mac เอง ไม่ใช่แค่เครื่องเสมือนที่รันอยู่ข้างใน
จุดที่น่ากังวลที่สุดคือเรื่องการแก้ไข บริษัท Parallels ระบุว่าช่องโหว่นี้ถูกแก้ในเวอร์ชัน 27 แต่เวอร์ชัน 27 ต้องใช้กับ Mac ที่เป็นชิป Apple silicon เท่านั้น เพราะ Parallels ตัดการรองรับ Mac ชิป Intel ออกไปตามแนวทางของ Apple ผู้ใช้ Mac ชิป Intel จึงถูกแนะนำให้อยู่กับเวอร์ชัน 26 ต่อไป ซึ่ง JFrog ระบุว่ายังไม่มีการแก้ช่องโหว่นี้ ผลก็คือ Mac ชิป Intel ที่ติดตั้ง Parallels Desktop อยู่ ในเวลานี้ยังไม่มีบิลด์ที่ JFrog ยืนยันว่าปลอดภัยให้ติดตั้งได้เลย
รายละเอียดข่าว
เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 16 กันยายน 2569 ว่า นาย Yuval Moravchick หัวหน้าทีมวิจัยช่องโหว่ของบริษัท JFrog ได้เผยแพร่ผลการค้นพบนี้เมื่อวันอังคาร Parallels Desktop เป็นซอฟต์แวร์ที่ใช้รัน Windows และ Linux ในรูปเครื่องเสมือน (virtual machine) บน Mac โดยตัวโปรแกรมจะติดตั้งบริการเบื้องหลังชื่อ prl_disp_service ที่ทำงานด้วยสิทธิ์ root เนื่องจากหน้าที่ของมันรวมถึงการตั้งค่าเครือข่ายของโฮสต์และการแตกแพ็กเกจเครื่องเสมือน ช่องโหว่อยู่ที่ฝั่ง Mac ของผลิตภัณฑ์ ทำให้เครื่องที่เสี่ยงคือตัว Mac เองไม่ใช่เครื่องเสมือน
บริษัท JFrog สาธิตช่องโหว่นี้บน Parallels Desktop เวอร์ชัน 26.4.0 บิลด์ 57513 บน Mac ชิป Apple silicon และระบุว่าการติดตั้งตามปกติก็มีทุกอย่างที่การโจมตีต้องใช้อยู่แล้ว ทั้งตัวโปรแกรมที่ติดตั้งไว้ บริการที่ทำงานพร้อมซ็อกเก็ต และบัญชีผู้ใช้สิทธิ์ต่ำในเครื่อง โดยไม่จำเป็นต้องมีเครื่องเสมือนใดรันอยู่ JFrog ยังระบุว่าไม่ได้ทดสอบทุกบิลด์ย้อนหลัง และแนะนำให้ถือว่าการติดตั้งใดที่ยังเปิดเทมเพลตการแตกไฟล์ appliance แบบเดิมและมีซ็อกเก็ตของบริการที่ทุกโปรเซสเขียนได้ ให้นับว่าอยู่ในขอบเขตที่มีช่องโหว่ ทั้งนี้ JFrog ระบุว่ายังไม่พบการนำช่องโหว่ไปใช้โจมตีจริง และ Parallels ยังไม่ได้เผยแพร่ข้อมูลใด ๆ เกี่ยวกับเรื่องนี้ เหตุผลที่ช่องโหว่ระดับเครื่องแบบนี้สำคัญ คือโค้ดที่รันด้วยสิทธิ์ผู้ใช้ธรรมดาเป็นสิ่งที่พบได้ทั่วไปบนเครื่องเหล่านี้ ไม่ว่าจะเป็นสูตร Homebrew ที่เป็นอันตราย สคริปต์ติดตั้ง npm ที่ถูกวางยา งาน build ที่ถูกเจาะ หรือบัญชีที่อ่อนแอเพียงบัญชีเดียวบน Mac ที่ใช้ร่วมกันในห้องแล็บหรือห้องอบรม

รายละเอียดช่องโหว่
บนเครื่องที่ JFrog ทดสอบ ซ็อกเก็ตที่บริการ prl_disp_service เปิดรอไว้เป็นแบบที่ทุกโปรเซสในเครื่องเขียนได้ (world-writable) หมายความว่าโปรแกรมใดก็ตามบน Mac สามารถเชื่อมต่อเข้าไปได้ และการเรียกล็อกอินที่ตามมาคือ PrlSrv_LoginLocal จะตรวจสอบเพียงข้อมูลประจำตัวที่เคอร์เนลรายงานสำหรับโปรเซสที่เชื่อมต่อเท่านั้น ไม่ต้องมีลายเซ็นโค้ดของ Parallels และใช้ได้กับบัญชีที่ไม่ใช่ผู้ดูแลระบบ
หัวใจของช่องโหว่อยู่ที่ขั้นตอนการติดตั้ง appliance ของเครื่องเสมือน บริการจะประกอบคำสั่งแตกไฟล์เป็นข้อความบรรทัดเดียวในรูป tar -xf “%1” -C “%2” แล้วนำข้อความนั้นมาแยกกลับเป็นอาร์กิวเมนต์แต่ละตัวด้วยฟังก์ชัน QProcess::splitCommand ของ Qt ปัญหาคือผู้เรียกเป็นคนเลือกข้อความบางส่วนได้ เพราะเป็นคนกำหนดโฟลเดอร์ปลายทางที่เครื่องเสมือนใหม่จะไปอยู่ การใส่เครื่องหมายอัญประกาศคู่ (") ไว้ในชื่อโฟลเดอร์จะปิดการครอบข้อความก่อนเวลา ทำให้สิ่งที่ผู้โจมตีใส่ต่อจากนั้นกลายเป็นออปชันเพิ่มเติมของ tar แทนที่จะเป็นส่วนหนึ่งของพาธ ออปชันที่ JFrog ใช้คือ –use-compress-program ซึ่งสั่งให้ tar บน macOS ส่งไฟล์บีบอัดไปให้โปรแกรมอื่นก่อน และเพราะ tar รันด้วยสิทธิ์ root โปรแกรมนั้นจึงรันด้วยสิทธิ์ root ตามไปด้วย สคริปต์ทดสอบของ JFrog ใช้ช่องทางนี้เขียนกฎ sudo แบบไม่ต้องใส่รหัสผ่านและเปิด root shell ขึ้นมา
เรื่องบิลด์ที่แก้แล้วยังสับสน JFrog ระบุว่าการแก้อยู่ใน Parallels Desktop 27 (ตั้งแต่ 27.0.0) แต่วันที่ในเอกสารไม่ตรงกัน ไทม์ไลน์ของ JFrog บอกว่าแพตช์ออกใน 27.0.0 เมื่อ 1 กันยายน 2569 ขณะที่บันทึกรุ่นของ Parallels ระบุว่า 27.0.0 ออกเมื่อ 25 สิงหาคม และ 27.0.1 ออกเมื่อ 1 กันยายน การติดตั้งรุ่นใหม่สุดในสายนี้คือ 27.0.1 บิลด์ 58670 จึงครอบคลุมทั้งสองการตีความ ตารางด้านล่างสรุปสถานะแต่ละสายผลิตภัณฑ์:
| สายผลิตภัณฑ์ | บิลด์ใหม่สุด | มีการแก้ตามที่ JFrog ระบุ | ติดตั้งได้บน |
|---|---|---|---|
| Parallels Desktop 27 | 27.0.1 (58670) · 1 ก.ย. 2569 | มี (JFrog ระบุ 27.0.0) | Mac ชิป Apple silicon บน macOS Sonoma 14.7 ขึ้นไป |
| Parallels Desktop 26 | 26.4.2 (57518) · 8 ก.ย. 2569 | ไม่มี (ตาม JFrog) | Mac ทั้งชิป Intel และ Apple silicon |
ผลกระทบ
ผู้ที่ได้รับผลกระทบคือผู้ใช้ Parallels Desktop บน Mac ที่มีบัญชีผู้ใช้หลายรายหรือรันโค้ดจากแหล่งภายนอกเป็นประจำ เพราะเพียงมีโค้ดที่รันด้วยสิทธิ์ผู้ใช้ธรรมดา เช่น สคริปต์ติดตั้งแพ็กเกจที่ถูกวางยา ก็สามารถยกระดับเป็น root และควบคุมเครื่องได้ทั้งหมด กลุ่มที่เสี่ยงเป็นพิเศษคือ Mac ที่ใช้ร่วมกันในห้องแล็บ ห้องอบรม หรือเครื่องนักพัฒนาที่รันงาน build จากภายนอก ซึ่งบัญชีสิทธิ์ต่ำเพียงบัญชีเดียวที่ถูกเจาะก็เพียงพอ
จุดที่ทำให้สถานการณ์หนักขึ้นคือ Mac ชิป Intel ที่ยังใช้ Parallels Desktop สาย 26 อยู่ ไม่มีเส้นทางอัปเกรดไปเวอร์ชัน 27 ที่ JFrog ระบุว่าแก้แล้ว และ Parallels ก็ยังไม่ได้ประกาศว่าจะนำการแก้ไขนี้กลับมาที่สาย 26 หรือกำหนดวันใด ๆ นอกจากนี้ JFrog ยังเตือนว่าผู้โจมตีที่เข้าถึง root ได้แล้วสามารถฝังตัวคงอยู่ผ่านกลไก launchd ซึ่งการอัปเดตผลิตภัณฑ์เพียงอย่างเดียวจะไม่ล้างการฝังตัวนั้นออก
คำแนะนำ
ผู้ใช้ควรตรวจสอบว่าเครื่องของตนมีความเสี่ยงหรือไม่ด้วยคำสั่งแบบอ่านอย่างเดียวสองคำสั่ง คำสั่งแรกรายงานเวอร์ชันที่ติดตั้ง และคำสั่งที่สองรายงานว่าซ็อกเก็ตของบริการเปิดให้ทุกโปรเซสในเครื่องเข้าถึงหรือไม่:
defaults read "/Applications/Parallels Desktop.app/Contents/Info" CFBundleShortVersionStringls -l /var/run/prl_disp_service.socket
หากซ็อกเก็ตแสดงสิทธิ์เป็น srwxrwxrwx บนบิลด์ที่ใกล้เคียง 26.4.0 JFrog แนะนำให้ถือว่าเครื่องนั้นมีความเสี่ยงจนกว่าจะยืนยันว่าได้ติดตั้งบิลด์ที่แก้แล้ว สำหรับ Mac ชิป Apple silicon ควรอัปเดตเป็น Parallels Desktop 27.0.1 บิลด์ 58670 หรือใหม่กว่า ส่วน Mac ชิป Intel ที่ยังไม่มีบิลด์ที่แก้แล้ว ควรจำกัดผู้ที่ล็อกอินเข้าเครื่องในระดับเครื่องให้น้อยที่สุด และจัดทำรายการ Mac ทุกเครื่องในองค์กรที่ติดตั้ง Parallels Desktop ไว้ ผู้ดูแลที่ผลักอัปเดตผ่านระบบบริหารจัดการอุปกรณ์ควรตรวจสอบกฎเวอร์ชันก่อน เพราะนโยบายที่ส่งเวอร์ชันใหม่อัตโนมัติจะพยายามติดตั้งเวอร์ชัน 27 บน Mac ชิป Intel แล้วล้มเหลว
