GitHub ปรับ npm v12 ยกเครื่องความปลอดภัย สกัด Supply-chain Attack ผ่าน npm install

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

Credit: GitHub

คำสั่ง 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 ให้นักพัฒนาร่วมแสดงความคิดเห็นต่อการเปลี่ยนแปลงที่กำลังจะเกิดขึ้นด้วย

ที่มา: https://www.bleepingcomputer.com/news/security/github-announces-npm-security-changes-to-tackle-supply-chain-attacks/

About เด็กฝึกงาน TechTalkThai หมายเลข 1

นักเขียนผู้มีความสนใจใน Enterprise IT ด้วยประสบการณ์กว่า 10 ปีในไทย ปัจจุบันใช้ชีวิตอยู่ที่สหรัฐอเมริกา แต่ยังคงมุ่งมั่นในการแบ่งปันความรู้และประสบการณ์ด้านเทคโนโลยีให้กับทุกคน

Check Also

Sangfor ได้รับการยอมรับในฐานะ Representative Vendor ใน Gartner® Market Guide for Cloud Infrastructure Sovereign Solutions [Guest Post]

หลังจากที่ Sangfor ได้รับการระบุชื่อในรายงาน Gartner® Market Guide for Private Clouds เมื่อไม่นานมานี้ Sangfor มีความยินดีที่จะประกาศอีกหนึ่งการยอมรับสำคัญ โดยได้รับการระบุชื่อเป็น Representative Vendor …

IBM Bob: AI ที่ทำงานได้ทั้งวงจรการพัฒนาซอฟต์แวร์ [Guest post]

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