เมื่อวันที่ 8 กันยายน ที่ผ่านมา เกิดเหตุโจมตีห่วงโซ่อุปทานซอฟต์แวร์ (Software Supply Chain Attack) ครั้งใหญ่ในระบบนิเวศของ NPM ส่งผลกระทบต่อไลบรารี JavaScript ที่มีการใช้งานอย่างแพร่หลายหลายรายการ การละเมิดความปลอดภัยนี้ถูกตรวจพบครั้งแรกเมื่อ Charles Guillemet ประธานเจ้าหน้าที่ฝ่ายเทคโนโลยี (CTO) ของ Ledger ได้ออกมาเตือนว่าบัญชี Node Package Manager ของนักพัฒนาที่เชื่อถือได้รายหนึ่งถูกแฮ็ก การประเมินเบื้องต้นระบุว่ามีจำนวนการดาวน์โหลดที่ได้รับผลกระทบกว่าหนึ่งพันล้านครั้ง แต่จากการวิเคราะห์เพิ่มเติมพบว่าแพ็กเกจที่ถูกโจมตีนั้นมียอดดาวน์โหลดรวมกันมากกว่า 2.6 พันล้านครั้งต่อสัปดาห์

Supply Chain Attack Exposes Over 2 Billion
Supply Chain Attack Exposes Over 2 Billion
การโจมตีครั้งนี้พุ่งเป้าไปที่บัญชีของนักพัฒนาที่รู้จักกันในชื่อ "qix" ซึ่งเป็นผู้ดูแลไลบรารี JavaScript ยอดนิยมหลายตัว เช่น chalk, strip-ansi, color-convert และ debug โดยไลบรารีเหล่านี้ปรากฏอยู่ในโปรเจกต์จำนวนนับไม่ถ้วนทั้งในฝั่งเซิร์ฟเวอร์ (server-side) และฝั่งผู้ใช้งาน (front-end) ผู้โจมตีเข้าถึงบัญชีได้ผ่านอีเมลสนับสนุนปลอม และได้ทำการอัปเดตโค้ดอันตรายเข้าไปในแพ็กเกจประมาณ 18 รายการ ซึ่งการติดตั้ง Dependency แบบอัตโนมัติทำให้มัลแวร์แพร่กระจายได้อย่างรวดเร็วภายในเวลาไม่กี่ชั่วโมง
Guillemet อธิบายว่า โค้ดอันตรายดังกล่าวจะแอบเปลี่ยนที่อยู่กระเป๋าเงินคริปโตเคอร์เรนซี (Cryptocurrency wallet addresses) ระหว่างการทำธุรกรรม ผู้ใช้งานที่ใช้ซอฟต์แวร์วอลเล็ต (Software wallet) จึงเสี่ยงที่จะสูญเสียเงินหากกดยืนยันธุรกรรมโดยไม่ทันสังเกตว่าที่อยู่ผู้รับปลายทางถูกแก้ไขไปแล้ว
Malware Crypto Clipper and MetaMask
นักวิจัยด้านความปลอดภัยจัดประเภทมัลแวร์นี้ว่าเป็น "Crypto Clipper" ซึ่งจะคอยเปลี่ยนที่อยู่กระเป๋าเงินในขั้นตอนต่างๆ ของการทำธุรกรรม หากไม่พบกระเป๋าเงิน มัลแวร์จะแก้ไขข้อมูลขาออกภายในแอปพลิเคชันแบบกระจายศูนย์ (Decentralized applications) โดยการดึงข้อมูลผ่านฟังก์ชันเบราว์เซอร์อย่าง fetch และ XMLHttpRequest เพื่อสแกนและแก้ไขที่อยู่ในข้อมูลของแอปพลิเคชัน
หากมีการติดตั้งส่วนขยายกระเป๋าเงินอย่าง MetaMask มัลแวร์จะดักจับธุรกรรมก่อนที่จะมีการลงนาม (Signing) โดยจะแก้ไขที่อยู่กระเป๋าเงินในหน่วยความจำ ทำให้ที่อยู่ปลอมปรากฏขึ้นเมื่อผู้ใช้งานตรวจสอบธุรกรรม มัลแวร์ตัวนี้ใช้อัลกอริทึม Levenshtein เพื่อสร้างที่อยู่ที่ใกล้เคียงกับของจริงมากที่สุด ทำให้การตรวจพบการแก้ไขทำได้ยากยิ่งขึ้น

