• มีการเผยแพร่เวอร์ชันอันตรายของ แพ็กเกจ Nx และปลั๊กอิน ไปยัง npm โดยทำการสแกนระบบไฟล์ รวบรวม ข้อมูลรับรอง แล้วส่งไปยังรีโพซิทอรีในบัญชี Github ของผู้ใช้
  • หากต้องการตรวจสอบว่าได้รับผลกระทบหรือไม่ ต้องตรวจสอบว่ามีการสร้าง รีโพซิทอรี s1ngularity-repository ในบัญชี Github หรือไม่
  • หากติดเชื้อ จำเป็นต้อง เปลี่ยนโทเค็นและรหัสผ่าน ลบรีโพซิทอรีอันตราย และตรวจสอบไฟล์ตั้งค่าเชลล์ โดยทันที
  • เวอร์ชันอันตรายส่งผลต่อระบบผ่าน สคริปต์ postinstall และมีความเสี่ยงที่จะถูกรันโดยไม่รู้ตัวเพิ่มขึ้น โดยเฉพาะเมื่อใช้งานปลั๊กอิน VSCode Nx Console
  • ฝั่ง Nx ได้ดำเนินการ ป้องกันการเกิดซ้ำและเพิ่มมาตรการความปลอดภัย แล้ว และเวอร์ชันที่เกี่ยวข้องถูกลบออกจาก npm แล้ว

ภาพรวมและสรุป

  • คำแนะนำด้านความปลอดภัยครั้งนี้เกี่ยวข้องกับการโจมตีแบบ supply chain ร้ายแรงต่อ แพ็กเกจ Nx และปลั๊กอินที่เกี่ยวข้องบางส่วน โดยมีการเผยแพร่โค้ดอันตรายผ่าน npm
  • เวอร์ชันอันตรายดังกล่าวจะ สแกนระบบไฟล์ ของผู้ใช้เพื่อรวบรวมข้อมูลรับรอง พาธ และข้อมูลอื่น ๆ แล้วอัปโหลดไปยังรีโพซิทอรี Github (s1ngularity-repository)
  • สคริปต์ postinstall อันตรายยังแก้ไขไฟล์ตั้งค่าเชลล์ของผู้ใช้ (.zshrc, .bashrc) เพื่อเพิ่มคำสั่งปิดระบบเข้าไป
  • มีการสรุปอย่างละเอียดถึงช่องทางการโจมตีและลำดับการโจมตี เวอร์ชันที่ได้รับผลกระทบ มาตรการเร่งด่วนที่ผู้ใช้ควรทำ และแนวทางป้องกันไม่ให้เกิดซ้ำ

วิธีดำเนินการเร่งด่วน

สิ่งที่ทุกคนต้องตรวจสอบ

  1. ตรวจสอบในรายการรีโพซิทอรีของบัญชี Github ของตนว่ามีการสร้าง s1ngularity-repository หรือไม่
  2. ดาวน์โหลดไฟล์ที่อยู่ในรีโพซิทอรีนั้นเพื่อเก็บไว้เป็นหลักฐาน
  3. ลบรีโพซิทอรีออกจาก Github
  4. ส่งอีเมลไปที่ security@nrwl.io เพื่อขอคำแนะนำวิธีถอดรหัสข้อมูลที่รั่วไหล
  5. เปลี่ยนข้อมูลรับรองและโทเค็นของทุกบัญชีทันที

วิธีเปลี่ยน Github token

  • ไปที่ https://github.com/settings/connections/…
  • เพิกถอนสิทธิ์การเข้าถึงของแอปที่เชื่อมต่อเพื่อทำให้โทเค็นเดิมใช้งานไม่ได้
  • หากใช้ gh CLI ให้ยืนยันตัวตนใหม่เพื่อสร้างโทเค็นใหม่
  • หากไม่ดำเนินการ โทเค็นเดิมอาจถูกนำไปใช้ในทางที่ผิด

หยุดใช้และจัดการเวอร์ชัน Nx ที่เป็นอันตราย

  • ตรวจสอบว่าเวอร์ชัน Nx ที่ใช้อยู่เป็นเวอร์ชันอันตรายหรือไม่ด้วยคำสั่ง npm ls nx
  • หากเป็นเวอร์ชันที่ติดเชื้อ ให้อัปเดตด้วย npm uninstall nx && npm install nx@latest
  • ล้างแคชด้วย npm cache clean --force

