สรุปสั้น

บริษัท Virtualizor ผู้พัฒนาแผงควบคุมเครื่องเสมือนที่ผู้ให้บริการโฮสติงใช้บริหารโหนดไฮเปอร์ไวเซอร์ เปิดเผยว่าผู้โจมตีใช้การไฮแจ็กเส้นทาง Border Gateway Protocol (BGP) เบี่ยงทราฟฟิกที่วิ่งไปยังบริการของ Softaculous ให้เข้าเซิร์ฟเวอร์ที่ผู้โจมตีควบคุม แล้วอาศัยช่องทางนั้นส่งแพ็กเกจอัปเดตที่ถูกดัดแปลงกลับไปยังการติดตั้ง Virtualizor บางส่วน ช่วงเวลาของเหตุการณ์กินตั้งแต่วันที่ 28 สิงหาคม 2569 เวลาประมาณ 20:57 น. UTC ถึงวันที่ 30 สิงหาคม เวลา 06:10 น. UTC และจุดสำคัญที่สุดของเหตุการณ์นี้คือบริษัทระบุเองว่าไม่มีช่วงเวอร์ชันที่ได้รับผลกระทบและไม่มีรายชื่อเครื่องที่ได้รับแพ็กเกจอันตรายอย่างชัดเจน ผู้ดูแลระบบทุกรายจึงต้องถือว่าเซิร์ฟเวอร์ของตนอาจอยู่ในข่ายทั้งหมด

โค้ดที่ถูกแทรกเข้าไปในไฟล์หลักของ Virtualizor สามไฟล์จะถูกเรียกทำงานผ่าน cron ของบัญชี root แล้วเพิ่มกุญแจ SSH ของผู้โจมตีเข้าไปในบัญชี root ติดตั้ง Java 17 หากเครื่องยังไม่มี ดาวน์โหลดเพย์โหลดที่เขียนด้วย Java แล้วรันด้วยสิทธิ์ root ก่อนจะฝังตัวถาวรผ่านเซอร์วิส systemd และสร้างบัญชีชื่อ proxyuser ทิ้งไว้ บัญชีของผู้ให้บริการรายหนึ่งบนเว็บบอร์ด LowEndTalk รายงานว่าโหนดไฮเปอร์ไวเซอร์ 5 เครื่องจาก 34 เครื่องที่ตรวจสอบมีร่องรอยการแก้ไขแบบเดียวกัน และพบบันทึกการล็อกอิน SSH ด้วยรหัสผ่านเข้าบัญชี proxyuser จากหมายเลขไอพีของผู้โจมตีจริง

บริษัทออก Patch 9 พร้อมเครื่องมือ Security Analyzer เมื่อวันที่ 1 กันยายน แต่ระบุเองว่าการลงลายมือชื่อแพ็กเกจด้วยวิทยาการเข้ารหัสยังเป็นงานในอนาคต ซึ่งเป็นจุดที่ทำให้การโจมตีครั้งนี้สำเร็จตั้งแต่ต้น ณ วันที่ 2 กันยายน บริษัทยังไม่เผยแพร่ชื่อไฟล์หรือค่าแฮชของแพ็กเกจอันตราย ไม่เผยรายชื่อช่องทางอัปเดตที่ได้รับผลกระทบ และยังไม่มีรุ่นที่บังคับตรวจสอบลายมือชื่อแพ็กเกจออกมา

รายละเอียดข่าว

เว็บไซต์ The Hacker News รายงานเมื่อวันที่ 2 กันยายน 2569 ว่า Virtualizor แจ้งเหตุการณ์ด้านความปลอดภัยที่เกิดจากการไฮแจ็กเส้นทาง BGP ซึ่งทำให้ทราฟฟิกอัปเดตของบริการในเครือ Softaculous ถูกเบี่ยงไปยังเซิร์ฟเวอร์ของผู้โจมตี โดยรายงานระบุว่าประกาศเส้นทางแรกที่มีเส้นทางตรงกับที่บริษัทระบุปรากฏขึ้นเมื่อเวลา 20:57:30 น. UTC ของวันที่ 28 สิงหาคม ซึ่ง The Hacker News ยืนยันด้วยข้อมูลจาก RIPE Stat และบริษัทยืนยันว่าเส้นทางดังกล่าวไม่ได้รับอนุญาต

จุดที่ทำให้การโจมตีแนบเนียนคือระหว่างที่ทราฟฟิกถูกเบี่ยง ผู้โจมตีสามารถขอใบรับรองจาก Let’s Encrypt ที่ใช้งานได้จริงสำหรับโดเมนปลายทาง การเชื่อมต่อที่วิ่งผ่านเซิร์ฟเวอร์ของผู้โจมตีจึงไม่มีการแจ้งเตือนใบรับรองใด ๆ เมื่อการติดตั้ง Virtualizor เครื่องใดตรวจหาอัปเดตในช่วงเวลาที่เส้นทางถูกเบี่ยง ก็มีโอกาสได้รับแพ็กเกจที่ถูกดัดแปลง และเนื่องจากไคลเอนต์อัปเดตไม่มีการตรวจสอบลายมือชื่อแพ็กเกจ จึงไม่มีกลไกใดปฏิเสธแพ็กเกจนั้นได้

