概要
CVE-2021-23337は、Vue 2.6、Vue 2.7、およびNuxt 2が依存するlodash.template@4.5.0、深刻度の高いコマンド・インジェクションの脆弱性です。 この依存関係の脆弱性は、Vueの最新のNESリリースで対処されています。私たちは、Vueコアと関連するすべてのサブパッケージ(特にNuxtユーザが依存するvue-server-renderer)の新しいパッチバージョンをテストし、デプロイしました。
緩和
NES Nuxtのお客様が新バージョンのvue-server-rendererを採用するための手順は、NES Nuxtのドキュメントに記載されています。
このLodashの脆弱性は、Vue 3またはNuxt 3ユーザーには影響しません。しかし、まだVue 3またはNuxt 3への移行を完了していないHeroDevs NESのユーザは、この新しいパッチをインストールすることをお勧めします。
なぜなら直接依存するlodash.templateと lodash.uniqはもはやNPMで個別のパッケージとして公開されていないからです。そのため、すべてのパッケージをリビルドせずに依存関係を上書きするのは簡単ではありません。Vueの古いバージョンはLodashの新しいパッケージ構造に対応するためにリビルドする必要がありました。HeroDevs NESチームにはこれを行うインフラがありますが、多くのチームが自分たちで行うことを望まない作業です。機能的な正しさに加えて、パッチを当てたバージョンのVueを解析し、新しい依存関係が重複排除され、アプリケーションのバンドルサイズが最適化されたままであることを検証します。
NES VueおよびNuxtユーザー向け説明書
NES VueとNuxtを初めてセットアップする方法とともに、使用するための最新の手順とバージョン番号は、VueまたはNuxtのGetting Startedページから入手できます。package.jsonを更新して、新しくリリースされたバージョンを指すようにするだけです。
パッチの検証
lodash.templateパッケージがもうNuxtやVueに依存していないことを確認するには、パッケージマネージャのwhyコマンドを使います。通常、これはnpm why,yarn why,pnpm why です。
npm why lodash.template # "nuxt "や "vue "を出力してはいけない。
これで、npm whyを実行すると、lodash.template@4.5.0ではなく、より新しいバージョンのLodashが解決されていることがわかるはずだ。
npm why lodash # 成功したレスポンスを返し、^4.17.21を満たすバージョンを解決する必要がある。
このパッチへのアプローチ
NESチームでは、私たちはプロジェクトのスチュワードとして行動し、現在のユーザーのためになる、壊れない変更を行うよう努力しています。npmでlodash.templateとして公開されているパッケージはもう公開されていないので、技術的にはアップグレードすべき「最新」バージョンはありません。
しかし、Lodash 自身はよくメンテナンスされています。私たちはLodashをアップグレードすることで、現在の壊れない変更とパッチの修正をすべて受け取ることにしました。また、現在ではLodashに直接依存し、Lodashが推奨する最新の(しかし後方互換性のある!)インポート構文に従っています。
これにはいくつかの理由があった。
まず第一に、Lodashの最新バージョンではかなりの数の脆弱性にパッチが当てられている。今後、さらに増えるかもしれません。私たちは一般にメンテナンスされているパッケージを使用し、パッチアップデートを受け入れるバージョン範囲を定義しているので、RenovateやDependabotのPull Requestをマージする際に、将来のパッチを自動的に受け取ることができます。つまり、プロジェクトの Vue 依存関係を明示的に変更しなくても、将来のパッチを自動的に受け取ることができるようになります!
第二に、Vueが直接、またはトランジット的に依存しているLodashパッケージが複数あります。Lodashプロジェクトとその多くのサブパッケージ、関数、モジュールは、アプリケーション全体で一緒にビルドされ、単一のバージョンに固定されるように設計されているため、重複したコードを出荷することはありません。Lodashの最新バージョンにアップグレードすることで、ビルド・ツールが依存関係を適切にツリー・シェイクし、より基本的なユーティリティ・パッケージの一部を二重にインクルードしないようにすることができます。
概要
VueとNuxtは、Lodashの過去の多くの問題に対してパッチを適用し、将来のパッチを含むようにバージョン範囲を拡大しました。後方および前方互換性、機能的な生産パリティ、バンドル・サイズの確保には細心の注意を払いました。
package.jsonファイルを私たちがリリースしたバージョンに更新することで、VueとNuxtのアプリケーションを安全でコンプライアンスに準拠した最新の状態に保つことができます。
- Vue 2.7 NESユーザー:すべてのVueコアパッケージのバージョンが@neverendingsupport/vue2@2.7.21以上のバージョンに解決されていることを確認してください。
- Vue 2.6 NESユーザ:すべてのVueコアパッケージのバージョンが@neverendingsupport/vue2@>=2.6.19以上に解決されていることを確認してください(ただし、パッチが適用されていないバージョンのVue 2.7にアップデートしないように注意してください)。
弊社がサポートするオープンソースソフトウェアに新たな脆弱性が修正された場合、いつでもアラートを受け取ることができます。