Làm cách nào để khắc phục một gói npm dễ bị tấn công trong package-lock.json không được liệt kê trong package.json?


91

Github cho tôi biết rằng một phần phụ thuộc trong tệp package-lock.json của tôi rất dễ bị tấn công và lỗi thời. Vấn đề là nếu tôi làm npm installhoặc npm update, cả hai đều không cập nhật phần phụ thuộc trong tệp package-lock.json.

Tôi đã thực hiện rất nhiều googling về điều này, cũng như xóa tệp và hoàn thành npm install.

Nếu ai đó có thể giúp giải quyết vấn đề này, tôi vô cùng đánh giá cao. Gói được đề cập là Hoek, mà tôi thực sự không có trong tệp package.json của mình.

Rất cám ơn trước.


2
thử xóa bạn package-lock.json và chạy lại cài đặt
npm

1
Bạn có thể kiểm tra phần phụ thuộc của mình để tìm ra cái nào phụ thuộc vào hoek và cập nhật cái đó. (Nhưng bạn cũng có thể gặp may và sự phụ thuộc đó không có phiên bản mới hơn.)
Roland Starke

Tôi sẽ đề xuất điều tương tự của @RishikeshDhokare
xpto 21/09/18

Tôi đã làm như @RishikeshDhokare đã nói. Vấn đề giải quyết cho bản thân mình
Melih Sahin

Câu trả lời:


41

Có vẻ như Hoek là một phụ thuộc của một trong những phụ thuộc của bạn (vì vậy, một gói bạn có trong package.json đang yêu cầu nó từ package.json của chính nó).

Bạn đã thử xóa / cài đặt lại và cập nhật phần phụ thuộc dự án của mình mà không thành công, vì vậy, có vẻ như phần phụ thuộc gói được đề cập đã chỉ định phiên bản rõ ràng hoặc tối đa.

Nếu không nhìn thấy package.json cho từng phần phụ thuộc của bạn, sẽ rất khó để tư vấn thêm về cách buộc cập nhật.

Chỉnh sửa: Để giúp bạn xác định gói nào đang sử dụng phụ thuộc nào, bạn có thể sử dụng lslệnh của NPM : https://docs.npmjs.com/cli/ls

Ví dụ, để xem gói nào đang sử dụng Hoek: npm ls hoek

Chỉnh sửa 2: Như Ulysse BN đã chỉ ra một cách chính xác, nếu bạn có phiên bản NPM 6 trở lên, bạn có thể sử dụng npm audit fixđể yêu cầu NPM cố gắng sửa các lỗ hổng bảo mật cho bạn.

Chỉnh sửa 3: Những người đọc bài này cũng nên xem câu trả lời của JBallin bên dưới. Nó mở rộng trên thông tin tôi đã đưa ra ở đây và (theo ý kiến ​​của tôi) là một câu trả lời có cấu trúc hơn giải quyết câu hỏi của OP tốt hơn. Tuy nhiên - nếu bạn muốn sửa chữa nhanh chóng - câu trả lời này là đủ.


3
Tôi đang gặp sự cố tương tự với một gói khác (Growl). Tôi đoán đó là phiên bản nào đó của thứ gì đó trong tôi package.jsonphụ thuộc vào phiên bản cụ thể (dễ bị tổn thương) của Growl. Câu trả lời của bạn đang đi đúng hướng và bạn có thể chắc chắn nó nếu bạn có thể chia sẻ lệnh sẽ hiển thị (các) gói nào trong package.jsonđó tùy thuộc vào gói dễ bị tấn công hiển thị trong đó package-lock.json.
Fuhrmanator

Xem câu trả lời cập nhật. Nếu bạn cần trợ giúp thêm - hãy tạo một câu hỏi mới. :)
Alex Mulchinock


Bạn có chắc chắn rằng một câu hỏi bổ sung đã được đảm bảo? Chúng có vẻ giống như bản sao.
JBallin

@JBallin câu trả lời của tôi đã được cập nhật vài lần kể từ đó. Nó có thể không đủ điều kiện là một bản sao ban đầu.
Alex Mulchinock

24

TLDR: Cập nhật gói mẹ đang sử dụng npm i $PARENT_PKG_NAME.


Ghi chú

Khi cập nhật các phần phụ thuộc, bạn nên xem lại CHANGELOG để biết bất kỳ thay đổi vi phạm nào.

Chẩn đoán

npm auditsẽ tiết lộ cả gói dễ bị tấn công (lưu ý rằng bạn sẽ cần tệp package-lock.json cho việc này, vì vậy bạn sẽ cần chạy npm i), cũng như gói mà nó phụ thuộc (nếu có). Lưu ý rằng bạn cũng có thể sử dụng npm ls $CHILD_PKG_NAMEđể xem các phụ thuộc chính của nó.

Nỗ lực sửa chữa nhanh

