黒い背景の右側に、網の張られた暗い立方体の開発サーバーがあり、灰色の書類が網の内側で止まる中、琥珀色に光る1枚だけが赤く縁取られた網の裂け目を抜けて外へ出ている。

開発環境・ソフトウェア部品診断・更新

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つがすべてそろう場合だとされています。

  1. 開発サーバーを--hostやserver.hostでネットワークに公開している
  2. 読まれると困るファイルが、配信を許す場所(server.fs.allow)の中にある
  3. そのファイルがserver.fs.denyのパターンに一致する

深刻度は、CVEの採番機関のGitHubの評価でCVSS 4.0の6.9です。NVDは独自の評価をまだ付けていません。米CISAの悪用が確認された脆弱性の一覧(KEV)には、11月10日に更新された一覧の時点で載っていません。アドバイザリには回避策の節がありません。

Viteの脆弱性の検証環境と確かめた範囲

検証に使ったのは、次の環境と、中身を目印の文字列だけにしたファイルです。要求はすべて同じMacの中から送りました。

検証の環境
項目内容
日時2026年11月12日 9時20分〜9時35分(日本時間)
OSmacOS 27.2(Appleシリコン)
Node.js24.15.0(npm 11.12.1)
Vite6.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で拒否されています。

クエリを付けた要求に中身が返ったか(3種類のクエリのうち返った数)
ファイル6.4.46.4.3・6.4.5・6.4.6・7.3.8・8.3.7
.env3種類とも返ったすべて拒否
server.pem・cert.crt2種類で返ったすべて拒否
.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行ずつ出ました。

6.4.5・6.4.6で拒否された要求の警告(パスとクエリは伏せ字)
The request url "<プロジェクトのフォルダ>/.env?<クエリ>" is outside of Vite serving allow list.

警告には、要求されたファイルの絶対パスと、クエリの一部が出ます。拒否の設定に一致したファイルでも、文言は配信を許す場所の外(allow list)として出ました。時刻と要求元のアドレスは、警告に含まれていません。

要求ごとに、通常の出力に行が残ったか
要求6.4.46.4.5・6.4.6
クエリを付けて中身が返った要求何も出ない該当なし(すべて拒否され、次の行に入る)
クエリを付けて拒否された要求警告が出る(.env.localなど返らなかったものだけ)1件ごとに警告が出る
クエリなしの要求警告が出る警告が出る

Vite 6.4.4では、.envの読み取りを通常の出力から見つけることはできません。警告の行から分かるのは、拒否された要求があったことまでです。

--debugを付けて起動したときの出力

--debugを付けて起動し直すと、受けた要求ごとに時刻(協定世界時)とURLの行が出ました。6.4.4で中身が返った要求も、ファイルを読み込んだことを示すvite:loadの行と、処理時間のvite:timeの行に残っています。

6.4.4を--debugで起動したときの出力(クエリは伏せ字)
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点の結果は、次のとおりです。

  1. 対象の条件:6.4.4で、配信を許す場所にある.envと証明書が、クエリを付けた要求に返りました。.env.local・.env.productionと、プロジェクトの外のファイルは返りませんでした。
  2. 修正したバージョン:6.4.5・6.4.6で、同じ要求はすべて拒否されました。6系の最新は、11月10日公表の別の脆弱性も直した6.4.6です。
  3. 出力に残る跡:6.4.4での.envの読み取りは、通常の出力に残りません。--debugで起動していれば、時刻とURLの行が残ります。どちらにも要求元のアドレスは出ません。
  4. 公開しないとき:初期設定では::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で返った要求はすべて拒否されました。

同じカテゴリーの記事

記事一覧を見る
  1. 開発環境・ソフトウェア部品

    OSSのセキュリティリスクと対策|脆弱性・配布物の改ざん・SBOMによる管理

    OSSのセキュリティリスクを、既知の脆弱性と配布物の乗っ取りに分けて解説する。Log4j・xz・Shai-Huludの事例から、間接依存まで含むSBOMの作り方、脆弱性情報と改ざん報告の照合、バージョン固定と更新の承認手順を示す。

  2. 開発環境・ソフトウェア部品

    SASTとSCAの違い・使い分け|自動検査の範囲と異常系・回帰試験

    SASTとSCAの違いを、調べる対象(自社のソースコードと取り込んだOSS部品)で説明する。両方で見つけにくい認可の誤りを補う動作試験、除外の記録、redis-pyの事故に学ぶ修正後の回帰試験とSCAの再実行も扱う。

  3. 開発環境・ソフトウェア部品

    スロップスクワッティングとは?AIが提案するパッケージの確認と対策

    スロップスクワッティングとは、生成AIが挙げた実在しないパッケージ名を第三者が先に登録する攻撃。研究で測られた誤提案の割合と実被害の確認状況、AIが提案したパッケージの確認と導入の承認、依存関係の管理を解説。

  4. 開発環境・ソフトウェア部品

    LiteLLMのサプライチェーン攻撃|1.107.0のマルウェア混入と対処

    LiteLLM1.107.0にAPIキーなどの認証情報を盗むマルウェアが混入したサプライチェーン攻撃。影響を受けるPyPI・Dockerの配布物、侵害の経緯、導入した環境の再構築と認証情報の失効・再発行を整理する。

  5. 開発環境・ソフトウェア部品

    eMudhraの秘密鍵問題|インド認証局の証明書とGo・Pythonの対応

    インドの認証局eMudhraで、中間CA8個の秘密鍵が256未満の整数で、公開された証明書から割り出せる問題が判明。経過と偽造のリスク、Go・Python・pip・certifiの更新先、社内システムでの確認手順を整理する。

  6. 開発環境・ソフトウェア部品

    Nデイ攻撃とは?ゼロデイ攻撃との違い・事例・悪用までの日数と対策

    Nデイ攻撃とゼロデイ攻撃の違いを、IPA・NIST・Googleの定義で解説。公表から悪用までの日数、Ivanti・日鉄ソリューションズ・BeyondTrustなどの事例、CISAのKEVカタログと修正期限を使った対応の優先順位を紹介する。

ブログ一覧へ