ฉันพยายามทำให้โครงการของฉันใช้งานได้และจู่ๆก็พบข้อผิดพลาดนี้
npm ผิดพลาด! ไม่พบ 404: event-stream@3.3.6
ฉันพยายามทำให้โครงการของฉันใช้งานได้และจู่ๆก็พบข้อผิดพลาดนี้
npm ผิดพลาด! ไม่พบ 404: event-stream@3.3.6
คำตอบ:
tldr;
วัวศักดิ์สิทธิ์! ปรากฎว่าแพ็กเกจสตรีมเหตุการณ์มีช่องโหว่ที่ทำให้แฮกเกอร์สามารถขโมยบิตคอยน์ได้
ในการแก้ไขคุณต้องอัปเดตไฟล์ event-stream
แพ็คเกจ
node_modules
โฟลเดอร์package-lock.json
ไฟล์npm install
วิ่งสิ่งนี้ควรอัปเดตแพ็กเกจของคุณเป็นเวอร์ชันที่ปลอดภัยและคุณควรจะไป
และนี่คือคำตอบอย่างเป็นทางการจากบล็อก NPM:
รายละเอียดเกี่ยวกับเหตุการณ์สตรีมเหตุการณ์นี่คือการวิเคราะห์เหตุการณ์สตรีมเหตุการณ์ที่หลาย ๆ ท่านได้รับทราบเมื่อต้นสัปดาห์นี้ npm ดำเนินการทันทีเพื่อจัดการกับข้อกังวลในการดำเนินงานและปัญหาที่ส่งผลกระทบต่อความปลอดภัยของชุมชนของเรา แต่โดยปกติแล้วเราจะทำการวิเคราะห์อย่างละเอียดมากขึ้นก่อนที่จะพูดถึงเหตุการณ์ต่างๆ - เรารู้ว่าคุณรออยู่
ในเช้าวันที่ 26 พฤศจิกายนทีมรักษาความปลอดภัยของ npm ได้รับแจ้งเกี่ยวกับแพ็คเกจที่เป็นอันตรายซึ่งเข้าสู่กระแสเหตุการณ์ซึ่งเป็นแพ็คเกจ npm ยอดนิยม หลังจากทดลองใช้มัลแวร์แล้ว npm Security จะตอบสนองโดยการลบ flatmap-stream และ event-stream@3.3.6 ออกจาก Registry และรับสิทธิ์ในการเป็นเจ้าของแพ็คเกจ event-stream เพื่อป้องกันการละเมิดเพิ่มเติม
แพคเกจที่เป็นอันตรายคือเวอร์ชัน 0.1.1 ของ flatmap-stream แพคเกจนี้ถูกเพิ่มเป็นการพึ่งพาโดยตรงของแพ็กเกจสตรีมเหตุการณ์โดยผู้ดูแลใหม่ในวันที่ 9 กันยายน 2018 ในเวอร์ชัน 3.3.6 แพ็กเกจสตรีมเหตุการณ์มีการใช้กันอย่างแพร่หลาย แต่โค้ดที่เป็นอันตรายกำหนดเป้าหมายนักพัฒนาใน บริษัท ที่มีการตั้งค่าสภาพแวดล้อมการพัฒนาที่เฉพาะเจาะจงมาก: การรันเพย์โหลดในสภาพแวดล้อมอื่น ๆ จะไม่มีผล การกำหนดเป้าหมายเฉพาะนี้หมายความว่าในที่สุดนักพัฒนาส่วนใหญ่จะไม่ได้รับผลกระทบแม้ว่าจะติดตั้งโมดูลที่เป็นอันตรายโดยไม่ถูกต้องก็ตาม
รหัสที่ฉีดกำหนดเป้าหมายไปที่แอปพลิเคชัน Copay เมื่อนักพัฒนาที่ Copay เรียกใช้หนึ่งในสคริปต์บิวด์รีลีสโค้ดผลลัพธ์จะถูกแก้ไขก่อนที่จะรวมเข้ากับแอปพลิเคชัน รหัสนี้ออกแบบมาเพื่อรวบรวมรายละเอียดบัญชีและคีย์ส่วนตัวจากบัญชีที่มียอดคงเหลือมากกว่า 100 Bitcoin หรือ 1,000 Bitcoin Cash
คำตอบเบื้องต้นของ Copay คือไม่มีการเผยแพร่บิวด์ที่มีโค้ดที่เป็นอันตรายนี้ต่อสาธารณะ แต่ตอนนี้เราได้รับการยืนยันจาก Copay แล้วว่า "โค้ดที่เป็นอันตรายถูกปรับใช้ในเวอร์ชัน 5.0.2 ถึง 5.1.0"
การโจมตีการโจมตีนี้เริ่มต้นจากการโจมตีทางวิศวกรรมสังคม ผู้โจมตีซึ่งสวมรอยเป็นผู้ดูแลได้เข้ามาดูแลโมดูลสตรีมเหตุการณ์
รายละเอียดทางเทคนิคนี่คือรายละเอียดทางเทคนิคบางส่วนที่เราทราบสำหรับผู้ที่สนใจในเรื่องนี้
รหัสที่ฉีด:
อ่านข้อมูลที่เข้ารหัส AES จากไฟล์ที่ปลอมตัวเป็นฟิกซ์เจอร์ทดสอบคว้าคำอธิบายแพ็กเกจ npm ของโมดูลที่นำเข้าโดยใช้ตัวแปรสภาพแวดล้อมที่ตั้งค่าโดยอัตโนมัติใช้คำอธิบายแพ็กเกจเป็นคีย์ในการถอดรหัสกลุ่มข้อมูลที่ดึงเข้ามาจากไฟล์ปลอมตัว ข้อมูลที่ถอดรหัสเป็นส่วนหนึ่งของโมดูลซึ่งจะถูกรวบรวมในหน่วยความจำและดำเนินการ
โมดูลนี้ดำเนินการดังต่อไปนี้:
ถอดรหัสข้อมูลอีกส่วนหนึ่งจากไฟล์ปลอมตัวเชื่อมต่อคำนำหน้าขนาดเล็กที่แสดงความคิดเห็นตั้งแต่ชิ้นที่ถอดรหัสแรกไปจนถึงจุดสิ้นสุดของชิ้นที่ถอดรหัสที่สองดำเนินการถอดรหัสย่อยเพื่อเปลี่ยนบล็อกโค้ดที่เชื่อมต่อกันจาก JS ที่ไม่ถูกต้องเป็น JS ที่ถูกต้อง (เราเชื่อว่านี่เป็น ทำเพื่อหลบเลี่ยงการตรวจจับโดยเครื่องมือวิเคราะห์แบบไดนามิก) เขียนบล็อกที่ประมวลผลแล้วของ JS ออกไปยังไฟล์ที่จัดเก็บในการอ้างอิงซึ่งจะถูกรวมเป็นแพ็กเกจโดยบิลด์สคริปต์: ส่วนของโค้ดที่เขียนออกมาเป็นโค้ดที่เป็นอันตรายจริงซึ่งตั้งใจให้เรียกใช้ บนอุปกรณ์ที่เป็นของผู้ใช้ Copay
รหัสนี้จะทำสิ่งต่อไปนี้:
ตรวจจับสภาพแวดล้อมปัจจุบัน: มือถือ / Cordova / Electron ตรวจสอบยอดคงเหลือ Bitcoin และ Bitcoin Cash ในบัญชี copay ของเหยื่อหากยอดเงินปัจจุบันมากกว่า 100 Bitcoin หรือ 1,000 Bitcoin Cash ให้รวบรวมข้อมูลบัญชีของเหยื่อให้ครบถ้วนเก็บเกี่ยวคีย์ส่วนตัวของเหยื่อ ส่งข้อมูลบัญชี / คีย์ส่วนตัวของเหยื่อไปยังบริการเรียกเก็บเงินที่ทำงานบน 111.90.151.134 สำหรับผู้ใช้แอป Copay bitpay ขอแนะนำว่า“ หากคุณใช้เวอร์ชันใด ๆ ตั้งแต่ 5.0.2 ถึง 5.1.0 คุณไม่ควรเรียกใช้หรือเปิดแอป Copay”
สำหรับผู้ใช้ npm คุณสามารถตรวจสอบว่าโปรเจ็กต์ของคุณมีการพึ่งพาที่มีช่องโหว่หรือไม่โดยเรียกใช้การตรวจสอบ npm หากคุณได้ติดตั้งสตรีมเหตุการณ์เวอร์ชันที่ได้รับผลกระทบเราขอแนะนำให้คุณอัปเดตเป็นเวอร์ชันที่ใหม่กว่าโดยเร็วที่สุด
npm list event-stream
และอัปเดตแพ็คเกจระดับบนสุด
จริงๆแล้วเราไม่จำเป็นต้องอัปเดตแพ็คเกจทั้งหมดที่ขึ้นอยู่กับ event-stream@3.3.6
คุณสามารถเปิดpackage-lock.json
ลบการอ้างอิงสตรีมเหตุการณ์และการโทรทั้งหมดnpm install
อีกครั้ง มันจะเร็วกว่า
หลังจากนั้นnpm shrinkwrap && mv npm-shrinwrap.json package-lock.json
ควรอัปเดตเฉพาะการอ้างอิงสตรีมเหตุการณ์ไม่ใช่ทั้งไฟล์
ทำตามวิธีการด้านล่าง:
ลบไฟล์ node_modules และ package_lock.json
รัน npm list event-stream
ฉันแก้ปัญหานี้ตามขั้นตอนต่อไปนี้:
event-stream
ใบไม้ตัวอย่างเช่น:
45 silly saveTree +-- nodemon@1.18.4
45 silly saveTree | +-- chokidar@2.0.4
45 silly saveTree | +-- pstree.remy@1.1.0
45 silly saveTree | | `-- ps-tree@1.2.0
45 silly saveTree | | `-- event-stream@3.3.6
45 silly saveTree | | +-- duplexer@0.1.1
45 silly saveTree | | +-- from@0.1.7
45 silly saveTree | | +-- pause-stream@0.0.11
45 silly saveTree | | `-- split@0.3.3
ดังที่กล่าวไว้ในความคิดเห็นปัญหาพื้นฐานคือpackage-lock.json
(ไฟล์ล็อก) มีแพ็คเกจที่เลิกใช้แล้ว การลบไฟล์ล็อกและการติดตั้งการอ้างอิงอีกครั้งช่วยแก้ปัญหาได้
วิธีที่เร็วที่สุดคือ 2 ขั้นตอนเหล่านี้:
package-lock.json
ไฟล์npm i
(หรือnpm install
) เพื่อติดตั้งการอ้างอิงอีกครั้งฉันได้อัปเดต npm-run-all จาก 4.1.3 เป็น 4.1.5 ใน package.json (ลบในสตรีมเหตุการณ์ล็อกไฟล์) จากนั้นติดตั้ง npm