JSer.info #652 - Node.js의 node:vm 모듈은 Sandbox(신용할 수 없는 코드 실행하는 환경)으로 이용할 수 없습니다만, vm2는 node:vm
를 Wrap해서 Sandbox를 제공했던 모듈이었습니다.
vm2
이 구조적으로 수정할 수 없는 곳에서 Sandbox 취약성이 발견되었기에, 유지보수 종료 선언했습니다. 취약성에 대한 자세한 정보는 아직 공개되어있지 않습니다만, Sandbox를 깨트리는 취약성으로, PoC는 8월즈음 공개될 예정입니다.
- Discontinued · Issue #533 · patriksimek/vm2
- vm2 Sandbox Escape vulnerability · CVE-2023-37466 · GitHub Advisory Database
Sandbox 기능이 필요하다면, QuickJS를 WebAssembly로 컴파일한 quickjs-emscripten이나 V8의 Isolate를 사용한isolated-vm로 이행하길 권장하고 있습니다.
proxy-agents(PAC파일을 평가하기 위해 vm2 이용했었습니다)는 quickjs-emscripten
으로 이행했습니다.
vm2
는 node:vm
상에서 실행하는 코드에서 호스트 환경을 참조하지 못하도록 패치로 막는 접근을 취하고 있어습니다.(📝 node:vm
를 사용한 적이 있는 사람 대상 이야기. context로 넘겨 객체에 Proxy를 사용, 특정 프로퍼티를 참조하지 못하게 하기 등)
손쉽지만, 막지 못하는 구멍이 생기거나 빠지는 것이 있었던 접근법이었습니다.
이런 Sandbox에는 어떤 접근법이 있는가에 대해서는 다음 글이 흥미로울 것 입니다.
- How to build a plugin system on the web and also sleep well at night | Figma Blog
- Sandboxing and Workload Isolation · Fly
Storybook 7.1가 출시되었습니다.
Storybook상에서 온보딩 추가, Emotion 등 스타일링 라이브러리 리셋 자동화, Vue 지원 개선이 포함되어있습니다.
또한 지금까지 커뮤니티에서 개발한 Figma design addon를 코어 Addon으로 관리하기 시작했습니다.
Deno의 웹 프레임워크니 Fresh 1.3가 출시되었습니다.
비동기 루트 컴포넌트 지원, 플러그인이 라우팅이나 미들웨어를 정의할 수 있도록, _500.tsx
에러페이지 지원, ErrorBoundary 지원이 추가되었습니다.
또한, 파일 하나에서 여러 islands를 export 할 수 있게끔 되었으며, Deno.serve
지원도 추가되었습니다.
To support JSer.info
- 😘 Recommend JSer.info to your friends!
- ❤️ Support @azu on GitHub Sponsors/JSer.info Sponsors
- 🐦 Follow @jser_info on X(Twitter)
헤드라인
ECMAScript proposal updates @ 2023-07 | ECMAScript Daily
ecmascript-daily.github.io/ecmascript/2023/07/14/ecmascript-proposal-update
2023년 7월 TC39 Meeting에서 ECMAScript Proposal 스테이지 변경 정리
Discontinued · Issue #533 · patriksimek/vm2
github.com/patriksimek/vm2/issues/533
Node.js의 vm
모듈을 사용해서 Sandbox 실현했던 vm2
가 구조적으로 Sandbox Escape 취약점이 있어, 유지보수가 종료되었다는 공지.
취약성 PoC는 2023년 8월즈음에 공개하기에, isolated-vm 같은 모듈로 이행하기 권하고 있다.
- vm2 Sandbox Escape vulnerability · CVE-2023-37466 · GitHub Advisory Database
- laverdet/isolated-vm: Secure & isolated JS environments for nodejs
Release v0.18.13 · evanw/esbuild
github.com/evanw/esbuild/releases/tag/v0.18.13
esbuild v0.18.13 출시.
DEV: doAnExpensiveCheck()
같은 라벨 지정한 처리를, --drop-label
으로 삭제할 수 있도록.
Release Notes for Safari Technology Preview 174 | WebKit
webkit.org/blog/14390/release-notes-for-safari-technology-preview-174/
Safari Technology Preview 174 출시.
Canvas 자체 설정된 합산 메모리 사용량 제한 삭제.
Node v18.17.0 (LTS) | Node.js
nodejs.org/en/blog/release/v18.17.0
Node.js v18.17.0 출시.
URL 파서 Ada 2.0로 업데이트, URL.canParse
지원, Web Crypto API 사양과 호환성 향상
Release 1.0.3 · kamranahmedse/driver.js
github.com/kamranahmedse/driver.js/releases/tag/1.0.3
사이트 투어해주는 Driver.js 1.0 출시.
TypeScript으로 재작성, SVG를 페이지 상 올려 하이라이트 표시할 수 있도록 구현 변경, 문서 갱신
Storybook 7.1
storybook.js.org/blog/storybook-7-1/
Storybook 7.1 출시.
온보딩 추가, Emotion 등 스타일링 라이브러리 리셋 자동화, Vue 지원 개선.
Figma design addon 코어로 다룸
Chrome 116 beta - Chrome Developers
developer.chrome.com/en/blog/chrome-116-beta/
Chrome 116 beta 출시.
CSS Motion Path, display
와 content-visibility
에 키프레임 애니메이션 지원.
AbortSignal.any()
지원, Fetch API getReader({mode: 'byob'})
지원, Document Picture-in-Picture 지원.
Permissions Policy Origins에 *
wildcard 지정 지원.
Origin Trial으로 COOP의 restrict-properties
지원, EditContext API 지원
- Use a ReadableStream with byte source (formerly called ReadableByteStream) for .body · Issue #267 · whatwg/fetch
- ReadableStream.getReader() - Web API | MDN
- Wildcards in Permissions Policy Origins by arichiv · Pull Request #516 · w3c/webappsec-permissions-policy
- w3c/edit-context: EditContext API
Fresh 1.3 – Simplified Route Components and More
Fresh 1.3 출시.
비동기 루트 컴포넌트 지원, 플러그인이 라우팅이나 미들웨어 정의할 수 있도록, _500.tsx
으로 에러페이지 지원, ErrorBoundary 지원.
파일 하나에서 여러 islands를 export 할 수 있도록, Deno.serve
지원
- feat: support async route components by marvinhagemeister · Pull Request #1388 · denoland/fresh
- feat(server): plugins can add middlewares and routes by deer · Pull Request #1455 · denoland/fresh
Release v0.18.14 · evanw/esbuild
github.com/evanw/esbuild/releases/tag/v0.18.14
esbuild v0.18.14 출시.
CSS Modules 지원의 일환으로, global-css
loader와 local-css
loader 추가, CSS에서 :local()
와 :global()
지원.
읽을거리
URL.canParse
URL이 paser할 수 있는가 판정하는 URL.canParse
메서드에 대하여
How React 18 Improves Application Performance – Vercel
vercel.com/blog/how-react-18-improves-application-performance
React 18のTransitions, Suspense, Server Components 관련하여
Security alert: social engineering campaign targets technology industry employees - The GitHub Blog
채용담당자나 개발자 사칭, 비밀 레포지토리에 초대, 레포지토리 clone해 설치하면 감염시키는 멀웨어 삽입하는 공격이 증가하고 있다는 이야기.
マルウェア는 npm install할 때, 다운로드 및 실행되는 구조
소프트웨어, 도구, 라이브러리
coderaiser/putout: 🐊 Pluggable and configurable JavaScript Linter and code transformer with built-in ESLint and Babel support for js, jsx typescript, flow, markdown, yaml and json. Write declarative codemods in a simplest possible way 😏
Babel와 ESLint를 기반으로 한 codemod 툴킷.
빌트인 규칙으로 CommonJS to ESM 같은 다수 변환 규칙을 가지고 있으며, 이를 관리하는 구조와 플러그인을 제공한다.