วิธีแก้ไขช่องโหว่ npm ด้วยตนเอง


95

เมื่อฉันเรียกมันบอกว่าnpm installfound 33 vulnerabilities (2 low, 31 moderate) run `npm audit fix` to fix them, or `npm audit` for details

อย่างไรก็ตามnpm audit fixผลลัพธ์up to date in 11s fixed 0 of 33 vulnerabilities in 24653 scanned packages 33 vulnerabilities required manual review and could not be updated

ไม่ว่าreviewหมายความว่ามันไม่ควรจะได้รับการแก้ไขโดยผู้ใช้?

เมื่อฉันเรียกใช้npm auditจะให้รายการตารางคล้ายกับสิ่งนี้:

┌───────────────┬──────────────────────────────────────────────────────────────┐
│ Low           │ Prototype Pollution                                          │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Package       │ lodash                                                       │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Patched in    │ >=4.17.5                                                     │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Dependency of │ browser-sync [dev]                                           │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ Path          │ browser-sync > easy-extender > lodash                        │
├───────────────┼──────────────────────────────────────────────────────────────┤
│ More info     │ https://nodesecurity.io/advisories/577                       │
└───────────────┴──────────────────────────────────────────────────────────────┘

Update to version 4.17.5 or later.ในการนี้ส่วนการฟื้นฟูตัวอย่างของการเชื่อมโยงหน้ากล่าวว่า อย่างไรก็ตาม/node_modules/browser-sync/package.jsonมีบรรทัด:

"devDependencies": {
    "lodash-cli": "4.17.5",
}

และไม่มีการพึ่งพา lodash อีกต่อไป ดังนั้นมันควรเป็น v4.17.5 อยู่แล้ว ฉันตรวจสอบด้วยว่า/node_modules/lodash/lodash.jsonมีvar VERSION = '4.17.10';สายไหนบ้าง ใน/node_modules/lodash/package.jsonบรรทัดเหล่านี้:

  "_from": "lodash@^4.17.4",
  "_id": "lodash@4.17.10",

ฉันเชื่อว่าเวอร์ชันที่แสดงใน "_id" ไม่ใช่ใน "_from" ดังนั้นเวอร์ชันจึงถูกต้อง แต่ช่องโหว่ยังคงปรากฏในรายการตรวจสอบ

ฉันยังใหม่ใน node.js และข้อความเหล่านั้นทำให้ฉันสับสนมาก มีวิธีใดบ้างในการแก้ไขด้วยตนเองหรือกำจัดข้อความเหล่านั้นฉันไม่สามารถทำอะไรได้เลย


คำตอบ:


33

lodash-cliin devDependenciesไม่ส่งผลกระทบต่อวิธีการbrowser-syncทำงานในโครงการของคุณdevDependenciesจะถูกละเว้นเมื่อติดตั้งแพคเกจเป็นการอ้างอิง

สิ่งที่auditรายงานระบุeasy-extenderว่ามีการlodashพึ่งพา:

browser-sync > easy-extender > lodash        

มันขึ้นอยู่กับ Lodash 3ในขณะที่ปัญหาได้รับการแก้ไขใน Lodash 4. ปัญหาอาจได้รับการแก้ไขโดยฟอร์กeasy-extender, ปรับปรุงและติดตั้งแทนของแพคเกจจากรีจิสทรีสาธารณะ NPM แต่ไม่มีปัญหาที่แท้จริงกับการพึ่งพานี้

auditควรประเมินความสำคัญของรายงานด้วยตนเอง แม้ว่าการพึ่งพาซ้อนกันจะมีความเสี่ยงด้านความปลอดภัย แต่ก็ไม่ได้หมายความว่าจะมีการใช้คุณลักษณะที่แนะนำความเสี่ยงนี้ นอกจากนี้ยังไม่ได้หมายความว่าแม้ว่าจะใช้ แต่จะทำให้เกิดความเสี่ยงที่แท้จริงเนื่องจากวิธีการใช้งาน

browser-syncเป็นเครื่องมือในการพัฒนาที่ไม่ได้ใช้ในการผลิตมีสถานการณ์ไม่มากนักที่สามารถใช้ประโยชน์จากช่องโหว่ได้ และPrototype Pollutionไม่ใช่ช่องโหว่เลยเพียงแค่แจ้งให้ทราบว่าแพ็คเกจไม่เป็นไปตามแนวทางปฏิบัติที่ดีก็สามารถเพิกเฉยได้

