npm เพิ่มระบบควบคุมการเผยแพร่ และการติดตั้งแพ็กเกจด้วยการยืนยันตัวตนสองขั้นตอน (2FA) เพื่อป้องกันการโจมตีแบบ Supply Chain Attack

 

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

ฟีเจอร์นี้มีชื่อว่า Staged publishing ซึ่งปัจจุบันเปิดให้ใช้งานทั่วไปแล้วบน npm โดยระบบจะบังคับให้ผู้ดูแลแพ็กเกจ (ที่เป็นมนุษย์) ต้องผ่านการยืนยันตัวตนแบบ 2FA เพื่ออนุมัติแพ็กเกจ ก่อนที่แพ็กเกจนั้นจะถูกเผยแพร่ขึ้นไปยังเว็บ npmjs[.]com

GitHub ระบุว่า แทนที่จะเป็นการเผยแพร่โดยตรงซึ่งทำให้ผู้ใช้งานสามารถนำแพ็กเกจเวอร์ชันนั้นไปใช้งานได้ทันที ไฟล์ tarball ที่ prebuilt จะถูกอัปโหลดไปพักไว้ใน stage queue ก่อน ซึ่งผู้ดูแลจะต้องทำการอนุมัติเสียก่อน แพ็กเกจนั้นจึงจะสามารถนำไปติดตั้งได้

GitHub ระบุว่า การเปลี่ยนแปลงนี้ช่วยรับประกันการยืนยันตัวตนว่ามีบุคคลอยู่จริงสำหรับทุก ๆ การเผยแพร่ ซึ่งรวมถึงการเผยแพร่ที่มาจากกระบวนการ CI/CD แบบ Non-interactive และการเผยแพร่ที่ Trusted publishing ผ่านการยืนยันตัวตนด้วยระบบ OpenID Connect (OIDC)

ก่อนที่จะใช้งานระบบ Staged publishing ผู้ดูแลแพ็กเกจจะต้องมีคุณสมบัติตรงตามเกณฑ์ดังต่อไปนี้ :

  • มีสิทธิ์ในการ Publish สำหรับแพ็กเกจนั้น
  • แพ็กเกจนั้นจะต้องมีอยู่แล้วบน npm registry ซึ่งหมายความว่าแพ็กเกจที่สร้างขึ้นมาใหม่เลย จะไม่สามารถใช้งานระบบ Staged ได้
  • บัญชีผู้ใช้เปิดใช้งานระบบ 2FA แล้ว

นักพัฒนาสามารถใช้คำสั่ง npm stage publish จาก Root directory ของแพ็กเกจ เพื่อส่งแพ็กเกจนั้นเข้าสู่ Staging area ได้ โดยในการใช้งานคำสั่งนี้ จำเป็นอย่างยิ่งที่จะต้องอัปเดต npm CLI ให้เป็นเวอร์ชัน 11.15.0 หรือใหม่กว่า นอกจากนี้ เพื่อการป้องกันที่มีประสิทธิภาพสูงสุด GitHub แนะนำให้ใช้งานระบบ Staged publishing ควบคู่ไปกับ Trusted publishing โดยใช้ OIDC

  • --allow-file: ควบคุมการติดตั้งจาก Local file paths และไฟล์ tarball ในเครื่อง
  • --allow-remote: ควบคุมการติดตั้งจาก Remote URLs รวมถึงไฟล์ tarball ผ่านลิงก์ https
  • --allow-directory: ควบคุมการติดตั้งจากไดเรกทอรีภายในเครื่อง

GitHub ระบุว่า flag เหล่านี้ช่วยให้นักพัฒนาสามารถใช้วิธีการกำหนดรายการ Explicit-allowlist แบบเดียวกันนี้ กับทุก ๆ แหล่งการติดตั้งที่ไม่ได้มาจาก Registry ของ npm โดยตรงได้

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

ที่มา : thehackernews