บัญชีชื่อ AlbaHost ซึ่งแสดงสถานะเป็นสมาชิกและผู้ให้บริการระดับ Patron บนเว็บบอร์ด LowEndTalk ระบุว่ามีคำสั่งอันตรายถูกแทรกเข้าไปในไฟล์ของ Virtualizor ที่ถูกต้องสามไฟล์ และมี cron job ของ root เรียกโค้ดที่ถูกแก้ไขทำงานภายหลัง พร้อมยืนยันว่า “เรายืนยันได้ว่าโหนดไฮเปอร์ไวเซอร์ Virtualizor 5 จาก 34 เครื่องของเรามีการแก้ไขที่เป็นอันตรายแบบเดียวกับที่อธิบายไว้ในกระทู้นี้”

ข้อจำกัดของหลักฐานส่วนนี้ต้องระบุให้ชัดว่าเป็นรายงานของผู้ให้บริการเองบนเว็บบอร์ดสาธารณะ ไม่ใช่ผลการตรวจพิสูจน์หลักฐานจากบุคคลที่สาม โดยผู้ให้บริการรายนี้ระบุเพิ่มเติมว่าในสภาพแวดล้อมที่ตรวจสอบไปแล้ว ยังไม่พบการแก้ไขเครื่องเสมือนของลูกค้าที่ยืนยันได้ และยังไม่สามารถยืนยันอย่างเป็นอิสระว่ามีการส่งออกฐานข้อมูลออกไป

ฝั่ง Virtualizor ระบุว่าเซสชันของพื้นที่ลูกค้าและทราฟฟิกที่มีการกรอกข้อมูลการชำระเงินในช่วงที่เส้นทางถูกเบี่ยง อาจวิ่งไปถึงเซิร์ฟเวอร์ของผู้โจมตีได้ แต่ ณ วันที่ 2 กันยายน บริษัทยังไม่ได้รายงานว่ามีการขโมยบัญชีลูกค้าหรือข้อมูลการชำระเงินที่ยืนยันแล้ว และบริษัทยังแนะนำให้ผู้ดูแลผลิตภัณฑ์อื่นในเครือ Softaculous ทั้ง Webuzo, Softaculous, Backuply และ SitePad ตรวจสอบเซิร์ฟเวอร์ที่มีการเช็กอัปเดตในช่วงเวลาดังกล่าวด้วย เพราะการสอบสวนยังไม่ปิด แม้ยังไม่พบแพ็กเกจอันตรายของผลิตภัณฑ์เหล่านั้นก็ตาม

อีกจุดที่ควรบันทึกไว้คือความไม่ตรงกันของชื่อรุ่นในเอกสารของบริษัทเอง โดยประกาศแจ้งเหตุเรียกรุ่นที่แก้ไขว่า Virtualizor 3.2.9.9 ขณะที่บันทึกการออกรุ่นเรียกว่า Virtualizor 3.2.9 (Release Candidate and Stable Branch) (Patch 9) ซึ่งผู้ดูแลระบบควรยึดตามบันทึกการออกรุ่นเป็นหลักและตรวจสอบว่าเครื่องของตนได้รับ Security Analyzer แล้วจริงหรือไม่ ส่วนบริษัทเองสรุปเหตุการณ์ไว้ว่า “เหตุการณ์นี้กระทบเซิร์ฟเวอร์จำนวนหนึ่งเท่านั้น ไม่ใช่ฐานผู้ใช้ Virtualizor โดยทั่วไป”

วิธีการโจมตี

การโจมตีเริ่มที่ชั้นเส้นทางของอินเทอร์เน็ต ไม่ใช่ที่ตัวระบบของผู้พัฒนา ผู้โจมตีประกาศเส้นทาง BGP ที่ไม่ได้รับอนุญาตเพื่อดึงทราฟฟิกที่ควรวิ่งไปยังโครงสร้างพื้นฐานของ Softaculous มาเข้าเซิร์ฟเวอร์ของตนเอง เมื่อทราฟฟิกวิ่งเข้ามาแล้ว การขอใบรับรองแบบตรวจสอบความเป็นเจ้าของโดเมนก็ทำได้ทันที เพราะกระบวนการตรวจสอบนั้นเองก็เดินทางผ่านเส้นทางเดียวกันที่ถูกไฮแจ็กไว้แล้ว ผลคือได้ใบรับรอง Let’s Encrypt ที่เบราว์เซอร์และไคลเอนต์อัปเดตยอมรับโดยไม่เตือน

