JSer.info #652 - Node.jsのnode:vmモジュールはSandbox(信用できないコードの実行環境)としては利用できませんが、vm2はnode:vm
をラップして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のサポートなどが追加されています。
また、1ファイルから複数のislandsをexportできるように、Deno.serve
のサポートなども追加されています。
JSer.infoをサポートするには
- 😘 知り合いにJSer.infoをおすすめする
- ❤️ GitHub Sponsorsで@azuのスポンサーになる
- 🐦 X(Twitter)で@jser_infoをフォローする
JSer.info Sponsors
JSer.info SponsorsはGitHub SponsorsとしてJSer.infoを支援してくれている方々です。
ヘッドライン
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のサポート。
1ファイルから複数の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がパースできるかを判定する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など多数の変換ルールを持っているが、それらを管理するツールとプラグインの仕組みを提供する。