npm audit fixnpm audit fix --forcerất đáng để thử, nhưng đôi khi việc khắc phục sẽ cần được thực hiện theo cách thủ công (xem bên dưới).

Sửa chữa thủ công

Nhiều khả năng gói mẹ đã sửa lỗi phụ thuộc của chúng (bạn có thể xác minh điều này bằng cách truy cập GitHub của họ và xem lại các cam kết gần đây - hoặc chỉ cần xem điều này có khắc phục được không), vì vậy bạn có thể chỉ cần chạy npm i $PARENT_PKG_NAME @$NEW_VERSIONvà nó sẽ cập nhật gói khóa .json.

Nếu cha mẹ chưa sửa lỗ hổng bảo mật

Nếu người bảo trì dường như không phản hồi, bạn có thể xem xét sử dụng một gói thay thế hoàn thành điều tương tự hoặc bẻ khóa gói và tự cập nhật lỗ hổng.

Xác minh sửa chữa

Bây giờ bạn có thể xác minh rằng nó đã hoạt động bằng cách chạy npm auditvà đảm bảo rằng không có lỗ hổng nào đang hiển thị. Cam kết các thay đổi của bạn, đẩy chúng lên GitHub, làm mới thông báo / cảnh báo của bạn và chúng sẽ biến mất!


Còn đối với trường hợp của tôi, Quick Fix không hoạt động cả hướng dẫn sử dụng trong câu trả lời này vì cha mẹ là một khuôn khổ mà trong bản cập nhật đã thay đổi hoàn toàn API và thậm chí loại bỏ thư viện đó? Điều này vì khung chính vẫn sử dụng thư viện cũ. Quả thực cái cũ vẫn còn nguyên nhưng không được cập nhật, ý tôi là làm sao tôi có thể tiếp tục?
Carmine Tambascia

1
@CarmineTambascia nếu gói bạn đang sử dụng không khắc phục được các lỗ hổng của nó (tôi sẽ mở một vấn đề / PR với hy vọng nó sẽ được khắc phục) - Tôi sẽ cân nhắc việc tạo nhánh của riêng bạn đối với (các) gói, sửa lỗi, trong nơi của gói bị ảnh hưởng.
JBallin

có cách nào để cập nhật gói con không? Trong trường hợp gói mẹ chưa được sửa các lỗ hổng?
Harshita

@Harshita xem phần có tiêu đề "Nếu cha mẹ chưa sửa lỗ hổng bảo mật"
JBallin

1
@Harshita bạn đã liên hệ với họ chưa? Họ cũng quan tâm đến việc sửa chữa những lỗ hổng bảo mật đó.
JBallin

6

Nếu bạn có npm @ 6 trở lên, bạn có thể sử dụng npm audit fixcho các vấn đề bảo mật của mình.


Có rất nhiều công cụ khác nhau và chúng không có cơ sở dữ liệu về lỗ hổng bảo mật giống nhau. Người tôi thấy đầy đủ nhất là Snytch.
Ulysse BN

2

Sử dụng:

npm tôi hoek

npm sẽ cài đặt phiên bản mới nhất của hoek và package.lock.json của bạn sẽ được cập nhật.


0

Tôi gặp sự cố này và nhận thấy rằng đó là do máy chủ mà tôi đang chạy npm có phiên bản cũ của npm trên it- package-lock.json chỉ được hỗ trợ bởi các phiên bản mới hơn.


0

bạn đã thử điều này chưa: truy cập gốc dự án của bạn, xóa package-lock.jsontệp node_modules.cachethư mục, sau đó npm install.


0

Để kiểm tra các gói npm dễ bị tấn công, chỉ cần sử dụng các lệnh sau:

npm audit

Để khắc phục các gói npm dễ bị tấn công, chỉ cần sử dụng các lệnh sau sẽ sửa được package-lock.json:

npm audit fix

0

Chỉnh sửa package-lock.jsontheo cách thủ công và cập nhật phiên bản gói dễ bị tấn công lên phiên bản đã sửa và sau đó sử dụng

npm ci

Điều đó sẽ cài đặt các gói theo package-lock.jsonbằng cách bỏ qua package.jsontrước. Sau đó sử dụng

npm audit fix

một lần nữa, để chắc chắn rằng nó có được thực hiện đúng cách hay không. Nếu nó không giúp được như vậy, thì hãy sử dụng các giải pháp đã cho khác.

Thông tin thêm tại đây:

https://blog.npmjs.org/post/171556855892/introductioning-npm-ci-for-faster-more-reliable

hoặc tại đây: https://docs.npmjs.com/auditing-package-dependencies-for-security-vulnerabilities


Một giải pháp bổ sung có thể là: npmjs.com/package/npm-check-updates
Lonely

-4

Sau khi cài đặt các phần phụ thuộc mới, hãy chạy lệnh sau để cập nhật tệp package-lock.json:

npm update package-lock.json
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.