เมื่อไคลเอนต์ของ Virtualizor เช็กอัปเดตในช่วงนั้น ก็ได้รับแพ็กเกจที่ถูกดัดแปลงและติดตั้งลงเครื่องโดยไม่มีการตรวจลายมือชื่อ คำสั่งอันตรายถูกแทรกเข้าไปในไฟล์หลักสามไฟล์ ได้แก่ globals.php, _universal.php และ zzvirtservice จากนั้น cron job ของบัญชี root จะเรียกโค้ดที่ถูกแก้ไขให้ทำงาน

โค้ดที่ถูกแทรกจะเพิ่มกุญแจ SSH ที่ผู้โจมตีควบคุมเข้าไปในบัญชี root ตรวจสอบว่าเครื่องมี Java หรือไม่ ถ้าไม่มีก็ติดตั้ง Java 17 ให้ก่อน แล้วดาวน์โหลดเพย์โหลด Java ลงมาที่ /usr/lib/jvm/.cache/jre-runtime.dat และรันด้วยสิทธิ์ root ตัวเพย์โหลดฝังตัวถาวรด้วยเซอร์วิส systemd ชื่อ java-jre-update.service ซึ่งเป็นชื่อที่กลมกลืนกับงานอัปเดตรันไทม์ตามปกติ พร้อมสร้างบัญชีผู้ใช้ชื่อ proxyuser ที่ไม่ได้รับอนุญาตเอาไว้ และผู้ให้บริการพบบันทึกการล็อกอิน SSH ด้วยรหัสผ่านเข้าบัญชีนี้สำเร็จจากหมายเลข 193.32.127[.]248

ผลกระทบ

ผู้ที่รับผลกระทบตรงที่สุดคือผู้ให้บริการโฮสติงที่ใช้ Virtualizor บริหารโหนดไฮเปอร์ไวเซอร์ เพราะการยึดสิทธิ์ root บนโหนดหนึ่งเท่ากับได้อำนาจเหนือเครื่องเสมือนของลูกค้าทุกเครื่องที่รันอยู่บนโหนดนั้น แม้รายงานเท่าที่มีจะยังไม่ยืนยันว่ามีการแก้ไขเครื่องเสมือนของลูกค้าจริง แต่ขอบเขตของสิทธิ์ที่ผู้โจมตีได้ไปทำให้ต้องประเมินความเสี่ยงจากความสามารถ ไม่ใช่จากร่องรอยที่พบเท่านั้น

ปัญหาที่ตามมาทันทีคือการที่บริษัทไม่มีช่วงเวอร์ชันที่ได้รับผลกระทบและไม่มีรายชื่อเครื่องที่ได้รับแพ็กเกจ ทำให้ผู้ดูแลระบบไม่สามารถคัดกรองด้วยหมายเลขเวอร์ชันได้เลย และต้องไล่ตรวจทุกเครื่องด้วยตัวบ่งชี้การถูกบุกรุกแทน ซึ่งกินเวลาและกำลังคนมากกว่าการอ่านตารางเวอร์ชันหลายเท่า

อีกจุดที่ต้องระวังคือความเข้าใจผิดว่าสแกนแล้วไม่เจอเท่ากับปลอดภัย เครื่องมือของบริษัทตรวจและควบคุมได้เฉพาะร่องรอยที่รู้จักแล้ว ส่วนไฟล์หลักของ Virtualizor ที่ถูกแก้ไขต้องกู้คืนจากเนื้อหาที่เชื่อถือได้หรือติดตั้งใหม่ และสำหรับเครื่องที่ยืนยันว่าถูกยึดสิทธิ์ root แล้ว ผู้ให้บริการที่เจอเหตุการณ์จริงระบุว่าการสร้างเครื่องใหม่ทั้งหมดเป็นทางเดียวที่เชื่อถือได้ในระยะยาว

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

คำแนะนำ

ตรวจสอบว่ามีไฟล์ /etc/systemd/system/java-jre-update.service อยู่บนเครื่องหรือไม่ หากพบให้เก็บรักษาหลักฐานไว้และติดต่อฝ่ายสนับสนุนของ Virtualizor ก่อนดำเนินการใด ๆ เพื่อไม่ให้หลักฐานถูกทำลาย

หมุนกุญแจ API ของ Virtualizor ทั้งหมด จำกัดการเข้าถึง API ให้เฉพาะหมายเลขไอพีที่เชื่อถือได้ และลบกุญแจที่ไม่รู้จักออก ส่วนผู้ใช้ Client Center API ควรสร้างกุญแจใหม่แล้วอัปเดตบนเซิร์ฟเวอร์ของตน

