npm ผิดพลาด! ไม่พบ 404: event-stream@3.3.6


86

ฉันพยายามทำให้โครงการของฉันใช้งานได้และจู่ๆก็พบข้อผิดพลาดนี้

npm ผิดพลาด! ไม่พบ 404: event-stream@3.3.6


1
npm เลิกใช้งานแพ็คเกจนี้แล้ว ตรวจสอบgithub.com/webpack/webpack-cli/issues/698
Prayag C. Patel

1
มีการอภิปรายคำถามในเมตา: meta.stackoverflow.com/questions/378071/…
Roman Pokrovskij

เพียงแค่ลบไฟล์ package-lock.json จากนั้นการติดตั้ง npm ก็ใช้ได้ดี
Jitendra Pawar

คำตอบ:


192

tldr;

วัวศักดิ์สิทธิ์! ปรากฎว่าแพ็กเกจสตรีมเหตุการณ์มีช่องโหว่ที่ทำให้แฮกเกอร์สามารถขโมยบิตคอยน์ได้

ในการแก้ไขคุณต้องอัปเดตไฟล์ event-streamแพ็คเกจ

  1. ลบไฟล์ node_modulesโฟลเดอร์
  2. ลบไฟล์ package-lock.jsonไฟล์
  3. วิ่ง 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 หากคุณได้ติดตั้งสตรีมเหตุการณ์เวอร์ชันที่ได้รับผลกระทบเราขอแนะนำให้คุณอัปเดตเป็นเวอร์ชันที่ใหม่กว่าโดยเร็วที่สุด


7
หรือเพียงแค่ทำnpm list event-streamและอัปเดตแพ็คเกจระดับบนสุด
Phil

4
การลบแพ็กเกจล็อกดูเหมือนเป็นความคิดที่ไม่ดี โปรดแชร์ลิงก์ไปยังโพสต์บล็อก NPM
Ben Affleck

ว้าว. มีลิงค์ไปยังบทความที่คุณยกมาหรือไม่? แก้ไข - พบแล้ว: blog.npmjs.org/post/180565383195/…
friederbluemle

7

จริงๆแล้วเราไม่จำเป็นต้องอัปเดตแพ็คเกจทั้งหมดที่ขึ้นอยู่กับ event-stream@3.3.6

คุณสามารถเปิดpackage-lock.jsonลบการอ้างอิงสตรีมเหตุการณ์และการโทรทั้งหมดnpm installอีกครั้ง มันจะเร็วกว่า

หลังจากนั้นnpm shrinkwrap && mv npm-shrinwrap.json package-lock.jsonควรอัปเดตเฉพาะการอ้างอิงสตรีมเหตุการณ์ไม่ใช่ทั้งไฟล์


4

ทำตามวิธีการด้านล่าง:

  1. ลบไฟล์ node_modules และ package_lock.json

  2. รัน npm list event-stream

  3. เรียกใช้การตรวจสอบ npm
  4. เรียกใช้การตรวจสอบแคช npm
  5. เรียกใช้การติดตั้ง npm
  6. เรียกใช้ git add (เพิ่มไฟล์ที่ต้องการ)
  7. เรียกใช้คอมมิต (ยอมรับการเปลี่ยนแปลงของคุณ)
  8. เรียกใช้ git push (กดรหัสของคุณ)

3

ฉันแก้ปัญหานี้ตามขั้นตอนต่อไปนี้:

  1. เปิดบันทึกล่าสุดของคุณสำหรับข้อผิดพลาดนี้ใน /node_cache/_logs/xxxx-xx-xxx-debug.log
  2. ค้นหารากของ 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

  1. ในกรณีนี้รูทคือ nodemon ดังนั้นคุณสามารถแก้ไขได้โดย: npm install nodemon@1.18.4
  2. npm ติดตั้งสำเร็จแล้ว

3

ดังที่กล่าวไว้ในความคิดเห็นปัญหาพื้นฐานคือpackage-lock.json(ไฟล์ล็อก) มีแพ็คเกจที่เลิกใช้แล้ว การลบไฟล์ล็อกและการติดตั้งการอ้างอิงอีกครั้งช่วยแก้ปัญหาได้

วิธีที่เร็วที่สุดคือ 2 ขั้นตอนเหล่านี้:

  • ลบpackage-lock.jsonไฟล์
  • พิมพ์npm i(หรือnpm install) เพื่อติดตั้งการอ้างอิงอีกครั้ง

2

ฉันได้อัปเดต npm-run-all จาก 4.1.3 เป็น 4.1.5 ใน package.json (ลบในสตรีมเหตุการณ์ล็อกไฟล์) จากนั้นติดตั้ง npm

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.