ผู้ใช้ที่ติดเชื้อแล้ว

  • เปลี่ยน npm และ Github token
  • รีเซ็ตรหัสผ่านและข้อมูลรับรองทั้งหมดของ Github และบริการที่เกี่ยวข้อง
  • ตรวจสอบไฟล์ .zshrc, .bashrc ว่ามีการแทรกคำสั่งแปลกปลอมหรือไม่ แล้วลบออก

กรณีเป็นผู้ดูแลรีโพซิทอรีแพ็กเกจภายในองค์กร

  • จำเป็นต้องลบเวอร์ชันอันตรายออกจาก proxy ใน registry ภายในองค์กรทันทีเพื่อป้องกันการแพร่กระจายเพิ่มเติม

เวอร์ชันที่ได้รับผลกระทบ

แพ็กเกจ Nx

  • 21.5.0, 20.9.0, 20.10.0, 21.6.0, 20.11.0, 21.7.0, 21.8.0, 20.12.0
  • ถูกลบออกจาก npm แล้ว ณ เวลา 10:44 PM EDT

@nx/devkit, @nx/js, @nx/workspace, @nx/node, @nx/eslint, @nx/key, @nx/enterprise-cloud

  • ถูกลบออกจาก npm แล้ว ณ เวลา 10:44 PM, 6:20 AM EDT

รายละเอียดช่องทางการโจมตี

สาเหตุของ Workflow ที่มีช่องโหว่

  • มีการนำ ช่องโหว่ที่ทำให้รันโค้ดตามอำเภอใจได้ เข้ามาใน workflow ของ Github Actions
  • หากแทรก bash code บางอย่างลงในชื่อ PR จะเกิดช่องโหว่ที่ทำให้ workflow รันคำสั่งระบบได้ (Bash Injection)
  • มีการนำไปใช้ผ่าน trigger pull_request_target ซึ่งทำให้ได้สิทธิ์ที่สูงขึ้น เช่น GITHUB_TOKEN
  • ก่อนถูกลบ workflow ที่มีช่องโหว่ยังคงอยู่ใน branch เก่าที่ไม่ใช่ main ทำให้ผู้โจมตีสามารถรัน workflow ผ่าน PR อันตรายและขโมย secrets ได้สำเร็จ

กระบวนการขโมย npm token

  • บังคับให้มีการรัน publish.yml ผ่าน workflow ที่มีช่องโหว่
  • publish.yml เก็บ npm token ไว้ใน Github Secrets และในขั้นตอนนี้มีการส่งโทเค็นออกไปยัง webhook ภายนอก
  • ท้ายที่สุดผู้โจมตีใช้โทเค็นนี้อัปโหลดเวอร์ชันอันตรายของ Nx และแพ็กเกจที่รองรับไปยัง npm

พฤติกรรมของแพ็กเกจอันตราย

รวบรวมข้อมูลรวมถึงข้อมูลรับรองและเผยแพร่ไปยังรีโพซิทอรี Github

  • เมื่อสคริปต์ postinstall ของแพ็กเกจ Nx ที่ติดเชื้อทำงาน จะมีการรวบรวมตำแหน่งของไฟล์ข้อความต่าง ๆ และข้อมูลรับรอง
  • เข้ารหัสเป็น base64 แล้วอัปโหลดไปยังรีโพซิทอรี Github ชื่อ s1ngularity-repository
  • แม้รีโพซิทอรีจริงจะถูกลบไปแล้ว แต่ก่อนหน้านี้เคยเป็นสาธารณะ จึงต้องคำนึงถึงความเป็นไปได้ของข้อมูลรั่วไหล

การแก้ไข shell profile (.zshrc, .bashrc)

  • postinstall แทรกคำสั่ง sudo shutdown -h 0 เพื่อทำให้ระบบปิดเมื่อเปิดเทอร์มินัล และอาจทำให้รหัสผ่านรั่วไหลได้

สถานการณ์หลากหลายที่ postinstall สามารถทำงานได้

  • นอกจากการรัน npm install/yarn/pnpm install โดยตรงแล้ว ยังสามารถทำงานได้ในหลายสถานการณ์ เช่น transitive dependency, ส่วนขยาย editor, การรันสคริปต์

  • โดยเฉพาะส่วนขยาย Nx Console สำหรับ VSCode (เวอร์ชัน 18.6.30 ~ 18.65.1) อาจติดตั้ง nx@latest อัตโนมัติเมื่อเปิด editor และทำให้ postinstall ทำงาน

  • โดยพื้นฐานแล้วต้องระวังว่าอาจมีการติดตั้งโมดูล NPM ในหลายจุดแม้ไม่ได้ตั้งใจ

  • ตั้งแต่ Nx Console (18.66.0) เป็นต้นไป กระบวนการติดตั้ง latest nx ถูกลบออกแล้ว