ตรวจสอบกุญแจ SSH ที่ไม่รู้จัก บัญชีผู้ใช้ที่เพิ่งถูกสร้าง งานตามเวลาหรือ cron job ที่ผิดปกติ และการเชื่อมต่อขาออกที่ไม่ควรมี พร้อมจำกัดการเข้าถึง SSH ให้เฉพาะไอพีที่เชื่อถือได้ โดยให้ความสำคัญกับบัญชีชื่อ proxyuser เป็นพิเศษ

รันเครื่องมือสแกนอย่างเป็นทางการของบริษัท และอัปเดตเป็น Patch 9 ที่มี Security Analyzer ทั้งนี้ให้ถือว่าผลการสแกนคือการควบคุมร่องรอยที่รู้จักแล้วเท่านั้น ไม่ใช่การยืนยันว่าเครื่องกลับมาเชื่อถือได้

ผู้ใช้พื้นที่ลูกค้าที่ล็อกอินหรือกรอกข้อมูลการชำระเงินในช่วงวันที่ 28-30 สิงหาคม ควรเปลี่ยนรหัสผ่านพื้นที่ลูกค้า เปลี่ยนรหัสเดียวกันในทุกที่ที่นำไปใช้ซ้ำ ตรวจสอบกิจกรรมของบัญชี และตรวจสอบรายการเดินบัญชีบัตรหากเคยกรอกข้อมูลการชำระเงินไว้

สำหรับเครื่องที่ยืนยันว่าถูกยึดสิทธิ์ root ให้วางแผนสร้างเครื่องใหม่จากศูนย์แทนการล้างเฉพาะร่องรอยที่พบ และตรวจสอบเซิร์ฟเวอร์ของผลิตภัณฑ์อื่นในเครือ Softaculous ที่เคยเช็กอัปเดตในช่วงเวลาเดียวกันด้วย

Indicators of Compromise (IoCs)

ตัวบ่งชี้ที่เป็นโดเมนและหมายเลขไอพีถูก defang ไว้แล้ว (แทน . ด้วย [.]) เพื่อป้องกันการคลิกโดยไม่ตั้งใจ

ตัวบ่งชี้ประเภทคำอธิบาย
/etc/systemd/system/java-jre-update.serviceSystemd unitเซอร์วิสที่ใช้ฝังตัวถาวร
/usr/lib/jvm/.cache/jre-runtime.datไฟล์เพย์โหลดที่ถูกติดตั้ง
b81a4e1fab9fc4e404d57224fe71e2c143aa93942bd46998789bdc944a7870c7SHA-256ค่าแฮชของเพย์โหลด
/usr/lib/jvm/.cache/.installedไฟล์ไฟล์เครื่องหมายว่าติดตั้งแล้ว
/tmp/widdow.jarไฟล์ไฟล์เครื่องหมาย
/tmp/.vz_svc_doneไฟล์ไฟล์เครื่องหมายที่ผู้ให้บริการรายงาน
/usr/local/virtualizor/globals.phpไฟล์หลักไฟล์ของ Virtualizor ที่ถูกแทรกคำสั่ง
/usr/local/virtualizor/_universal.phpไฟล์หลักไฟล์ของ Virtualizor ที่ถูกแทรกคำสั่ง
/usr/local/virtualizor/zzvirtserviceไฟล์หลักไฟล์ของ Virtualizor ที่ถูกแทรกคำสั่ง
cdn[.]nerat[.]ccโดเมน C2โดเมนที่ใช้ดาวน์โหลดและสั่งการ
connect[.]ne-rat[.]xyzโดเมน C2โดเมนสั่งการ
cdn[.]nerat[.]cc/installer/widdow.jarสตริงที่ถูกแทรกเส้นทางดาวน์โหลดเพย์โหลด
AAAAC3NzaC1lZDI1NTE5AAAAIP13pPAm5jmInLQYD3XNb3HwrW4cAKDcphoT4kSKrnteกุญแจ SSHกุญแจของผู้โจมตีที่ถูกเพิ่มในบัญชี root
SHA256:YQmy1hKF1h5cdJLxlZ5EScNoxe/UDWahjsWuQw2ERi8ลายนิ้วมือกุญแจ SSHค่าที่ผู้ให้บริการรายงาน
proxyuserบัญชีผู้ใช้บัญชีที่ไม่ได้รับอนุญาตซึ่งถูกสร้างขึ้น
193.32.127[.]248ไอพีต้นทางการล็อกอิน SSH ที่ผู้ให้บริการรายงาน
31.77.220[.]138:2025ไอพีและพอร์ตปลายทางที่ผู้ให้บริการรายงาน
73e74402b3a61c7bab289fc11347bd54c7fcdc2fa2e410f4c3de9d6cd7377d48SHA-256ค่าแฮชของสคริปต์สแกนอย่างเป็นทางการ (ใช้ตรวจว่าโหลดของแท้)

แหล่งอ้างอิง