โดยทั่วไปนี่คือวิธีแก้ไขช่องโหว่ที่รายงาน:

  • ตรวจสอบความสมบูรณ์ของร่างกาย
  • ในกรณีที่เป็นปัญหาจริงให้ตรวจสอบที่เก็บของแพ็กเกจที่มีช่องโหว่สำหรับปัญหาที่มีอยู่และการประชาสัมพันธ์
  • ในกรณีที่ไม่มีให้ส่งปัญหา
  • แยกที่เก็บหรือใช้ใช้ PR ที่มีอยู่เป็นการพึ่งพา gitจนกว่าจะแก้ไขในรีลีส NPM
  • ในกรณีของการอ้างอิงที่ซ้อนกันให้ทำในหลายระดับของการซ้อนกัน

เวลาส่วนใหญ่คาดว่าคุณจะไม่ก้าวหน้าไปกว่าการตรวจสอบความมีสติ

patch-packageสามารถช่วยแก้ไขการอ้างอิงที่ซ้อนกันในสถานที่ แต่จะไม่ส่งผลต่อauditรายงาน


ฉันไม่ได้ใส่ใจกับส่วน Path และมันใช้ lodash v3.10.1 จริงๆขอบคุณ แต่การซิงค์เบราว์เซอร์เป็นเพียงตัวอย่างรายการสุดท้ายของรายการ ดังนั้นฉันสามารถเพิกเฉยต่อช่องโหว่ต่ำ 2 ช่องได้ แต่ฉันสามารถเพิกเฉยต่อช่องโหว่ระดับปานกลาง 31 ช่องได้หรือไม่ ฉันคิดว่าฉันไม่ควรแก้ไขอะไรเลยnode_modulesดังนั้นการฟอร์กและการแก้ไขจึงเป็นวิธีเดียวที่จะกำจัดพวกมันได้หรือไม่? และในฐานะผู้ใช้ใหม่ฉันไม่สามารถทำเช่นนั้นได้? ฉันควรให้ผู้พัฒนาแพ็กเกจเกี่ยวกับพวกเขาหรือไม่
Jakupov

4
แต่ฉันจะเพิกเฉยต่อคนปานกลาง 31 คนได้ไหม - นี่คือสิ่งที่เกี่ยวกับ 'การตรวจสอบสติสัมปชัญญะ' โปรดใช้วิจารณญาณของคุณ ยิ่งคุณให้ความสำคัญกับสิ่งที่รายงานเหล่านี้พูดจริงมากเท่าไหร่คุณก็จะสามารถเป็นนักพัฒนาที่เก่งขึ้นและมีความปลอดภัย ฉันควรให้ผู้พัฒนาแพ็กเกจเกี่ยวกับพวกเขาหรือไม่ - คุณน่าจะ (อย่างน้อยก็ต้องหุบปากaudit) คำตอบนั้นตอบได้ ผู้คนอาศัยอยู่โดยไม่มีnpm auditอย่างใด โอกาสที่จะทำให้เกิดปัญหาด้านความปลอดภัยที่แท้จริงกับแอปนั้นต่ำมาก แต่ไม่รู้ว่าคืออะไรและใช้อย่างไรในแอปของคุณฉันไม่สามารถรับประกันได้
Estus Flask

ขอบคุณ! ใช้เวลาในการเขียนความคิดเห็นจึงไม่เห็นส่วนที่แก้ไขก่อนแสดงความคิดเห็น
Jakupov

5

หากคุณมั่นใจอย่างแท้จริงว่าต้องการข้ามการตรวจสอบคุณสามารถทำได้โดยต่อท้าย - ไม่มีการตรวจสอบ

 npm install --no-audit

2

'npm audit fix' จะเพิ่มเวอร์ชันของการอ้างอิงใน package.json ซึ่งอาจนำไปสู่การทำลายโค้ด วิธีที่ดีกว่าคือเปิด package-lock.json และอัปเดตเวอร์ชันการพึ่งพา / การพึ่งพาย่อยเป็นเวอร์ชันที่ต้องการ ดูแล package-lock.json ในที่เก็บ

บางครั้งช่องโหว่มาจากแพ็คเกจ dev ในกรณีนั้นให้เพิกเฉยต่อช่องโหว่เหล่านั้นเนื่องจากช่องโหว่เหล่านั้นไม่ได้ถูกหยิบขึ้นมาในการผลิต


-3

ปัญหาส่วนใหญ่เกิดขึ้นในระบบของฉันเกิดจากแพ็คเกจ npm ฉันเหนื่อย,

npm un npm

คุณไม่ต้องติดตั้งอีกครั้ง

เพียงเรียกใช้โปรแกรมอีกครั้ง มันได้ผลสำหรับฉัน

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