npm 취약점을 수동으로 수정하는 방법은 무엇입니까?


98

내가 실행 npm install하면 found 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",

나는 "_from"이 아닌 "_id"에 표시된 버전이라고 생각하므로 버전은 정확하지만 취약점은 여전히 ​​감사 목록에 나타납니다.

나는 여전히 node.js에서 새롭고 그 메시지가 나를 많이 혼란스럽게합니다. 수동으로 수정하거나 해당 메시지를 제거 할 방법이 있습니까? 아무것도 할 수 없습니까?


답변:


35

lodash-cliin devDependenciesbrowser-sync프로젝트의 작동 방식에 영향 을 주지 않으며 devDependencies패키지가 종속성으로 설치 될 때 무시됩니다.

어떤 audit보고서는 말한다 것은 점이다 easy-extender즉이 lodash의존성을 :

browser-sync > easy-extender > lodash        

그것은 Lodash 3에 따라 문제가 분기에 의해 해결 될 수 Lodash 4. 문제가 수정되었습니다 동안, easy-extender그것을 업데이트하고 NPM 공공 레지스트리에서 패키지 대신를 설치. 그러나이 종속성에는 실제 문제가 없습니다.

audit보고서 중요도는 수동으로 평가해야합니다. 중첩 된 종속성에 보안 위험이 있다고해서 이러한 위험을 유발하는 기능이 사용되었다는 의미는 아닙니다. 이것은 또한 그것이 사용된다하더라도 그것이 사용되는 방식으로 인해 실질적인 위험을 초래한다는 것을 의미하지 않습니다.

browser-sync프로덕션에서 사용되지 않는 개발 도구이므로 취약성이 악용 될 수있는 시나리오가 많지 않습니다. 그리고 프로토 타입 오염 은 전혀 취약점이 아닙니다. 단지 패키지가 좋은 관행을 따르지 않는다는 알림 일뿐입니다. 무시해도됩니다.

일반적으로보고 된 취약점을 수정하는 방법은 다음과 같습니다.

  • 온 전성 검사 수행
  • 실제 문제인 경우 취약한 패키지의 리포지토리에서 기존 이슈 PR 확인
  • 없는 경우 문제 제출
  • 리포지토리를 포크하거나 NPM 릴리스에서 수정 될 때까지 기존 PR을 git 종속성 으로 사용
  • 중첩 된 종속성의 경우 여러 수준의 중첩에서이 작업을 수행하십시오.

대부분의 경우 온 전성 검사를 넘어서지 않을 것으로 예상됩니다.

patch-package중첩 된 종속성을 제자리에서 패치하는 데 도움이 될 수 있지만 audit보고서 에는 영향을주지 않습니다 .


나는 Path 섹션에주의를 기울이지 않았고 실제로 lodash v3.10.1을 사용합니다. 감사합니다. 그러나 브라우저 동기화는 목록의 마지막 예일뿐입니다. 그래서 2 개의 낮은 취약점은 무시할 수 있지만 31 개의 보통은 무시할 수 있습니까? 나는에서 아무것도 수정하지 말아야한다고 생각하는데 node_modules, 포크와 고정은 그것들을 제거하는 유일한 방법입니까? 그리고 새로운 사용자로서 나는 그것을 할 능력이 없습니까? 그들에 대해 패키지 개발자를 발행해야합니까?
Jakupov

4
하지만 보통 31 개는 무시해도 되나요? -이게 '정신 검사'에 관한 것입니다. 판단을 사용하세요. 이러한 보고서의 실제 내용에 더 많은 관심을 기울일수록 보안 측면에서 더 나은 개발자가 될 수 있습니다. 그들에 대해 패키지 개발자를 발행해야합니까? -당신은 (적어도 닥쳐 야 audit할 것입니다), 대답은 그에 대한 대답입니다. 사람들은 npm audit어떻게 든 없이 살았습니다 . 그들이 앱에 실제 보안 문제를 일으킬 가능성은 매우 낮지 만 그것이 무엇인지, 앱에서 어떻게 사용되는지 알지 못하면 보장 할 수 없습니다.
Estus Flask

감사! 댓글을 쓰는 데 시간이 걸렸기 때문에 댓글을 달기 전에 수정 된 부분을 보지 못했습니다.
Jakupov

6

감사를 건너 뛰고 싶은 것이 확실하다면 --no-audit를 추가하여 그렇게 할 수 있습니다.

 npm install --no-audit

3

'npm audit fix'는 package.json의 종속성 버전을 증가시켜 코드가 손상 될 수 있습니다. 따라서 더 나은 방법은 package-lock.json을 열고 종속성 / 종속성 버전을 필요한 버전으로 업데이트하는 것입니다. 저장소에 package-lock.json을 유지하십시오.

때때로 취약점은 개발 패키지에서 비롯됩니다.이 경우 프로덕션에서 발견되지 않으므로 해당 취약점을 무시합니다.


-3

내 시스템에서 발생한 대부분의 문제는 npm 패키지 때문이었습니다. 나는 시도했다.

npm un npm

다시 설치할 필요가 없습니다.

프로그램을 다시 실행하십시오. 그것은 나를 위해 일했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.