GitHub ประกาศว่า npm v12 ที่จะเปิดตัวในเดือนหน้า จะมาพร้อมการเปลี่ยนแปลงด้านความปลอดภัยหลายอย่าง เพื่อสกัดการโจมตีแบบ supply-chain ที่อาศัยพฤติกรรมการทำงานอัตโนมัติของคำสั่ง npm install

คำสั่ง npm install เป็นคำสั่งที่นักพัฒนาใช้ดาวน์โหลดและติดตั้ง dependency ของโปรเจ็กต์ พร้อมรัน install script ต่าง ๆ ที่แพ็กเกจกำหนดไว้ โดยนักพัฒนามักรันคำสั่งนี้หลัง clone โปรเจ็กต์ ดึงอัปเดต หรือระหว่างกระบวนการ CI/CD ซึ่งจุดนี้เองที่ผู้โจมตีเล็งเป้าหมาย เพราะเปิดโอกาสให้รันโค้ดอัตโนมัติในระหว่างขั้นตอนการติดตั้งแพ็กเกจ แก่นของการเปลี่ยนแปลงครั้งนี้คือ การรันโค้ดและการดึง dependency จากแหล่งที่ไม่ใช่ registry ซึ่งเดิมจะทำงานอัตโนมัติระหว่าง npm install จะต้องได้รับการอนุมัติอย่างชัดเจน (explicit approval) แทนการเชื่อถือเป็นค่าเริ่มต้น
ตามประกาศของ GitHub การเปลี่ยนแปลงหลักใน npm v12 ประกอบด้วย 3 ส่วนหลัก คือ
- npm install จะไม่รัน preinstall, install หรือ postinstall script จาก dependency อีกต่อไป เว้นแต่จะได้รับการอนุมัติอย่างชัดเจน โดยครอบคลุมถึงการ build native module ผ่าน node-gyp และ prepare script จาก dependency ประเภท Git, local file และ linked ด้วย
- npm install จะไม่ดึง dependency จาก Git repository ทั้งแบบ direct และ transitive เว้นแต่จะได้รับอนุญาตอย่างชัดเจน ซึ่งช่วยปิดช่องทางการรันโค้ดที่ไฟล์ .npmrc ของ Git dependency สามารถเปลี่ยน Git executable ที่ถูกเรียกใช้ได้ แม้จะปิด install script ไว้แล้วก็ตาม
- dependency ที่ติดตั้งจาก remote URL เช่น HTTPS tarball จะไม่ถูก resolve เว้นแต่จะได้รับอนุญาตอย่างชัดเจน โดยมีผลทั้งกับ dependency แบบ direct และ transitive
การเปลี่ยนแปลงเหล่านี้ช่วยลดการโจมตีแบบ supply-chain ได้อย่างมีนัยสำคัญ ด้วยการตัดการรัน install script อัตโนมัติ การ resolve dependency แบบ Git และการ resolve dependency จาก remote URL อัตโนมัติออกไป ซึ่งหากบังคับใช้ก่อนหน้านี้ ก็จะสามารถขัดขวางเทคนิคการโจมตีที่ปรากฏในหลายเหตุการณ์ล่าสุด ทั้งแคมเปญ malicious preinstall/postinstall script ที่เล่นงาน eslint-config-prettier และแพ็กเกจ Picasso ของ Toptal การฝังแพ็กเกจ npm ขโมยข้อมูลจำนวนมาก ไปจนถึงการอาศัย Git dependency ในการโจมตีชุด Shai-Hulud อย่างไรก็ตาม โปรเจ็กต์ที่ยังต้องพึ่งพาพฤติกรรมเหล่านี้ใน workflow ปกติ จะต้องตั้งค่า opt in อย่างชัดเจนก่อนอัปเกรดไปยัง npm v12
GitHub แนะนำให้นักพัฒนาเตรียมตัวด้วยการอัปเกรดไปใช้ npm 11.16.0 หรือใหม่กว่า ซึ่งจะแสดงคำเตือนสำหรับทุก action ที่จะใช้งานไม่ได้ภายใต้ v12 ทำให้นักพัฒนาที่รันขั้นตอนการติดตั้งตามปกติสามารถตรวจสอบคำเตือนเหล่านี้ เพื่อระบุ dependency หรือ workflow ที่ต้องได้รับการอนุมัติก่อนอัปเกรด หลังอัปเกรดเป็น v12 แล้ว จะมีเพียง script และแหล่ง dependency ที่ได้รับการอนุมัติอย่างชัดเจนเท่านั้นที่ยังทำงานอัตโนมัติต่อไป ทั้งนี้ GitHub ได้เปิด community discussion ให้นักพัฒนาร่วมแสดงความคิดเห็นต่อการเปลี่ยนแปลงที่กำลังจะเกิดขึ้นด้วย
TechTalkThai ศูนย์รวมข่าว Enterprise IT ออนไลน์แห่งแรกในประเทศไทย







