
Vite 6.4.4の脆弱性を検証|.envの読み取りは開発サーバーの出力に残らない
Viteの開発サーバーには、.envや証明書のファイルを返さないための拒否の設定(server.fs.deny)があります。10月21日に公表されたCVE-2026-118662は、6.4.4でこの設定がクエリを付けた要求に効かなくなる脆弱性です。公式のアドバイザリには対象の条件と原因が書かれていますが、どのファイルが実際に返り、試されたときに開発サーバーに何が残るかまでは書かれていません。
そこで、6.4.4と前後のバージョンを手元のMacで起動し、検証用の目印だけを書いたファイルを置いて、対象の条件、修正したバージョンで直るか、出力に残る跡、公表された条件から外したときの効き目の4点を確かめました。この記事では、確かめた条件と結果、出力の形を紹介します。要求に使った文字列そのものは載せていません。
CVE-2026-118662で公表された内容
Viteのアドバイザリ(GHSA-8g5g-mxqh-grgj)によると、対象は6.4.4だけで、同じ日に出た6.4.5で直っています。6.4.4は10月6日に別の脆弱性を直すために出たバージョンで、そのとき取り込んだ変更が、組み合わせて必要な別の変更を欠いていたことが原因です。その結果、4月に7系・8系で直っていた同じ種類の問題(GHSA-v2wj-q39q-566r)が6系で起きるようになりました。
影響を受けるのは、次の3つがすべてそろう場合だとされています。
- 開発サーバーを
--hostやserver.hostでネットワークに公開している - 読まれると困るファイルが、配信を許す場所(
server.fs.allow)の中にある - そのファイルが
server.fs.denyのパターンに一致する
深刻度は、CVEの採番機関のGitHubの評価でCVSS 4.0の6.9です。NVDは独自の評価をまだ付けていません。米CISAの悪用が確認された脆弱性の一覧(KEV)には、11月10日に更新された一覧の時点で載っていません。アドバイザリには回避策の節がありません。
Viteの脆弱性の検証環境と確かめた範囲
検証に使ったのは、次の環境と、中身を目印の文字列だけにしたファイルです。要求はすべて同じMacの中から送りました。
| 項目 | 内容 |
|---|---|
| 日時 | 2026年11月12日 9時20分〜9時35分(日本時間) |
| OS | macOS 27.2(Appleシリコン) |
| Node.js | 24.15.0(npm 11.12.1) |
| Vite | 6.4.3・6.4.4・6.4.5・6.4.6・7.3.8・8.3.7。npmから取得し、インストール時のスクリプトは実行しない |
| 置いたファイル | .env、.env.local、.env.production、server.pem、cert.crt、拒否の設定に足すテキスト、拒否しないテキスト。プロジェクトの外(親フォルダ)にも.envとテキストを1つずつ |
| 送った要求 | 各ファイルに、アドバイザリが挙げる3種類のクエリを付けた要求と、クエリなしの要求 |
| 設定 | 初期設定と、server.fs.denyの初期値にテキスト1つを足した設定の2通り |
脆弱なバージョンは、--hostを付けて他の端末から接続できる状態にはしていません。6.4.4は、後で触れる11月10日公表の別の脆弱性の対象でもあるためです。Windows・Linux・コンテナでの起動、vite preview、ブラウザで開いた別のサイトから送られる要求も、今回は確かめていません。
Vite 6.4.4で中身が返ったファイル
6.4.4で中身が返ったのは、拒否の設定に入っていても、クエリを付けた要求だけでした。クエリなしの要求は、どのバージョンでもすべて403で拒否されています。
| ファイル | 6.4.4 | 6.4.3・6.4.5・6.4.6・7.3.8・8.3.7 |
|---|---|---|
| .env | 3種類とも返った | すべて拒否 |
| server.pem・cert.crt | 2種類で返った | すべて拒否 |
| .env.local・.env.production | すべて拒否 | すべて拒否 |
| 拒否の設定に足したテキスト | 2種類で返った | すべて拒否 |
| プロジェクトの外の.env・テキスト | すべて拒否 | 6.4.4だけで確かめた |
プロジェクトのルートにある.envは、初期設定のまま、3種類のクエリのどれでも中身が返りました。証明書の2つと、自分で拒否の設定に足したテキストは、3種類のうち2種類で返っています。プロジェクトの外に置いた.envが返らなかったのは、公表された2つ目の条件(配信を許す場所の中にある)のとおりです。
.env.localと.env.productionは、初期値の.env.*のパターンで拒否の対象に入っていますが、6.4.4でも返りませんでした。.envとの差が出た理由は調べておらず、ほかの名前や置き場所で同じ結果になるかも確かめていません。
Vite 6.4.5・6.4.6で同じ要求を送った結果
修正後の6.4.5と6.4.6では、6.4.4で中身が返った要求がすべて403で拒否されました。変更履歴によると、6.4.5の変更は「クエリを外した後にもserver.fsを確かめる」修正1件です。6.4.4より前の6.4.3と、7.3.8・8.3.7でも、同じ要求はすべて拒否されました。対象を6.4.4だけとするアドバイザリの記載と合っています。
6.4.5の後、11月10日(日本時間)に別の脆弱性GHSA-p4f5-76q4-ffq7が公表されました。開発サーバーを--hostなどで公開している場合に、HTTPの要求でサーバー上のコードを実行されるおそれがあるもので、深刻度はCVSS 4.0の9.1(重大)です。6系では6.4.5以前が対象で、6.4.6で直っています。11月12日の時点で、6系の最新は6.4.6です。
Viteの開発サーバーの出力に残った跡
開発サーバーの出力は、起動のしかたで残る内容が変わりました。通常の起動と、--debugを付けた起動の2通りで比べています。
通常の起動で出た警告
通常の起動では、受けた要求を1件ずつ記録する行は出ませんでした。出力に出たのは、拒否した要求の警告だけです。6.4.5・6.4.6では、クエリを付けて拒否された要求ごとに、次の形の警告が1行ずつ出ました。
The request url "<プロジェクトのフォルダ>/.env?<クエリ>" is outside of Vite serving allow list.警告には、要求されたファイルの絶対パスと、クエリの一部が出ます。拒否の設定に一致したファイルでも、文言は配信を許す場所の外(allow list)として出ました。時刻と要求元のアドレスは、警告に含まれていません。
| 要求 | 6.4.4 | 6.4.5・6.4.6 |
|---|---|---|
| クエリを付けて中身が返った要求 | 何も出ない | 該当なし(すべて拒否され、次の行に入る) |
| クエリを付けて拒否された要求 | 警告が出る(.env.localなど返らなかったものだけ) | 1件ごとに警告が出る |
| クエリなしの要求 | 警告が出る | 警告が出る |
Vite 6.4.4では、.envの読み取りを通常の出力から見つけることはできません。警告の行から分かるのは、拒否された要求があったことまでです。
--debugを付けて起動したときの出力
--debugを付けて起動し直すと、受けた要求ごとに時刻(協定世界時)とURLの行が出ました。6.4.4で中身が返った要求も、ファイルを読み込んだことを示すvite:loadの行と、処理時間のvite:timeの行に残っています。
2026-11-12T00:29:13.182Z vite:load 0.16ms [plugin] /.env?<クエリ>
2026-11-12T00:29:13.183Z vite:time 1.07ms /.env?<クエリ>要求元のアドレスは、--debugの出力にも出ませんでした。どちらの出力も、開発サーバーを起動した端末に出ます。
Viteの開発サーバーを公開しないときに届く範囲
アドバイザリには回避策の節がなく、1つ目の条件として開発サーバーの公開を挙げています。公式の設定の説明では、server.hostの初期値は'localhost'です。
初期設定で起動した6.4.4は、IPv6のループバックアドレス(::1)だけで待ち受けました。同じMacから127.0.0.1と、Macに割り当てられたLANのアドレスへ接続すると、どちらも接続を拒否されました。修正済みの6.4.6を--hostで起動したときは、すべてのアドレスで待ち受け、出力にネットワーク側のアドレスが表示されました。
公開しなければ、ほかの端末からは接続できない状態になります。ただし、同じMacの中からは、6.4.4の.envがlocalhost経由で返りました。公開をやめて外れるのはほかの端末からの接続で、脆弱性そのものは6.4.5以降に上げるまで残ります。
確かめた4点の結果
冒頭に挙げた4点の結果は、次のとおりです。
- 対象の条件:6.4.4で、配信を許す場所にある.envと証明書が、クエリを付けた要求に返りました。.env.local・.env.productionと、プロジェクトの外のファイルは返りませんでした。
- 修正したバージョン:6.4.5・6.4.6で、同じ要求はすべて拒否されました。6系の最新は、11月10日公表の別の脆弱性も直した6.4.6です。
- 出力に残る跡:6.4.4での.envの読み取りは、通常の出力に残りません。
--debugで起動していれば、時刻とURLの行が残ります。どちらにも要求元のアドレスは出ません。 - 公開しないとき:初期設定では::1だけで待ち受け、ほかのアドレスからの接続は拒否されました。同じMacの中からは返ります。
よくある質問
6.4.5に上げてあれば足りますか?
CVE-2026-118662は6.4.5で直り、手元でも6.4.5で同じ要求が拒否されました。ただし6.4.5は、11月10日公表のGHSA-p4f5-76q4-ffq7(開発サーバーを公開している場合のコード実行)の対象です。6系では6.4.6で直っています。
開発サーバーの出力に警告が無ければ、読まれていないと言えますか?
言えません。6.4.4で中身が返った要求は、通常の出力に行を残しませんでした。--debugで起動していた場合は、要求ごとに時刻とURLの行が残ります。要求元のアドレスはどちらの出力にも出ません。
.env.localも読まれますか?
手元の6.4.4では、.env.localと.env.productionは3種類のクエリのどれでも返りませんでした。.envと差が出た理由は調べていないため、名前や置き場所が変わっても同じ結果になるかは分かりません。
Vite 7・8を使っています。同じことが起きますか?
アドバイザリの対象は6.4.4だけです。手元の7.3.8・8.3.7でも、6.4.4で返った要求はすべて拒否されました。
同じカテゴリーの記事
記事一覧を見るOSSのセキュリティリスクと対策|脆弱性・配布物の改ざん・SBOMによる管理
OSSのセキュリティリスクを、既知の脆弱性と配布物の乗っ取りに分けて解説する。Log4j・xz・Shai-Huludの事例から、間接依存まで含むSBOMの作り方、脆弱性情報と改ざん報告の照合、バージョン固定と更新の承認手順を示す。
SASTとSCAの違い・使い分け|自動検査の範囲と異常系・回帰試験
SASTとSCAの違いを、調べる対象(自社のソースコードと取り込んだOSS部品)で説明する。両方で見つけにくい認可の誤りを補う動作試験、除外の記録、redis-pyの事故に学ぶ修正後の回帰試験とSCAの再実行も扱う。
スロップスクワッティングとは?AIが提案するパッケージの確認と対策
スロップスクワッティングとは、生成AIが挙げた実在しないパッケージ名を第三者が先に登録する攻撃。研究で測られた誤提案の割合と実被害の確認状況、AIが提案したパッケージの確認と導入の承認、依存関係の管理を解説。
LiteLLMのサプライチェーン攻撃|1.107.0のマルウェア混入と対処
LiteLLM1.107.0にAPIキーなどの認証情報を盗むマルウェアが混入したサプライチェーン攻撃。影響を受けるPyPI・Dockerの配布物、侵害の経緯、導入した環境の再構築と認証情報の失効・再発行を整理する。
eMudhraの秘密鍵問題|インド認証局の証明書とGo・Pythonの対応
インドの認証局eMudhraで、中間CA8個の秘密鍵が256未満の整数で、公開された証明書から割り出せる問題が判明。経過と偽造のリスク、Go・Python・pip・certifiの更新先、社内システムでの確認手順を整理する。
Nデイ攻撃とは?ゼロデイ攻撃との違い・事例・悪用までの日数と対策
Nデイ攻撃とゼロデイ攻撃の違いを、IPA・NIST・Googleの定義で解説。公表から悪用までの日数、Ivanti・日鉄ソリューションズ・BeyondTrustなどの事例、CISAのKEVカタログと修正期限を使った対応の優先順位を紹介する。