ไทม์ไลน์การโจมตีและการตอบสนอง

21 สิงหาคม

  • 4:31 PM: PR ที่มีช่องโหว่ Bash injection ถูก merge
  • 10:48 PM: โพสต์ชี้ช่องโหว่ถูกเผยแพร่บน X (เดิมคือ Twitter)

22 สิงหาคม

  • ช่วงบ่าย: เริ่มการสอบสวนภายใน และ rollback workflow ที่มีช่องโหว่ (ยังไม่สมบูรณ์)
  • มีการนำ CodeQL มาใช้เพื่อตรวจจับช่องโหว่ลักษณะเดียวกันใน PR ต่อไป

24 สิงหาคม

  • มี commit ใน fork ของผู้โจมตีที่บ่งชี้ว่ามีการรั่วไหลของ npm token
  • มีการสร้างและลบ PR อันตราย และ publish.yml ถูกรันโดย PR นี้

26 ~ 27 สิงหาคม (เผยแพร่เวอร์ชันอันตรายและตอบสนอง)

  • มีการเผยแพร่เวอร์ชันอันตรายของ Nx และปลั๊กอินหลายเวอร์ชันไปยัง npm ตามลำดับ
  • มีการรายงาน issue ไปยังชุมชน Github/NPM
  • 10:44 PM: ฝั่ง NPM ดำเนินการลบเวอร์ชันดังกล่าวทั้งหมดและมาตรการอื่น ๆ
  • 11:57 PM: โทเค็นสำหรับเผยแพร่แพ็กเกจที่เกี่ยวข้องกับ Nx ทั้งหมดถูกทำให้ใช้งานไม่ได้
  • 27 สิงหาคม: ออกแพตช์ Nx Console, เปิดใช้ 2FA, เปลี่ยนไปใช้ Trusted Publisher และมาตรการเพิ่มเติมอื่น ๆ

มาตรการป้องกันล่วงหน้าและการตอบสนองหลังจากนี้

  • บังคับใช้ 2FA กับ maintainer ทุกคนในองค์กร nrwl
  • ใช้กลไก Trusted Publisher ห้าม deploy แบบใช้ npm token
  • แพ็กเกจในอนาคตจะเผยแพร่หลังผ่านการตรวจสอบด้วย 2FA และกลไกความน่าเชื่อถือเท่านั้น
  • จะทยอยเพิ่มมาตรการตรวจจับความเสี่ยงเพิ่มเติม การอนุมัติ PR การป้องกัน branch และขั้นตอนอื่น ๆ

บทเรียนและแผนในอนาคต

  • เป็นการตอกย้ำความสำคัญทั้งในและต่างประเทศของ supply chain, CI/CD pipeline และการจำกัดสิทธิ์ของ workflow ให้เหลือน้อยที่สุด
  • หลังทบทวนภายในทีมแล้ว มีแผนจะแชร์สิ่งที่ได้เรียนรู้กับชุมชน

ช่องทางติดต่อ

  • สามารถติดต่อได้ที่ security@nrwl.io

อ้างอิงและภาคผนวก

  • มี issue สำคัญของ Github, ไทม์ไลน์ และโพสต์ที่เกี่ยวข้อง
  • มีตัวอย่างสคริปต์ telemetry.js ภายในแพ็กเกจที่ติดเชื้อ
  • สคริปต์นี้รวบรวมพาธของไฟล์ข้อความสำคัญในระบบไฟล์เพื่อสร้าง inventory

สรุปท้ายเรื่อง

  • ควรอัปเดตและติดตั้งแพตช์ล่าสุดของ Nx และปลั๊กอินที่เกี่ยวข้อง
  • แนะนำให้เปลี่ยนข้อมูลยืนยันตัวตนสำคัญ เช่น npm, Github ทันที
  • เหตุการณ์นี้เตือนให้เห็นว่าความหละหลวมด้าน supply chain security และการจัดการสิทธิ์ของ workflow อาจนำไปสู่เหตุร้ายแรงขนาดใหญ่ได้

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น