Supply Chain Attack Exposes Over 2 Billion
First Signs of the Attack
นักพัฒนาสังเกตเห็นการโจมตีครั้งแรกเมื่อระบบ Build แสดงข้อความแจ้งเตือนข้อผิดพลาดที่ไม่คาดคิด จากการตรวจสอบ Dependency ที่ชื่อว่า error-ex พบโค้ดที่ถูกทำให้ซับซ้อน (Obfuscated code) ซึ่งมีฟังก์ชันน่าสงสัยชื่อว่า checkethereumw ซึ่งบ่งชี้ถึงการพุ่งเป้าไปที่กระเป๋าเงิน Ethereum นักวิเคราะห์ยืนยันว่ามัลแวร์มีการอ้างอิงถึงที่อยู่กระเป๋าเงิน บนบล็อกเชนหลายเครือข่าย รวมถึง Bitcoin, Ethereum, Solana, Tron, Litecoin และ Bitcoin Cash
แพ็กเกจที่ได้รับผลกระทบรวมถึงไลบรารีที่ถูกใช้งานมากที่สุดในระบบนิเวศ JavaScript โดย Chalk มียอดดาวน์โหลดมากกว่า 300 ล้านครั้งต่อสัปดาห์, debug มากกว่า 350 ล้านครั้ง และ strip-ansi มากกว่า 260 ล้านครั้ง เมื่อรวมกันแล้ว ไลบรารีที่ถูกโจมตีมียอดดาวน์โหลดมากกว่า 2.6 พันล้านครั้งต่อสัปดาห์ ซึ่งแสดงให้เห็นถึงขนาดของผลกระทบที่มีต่อชุมชนนักพัฒนา
Hardware vs Software Wallets
ไลบรารีที่ติดมัลแวร์หลายตัวไม่ได้เชื่อมโยงโดยตรงกับโปรเจกต์คริปโตเคอร์เรนซี แต่การรวมเข้ากับห่วงโซ่ Dependency หมายความว่าแม้แต่แอปพลิเคชันที่ไม่เกี่ยวข้องก็อาจได้รับผลกระทบไปด้วย โปรเจกต์ที่มีการโต้ตอบกับกระเป๋าเงินคริปโตเคอร์เรนซีและแอปพลิเคชันแบบกระจายศูนย์ถือว่ามีความเสี่ยงในระดับสูงสุด
Guillemet ตั้งข้อสังเกตว่าผู้ใช้งานฮาร์ดแวร์วอลเล็ต (Hardware wallet) ที่มีฟีเจอร์ Clear-signing ยังคงปลอดภัย เนื่องจากอุปกรณ์เหล่านี้อนุญาตให้ตรวจสอบทุกธุรกรรมก่อนการอนุมัติ ในขณะที่ผู้ใช้งานซอฟต์แวร์วอลเล็ตมีความเสี่ยงมากกว่าและควรใช้ความระมัดระวังอย่างสูงสุดจนกว่า Dependency ทั้งหมดจะได้รับการตรวจสอบและรักษาความปลอดภัยอย่างครบถ้วน
Finding the Attacker and Funds Stolen
ที่อยู่กระเป๋าเงินคริปโตเคอร์เรนซีของผู้โจมตีถูกระบุตัวตนแล้วและกำลังถูกติดตามอย่างต่อเนื่องผ่านความโปร่งใสของบล็อกเชนสาธารณะ ที่อยู่ Ethereum หลักที่เชื่อมโยงกับการปฏิบัติการนี้คือ 0xFc4a4858bafef54D1b1d7697bfb5c52F4c166976 พร้อมด้วยที่อยู่สำรองอีกหลายรายการ ณ เวลาที่รายงาน เงินที่ถูกขโมยไปนั้นยังไม่มีการเคลื่อนไหว การติดตามนี้ช่วยให้สามารถวิเคราะห์ได้อย่างต่อเนื่อง แม้ว่าขอบเขตของสินทรัพย์ที่ถูกขโมยไปทั้งหมดจะยังไม่ชัดเจนก็ตาม

Supply Chain Attack Exposes Over 2 Billion
JavaScript and Community Role
ชุมชน JavaScript และ web3 ได้ดำเนินการอย่างรวดเร็วเพื่อควบคุมเหตุการณ์นี้ เวอร์ชันอันตรายของแพ็กเกจที่ถูกโจมตีส่วนใหญ่ถูกลบออกจาก Registry แล้ว แต่ยังคงมีความเสี่ยงสำหรับโปรเจกต์ที่อาจยังพึ่งพาเวอร์ชันเก่าที่อยู่ใน Lockfiles นักพัฒนาได้รับการกระตุ้นให้ตรวจสอบ Dependency ของตน ล็อกเวอร์ชันที่ปลอดภัย และติดตั้ง Build ใหม่ที่สะอาดเพื่อป้องกันผลกระทบเพิ่มเติม
ผู้เชี่ยวชาญด้านความปลอดภัยแนะนำให้นักพัฒนาหมุนเวียนข้อมูลรับรอง (Rotate credentials), บังคับใช้การยืนยันตัวตนแบบสองชั้น (2FA) บนบัญชีอย่าง NPM และ GitHub และใช้วิธีการติดตั้งแบบกำหนดผลลัพธ์ที่แน่นอน (Deterministic installation) เช่น npm ci เพื่อรักษาการควบคุมเวอร์ชันที่เข้มงวด ผู้ใช้งานควรตรวจสอบธุรกรรมคริปโตเคอร์เรนซีทั้งหมดอย่างละเอียด โดยเฉพาะเมื่อต้องพึ่งพาซอฟต์แวร์วอลเล็ต
Final Thoughts
เหตุการณ์นี้ถือเป็นการละเมิดความปลอดภัยครั้งใหญ่ที่สุดครั้งหนึ่งที่เคยเกิดขึ้นกับระบบนิเวศของ NPM แม้ว่าการตอบสนองของชุมชนจะค่อนข้างรวดเร็ว แต่การโจมตีนี้ได้เผยให้เห็นถึงความเปราะบางของห่วงโซ่อุปทานซอฟต์แวร์สมัยใหม่ และความเสี่ยงที่เกิดจากการพึ่งพาส่วนประกอบแบบโอเพนซอร์ส (Open-source) เป็นวงกว้าง
ตามที่ Guillemet ได้เน้นย้ำ การตรวจสอบทุกธุรกรรมก่อนการลงนามยังคงเป็นสิ่งจำเป็น การละเมิดครั้งนี้แสดงให้เห็นว่าแม้แต่ไลบรารีขนาดเล็กที่ฝังลึกอยู่ในโครงสร้างพื้นฐานของแอปพลิเคชัน ก็สามารถกลายเป็นช่องทางโจมตีที่สำคัญได้เมื่อถูกบุกรุก สำหรับทั้งนักพัฒนาและผู้ใช้งาน การเฝ้าระวังอย่างต่อเนื่องถือเป็นส่วนสำคัญในการรักษาความปลอดภัยในระบบนิเวศของ web3 และการพัฒนาซอฟต์แวร์ในปัจจุบัน



