npm Script에 사용된 브라우저-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의 내용을 수정하거나 다른 포장의 의존 관계에서 사용해야 합니다.
이번에는 이곳에서 시간이 없다.
만약 잘못을 알거나 해결 방법이 있다면 저에게 알려주세요.
Reference
이 문제에 관하여(npm Script에 사용된 브라우저-sync의 보안 취약점을 제거하는 데 도전할 때의 노트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/sonho463/articles/aec122b31a5e86텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)