บางวันที่ผ่านมา ตรวจพบโค้ดที่เป็นอันตรายในการอ้างอิงของแพ็คเกจ npm ด้วยโปรแกรมติดตั้ง PureScriptซึ่งแสดงให้เห็นเมื่อพยายามติดตั้งแพ็คเกจ purescript
รหัสที่เป็นอันตราย ฝังตัวผ่านการอ้างอิง load-from-cwd-or-npm และการอ้างอิงแผนที่ความเร็ว ควรสังเกตว่าผู้เขียนดั้งเดิมของแพ็คเกจ npm ที่มีโปรแกรมติดตั้ง PureScript ซึ่งเพิ่งมีส่วนร่วมในการดูแลรักษาแพ็คเกจ npm นี้ แต่แพ็คเกจถูกส่งไปยังผู้ดูแลรายอื่นมีหน้าที่รับผิดชอบในการประกอบแพ็กเกจที่มีการอ้างอิงเหล่านี้
เกี่ยวกับปัญหา
ปัญหานี้ถูกค้นพบโดยหนึ่งในนักวิเคราะห์ใหม่ของแพ็คเกจซึ่งมีการโอนสิทธิ์การบำรุงรักษาให้หลังจากมีความขัดแย้งและการสนทนาที่น่าเกลียดกับผู้เขียนต้นฉบับของแพ็คเกจ npm purescript
ผู้ดูแลใหม่ รับผิดชอบคอมไพเลอร์ PureScript และ พวกเขายืนยันว่าแพ็คเกจ NPM ที่มีตัวติดตั้งควรได้รับการซ่อมแซมโดยผู้ดูแลเองไม่ใช่โดยนักพัฒนาภายนอกโครงการ
ผู้เขียนแพ็กเกจ npm กับโปรแกรมติดตั้ง PureScript ไม่เห็นด้วยเป็นเวลานาน แต่ก็ยอมแพ้และให้สิทธิ์เข้าถึงที่เก็บ อย่างไรก็ตามการพึ่งพาบางอย่างถูกปล่อยให้อยู่ภายใต้การควบคุมของเขา
สัปดาห์ที่แล้วมีการประกาศการเปิดตัวคอมไพเลอร์ PureScript 0.13.2 และผู้ดูแลใหม่ได้เตรียมการอัปเดตแพ็คเกจ npm ที่เกี่ยวข้องกับตัวติดตั้ง ซึ่งตรวจพบโค้ดที่เป็นอันตราย
โค้ดที่เป็นอันตรายถูกแทรกลงในแพ็คเกจ npm "load-from-cwd-or-npm" ก่อน ในเวอร์ชัน 3.0.2 และในแพ็กเกจแผนที่อัตราจากเวอร์ชัน 1.0.3 ในช่วงไม่กี่วันที่ผ่านมามีการเผยแพร่แพ็คเกจทั้งสองเวอร์ชัน
เปลี่ยนจากโพสต์ที่มาพร้อมกับผู้เขียนแพ็คเกจ npm ที่มีโปรแกรมติดตั้ง PureScript เขากล่าวว่าบัญชีของเขาถูกโจมตีโดยผู้โจมตีที่ไม่รู้จัก
อย่างไรก็ตาม ในรูปแบบปัจจุบันการกระทำของโค้ดที่เป็นอันตรายถูก จำกัด โดยการทำลายการติดตั้งแพ็คเกจเท่านั้นซึ่งเป็นรุ่นแรกของผู้ดูแลใหม่ การดำเนินการที่เป็นอันตรายถูกวนซ้ำเมื่อพยายามติดตั้งแพ็กเกจด้วยคำสั่ง "npm i -g purescript" โดยไม่ดำเนินการใด ๆ ที่เป็นอันตรายอย่างชัดเจน
มีการระบุการโจมตีสองครั้ง
ในระยะสั้น โค้ดจะทำลายตัวติดตั้ง purescript npm เพื่อป้องกันไม่ให้การดาวน์โหลดเสร็จสิ้นทำให้โปรแกรมติดตั้งหยุดทำงานระหว่างขั้นตอน "ตรวจสอบว่ามีการจัดเตรียมไบนารีไว้ล่วงหน้าสำหรับแพลตฟอร์มของคุณ"
การใช้ประโยชน์ครั้งแรกทำได้โดยการทำลายแพ็คเกจ load-from-cwd-or-npm เพื่อให้การเรียกใช้ loadFromCwdOrNpm () จะส่งคืนลำดับการส่งผ่านแทนแพ็กเกจที่คาดไว้ (ในกรณีนี้คือแพ็กเกจคำร้องขอซึ่งเราใช้เพื่อดาวน์โหลดไบนารีของคอมไพเลอร์) การทำซ้ำครั้งที่สองของการใช้ประโยชน์ทำได้โดยการแก้ไขไฟล์ต้นฉบับเพื่อป้องกันไม่ให้เรียกใช้การเรียกกลับการดาวน์โหลด
4 วันต่อมา นักพัฒนาเข้าใจที่มาของข้อบกพร่องและกำลังเตรียมที่จะปล่อยการอัปเดตเพื่อแยกการโหลดจาก cwd-o-npm จากการอ้างอิงผู้โจมตีได้ปล่อยการอัปเดตอื่น load-from-cwd-or-npm 3.0.4 โดยที่โค้ดที่เป็นอันตรายถูกลบออกไป
อย่างไรก็ตามการอัปเดตสำหรับการอ้างอิง Rate-Map 1.0.3 อื่นได้รับการเผยแพร่เกือบจะในทันทีซึ่งมีการเพิ่มการแก้ไขที่บล็อกการโทรกลับเพื่อดาวน์โหลด
นั่นคือในทั้งสองกรณีการเปลี่ยนแปลงของ load-from-cwd-or-npm เวอร์ชันใหม่และอัตราแผนที่เป็นลักษณะของการเบี่ยงเบนที่ชัดเจน
นอกจากนี้ในโค้ดที่เป็นอันตรายยังมีการตรวจสอบที่ทริกเกอร์การกระทำที่ล้มเหลวเฉพาะเมื่อติดตั้งเวอร์ชันของผู้ดูแลใหม่และไม่ปรากฏเลยเมื่อติดตั้งเวอร์ชันก่อนหน้า
นักพัฒนาแก้ไขปัญหาโดยการปล่อยการอัปเดตซึ่งการอ้างอิงที่เป็นปัญหาถูกลบออก
เพื่อป้องกันไม่ให้ติดตั้งโค้ดที่ถูกบุกรุกในระบบของผู้ใช้หลังจากพยายามติดตั้ง PureScript เวอร์ชันที่มีปัญหา
ในที่สุด ผู้พัฒนาแนะนำ สำหรับทุกคนที่มีแพ็กเกจเวอร์ชันดังกล่าวในระบบ ลบเนื้อหาของไดเร็กทอรี node_modules และไฟล์ package-lock.json จากนั้นตั้งค่า purescript เวอร์ชัน 0.13.2