npm Script에 사용된 브라우저-sync의 보안 취약점을 제거하는 데 도전할 때의 노트

7524 단어 npm잘못tech
웹 페이지 제작 시 scss 컴파일링과 공급업체 접두사는 npm Script를 사용합니다.선배 프리랜서가 준 물건은 스스로 dartsass에 넣었지만 나머지는 그대로 모두 받았다.브라우저-sync를 사용했고 열재장착 기능도 갖춰져 있어 편리하게 사용하고 있습니다.
하지만 한 가지 신경 쓰이는 것은 안전상의 구멍이 생겼다는 경고다.
이번에는 도전이 이 문제를 해소했을 때의 기록을 보도하고 싶다.

문제 및 상황


npm audit를 통해 상황을 확인한 후 다음과 같은 느낌이 든다


# npm audit report

async  <2.6.4
Severity: high
Prototype Pollution in async - https://github.com/advisories/GHSA-fwr7-v2mv-hh25
fix available via `npm audit fix --force`
Will install [email protected], which is a breaking change
node_modules/async
  portscanner  0.1.1 - 2.1.1
  Depends on vulnerable versions of async
  node_modules/portscanner
    browser-sync  <=0.6.2 || >=2.0.0-rc1
    Depends on vulnerable versions of portscanner
    node_modules/browser-sync

3 high severity vulnerabilities

To address all issues (including breaking changes), run:

과거에 한 일


이럴 때는 기본적으로 전화해 달라npm audit fix거나'npm audit fix-force'라고 메시지를 보내는데, 그렇게 하면 더 많은 경고가 나온다.
npm audit fix --force                                                                +[main]
npm WARN using --force Recommended protections disabled.
npm WARN audit Updating browser-sync to 1.9.2,which is a SemVer major change.
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: please upgrade to graceful-fs 4 for compatibility with current and future versions of Node.js
npm WARN deprecated [email protected]: Please use the native JSON object instead of JSON 3
npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue
npm WARN deprecated [email protected]: Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)
npm WARN deprecated [email protected]: Critical security vulnerability fixed in v0.21.1. For more information, see https://github.com/axios/axios/pull/3410

added 95 packages, removed 41 packages, changed 38 packages, and audited 461 packages in 21s

68 packages are looking for funding
  run `npm fund` for details

# npm audit report

async  <2.6.4
Severity: high
Prototype Pollution in async - https://github.com/advisories/GHSA-fwr7-v2mv-hh25
fix available via `npm audit fix --force`
Will install [email protected], which is a breaking change
node_modules/async
  portscanner  0.1.1 - 2.1.1
  Depends on vulnerable versions of async
  node_modules/portscanner
    portscanner-plus  >=0.1.0
    Depends on vulnerable versions of portscanner
    node_modules/portscanner-plus
      browser-sync  <=2.26.13
      Depends on vulnerable versions of dev-ip
      Depends on vulnerable versions of eazy-logger
      Depends on vulnerable versions of foxy
      Depends on vulnerable versions of glob-watcher
      Depends on vulnerable versions of lodash
      Depends on vulnerable versions of object-path
      Depends on vulnerable versions of opt-merger
      Depends on vulnerable versions of portscanner-plus
      Depends on vulnerable versions of resp-modifier
      Depends on vulnerable versions of socket.io
      Depends on vulnerable versions of tfunk
      node_modules/browser-sync

axios  <=0.21.1
Severity: high
Incorrect Comparison in axios - https://github.com/advisories/GHSA-cph5-m8f7-6c5x
Server-Side Request Forgery in Axios - https://github.com/advisories/GHSA-4w2v-q235-vp99
Depends on vulnerable versions of follow-redirects
fix available via `npm audit fix`
node_modules/axios
  localtunnel  1.9.0 - 2.0.1
  Depends on vulnerable versions of axios
  Depends on vulnerable versions of yargs
  node_modules/localtunnel

debug  <2.6.9
Regular Expression Denial of Service in debug - https://github.com/advisories/GHSA-gxpj-cx7g-858c
fix available via `npm audit fix --force`
Will install [email protected], which is a breaking change
node_modules/engine.io-client/node_modules/debug
node_modules/engine.io/node_modules/debug
node_modules/socket.io-adapter/node_modules/debug
node_modules/socket.io-client/node_modules/debug
node_modules/socket.io-parser/node_modules/debug
node_modules/socket.io/node_modules/debug
  engine.io  <=4.0.0-alpha.1
  Depends on vulnerable versions of debug
  node_modules/engine.io
    socket.io  <=2.4.1
    Depends on vulnerable versions of debug
    Depends on vulnerable versions of engine.io
    Depends on vulnerable versions of socket.io-parser
    node_modules/socket.io
      browser-sync  <=2.26.13
      Depends on vulnerable versions of dev-ip
      Depends on vulnerable versions of eazy-logger
      Depends on vulnerable versions of foxy
      Depends on vulnerable versions of glob-watcher
      Depends on vulnerable versions of lodash
      Depends on vulnerable versions of object-path
      Depends on vulnerable versions of opt-merger
      Depends on vulnerable versions of portscanner-plus
      Depends on vulnerable versions of resp-modifier
      Depends on vulnerable versions of socket.io
      Depends on vulnerable versions of tfunk
      node_module
・・・・以下けっこう長い😅
이후'npm audit fix-force'를 다시 진행하면 최초 상황이 된다.

이해한 일


브라우저-sync가 사용하는portscanner라는 포장 버전은 오래되어 안전하기 때문에 위험합니다!그러니까 어떻게 좀 해주세요.
나는 네가 이렇게 말한 것을 이해한다.

참고 기사를 써봤어요.


그러니까 패키지.제이슨 버전으로 지정하면 되나요?그렇게 생각하면 포장에 의존하는 포장이기 때문에 거기에 쓰여 있지 않았다.그럼 패키지.lock.제이슨을 다시 쓰는 건지, 포트스캐너를 검색하면 8군데 정도 있으니까 방법을 생각해 볼 수 있을 것 같아요.하지만 이것은 마음대로 만든 것이고, 결과적으로 npmi를 만들 때 원상태로 회복되지 않았는가.도저히 해결할 수 없다.

브라우저-sync 창고를 확인해 봤어요.


나 issue 탔어.
async portscanner vulnerability 2.1.1 #1959
issue의 마지막 문장
Could you please update portscanner up to the latest version?

매크로 패키지 덮어쓰기 가능


포트스캐너의 버전을 바꾸면 이 경고가 사라지기 때문에 의존 관계를 덮어쓸 수 없는 패키지를 검색할 수 없다는 것이다.
npm override 근처에서 검색하면 다음과 같은 기사가 발견됩니다.
How do I override nested NPM dependency versions?
package.json에 다음과 같은 기술을 추가합니다
{
"overrides": {
		"portscanner": "2.2.0"
	}
}
node_modules 삭제, 다시 npm install

결실


결론과 결과는 변하지 않았다.
하지만 패키지.lock.json을 검색해 보면, 중의 기술 중 하나만portscanner의 버전은 2.0.0이 됩니다.
다른 곳에서도 포트스캐너의 기술이 많은데 그 외에는 모두 이전 버전이다.브라우저-sync의 내용을 수정하거나 다른 포장의 의존 관계에서 사용해야 합니다.
이번에는 이곳에서 시간이 없다.
만약 잘못을 알거나 해결 방법이 있다면 저에게 알려주세요.

좋은 웹페이지 즐겨찾기