本文へ移動
English version →
重大 9.4 急ぎ度: 早めに

Vvvebの脆弱性3件、RCEの恐れ。修正版は1.0.9.0

PHP製CMSのVvvebに、管理者権限でサーバー上のコマンドを実行できる脆弱性など3件が公表され、サイトを運用する組織が対象です。1.0.9.0へ更新し、更新前に不審な.pharファイルが置かれていないかも調べてください。

CVE-2026-126380 公開 更新 執筆・監修: 佐々木 航 人が監修しながらAIを活用して執筆

同じ発表の脆弱性 3 件

この記事でまとめた分です。発表元の告知には、ほかの脆弱性も載っていることがあります。

画像は生成 AI で作成したイメージです

急ぎ度: 早めに

CVSS v3は最大9.1(v4は9.4)で、うち1件はログイン不要で悪用でき、修正版1.0.9.0がCVE記録に示されているためです。

関係があるか

Vvvebで公開サイトや社内サイトを運用している組織が対象です。Apache(mod_php)やnginx(PHP-FPM)上で動かしている場合は、サーバー上でのコマンド実行まで進みます。

製品影響を受ける版修正版
Vvveb(givanz/Vvveb、Packagistではvvveb/vvveb) 1.0.9.0より前のすべての版。テーマインストーラーの件(CVE-2026-126378)は1.0.8.6以前と記載されています。 1.0.9.0。CVE-2026-126380とCVE-2026-126377の記録に修正版として載っています。CVE-2026-126378の記録には修正版が明記されていません。

確かめ方

  1. 1導入した配布物や構築手順の記録で、Vvvebの版を確認します。1.0.9.0より前なら3件とも対象とみてください。
  2. 2Composerで導入した環境では、composer.lockにvvveb/vvvebの版が記録されています。
  3. 3Webサーバーの種類を確認します。.pharをPHPとして処理する設定(Apacheのmod_php、またはnginxのPHP-FPMで.pharをPHPハンドラーに割り当てた構成)なら、アップロードされたファイルがそのまま実行されます。
  4. 4管理画面を持つ環境では、管理者アカウントの数と、外部からそのURLに届くかどうかも確かめます。

何が起きたか

Vvvebの管理機能とログイン処理に、3件の脆弱性が見つかりました。2件はファイルアップロードの検査をすり抜けてPHPのファイルを置かれる問題で、サーバー上でコマンドを実行されます。残る1件はログイン用cookieの検証が甘く、アカウントを乗っ取られる問題です。

3件の内容は次のとおりです。

  • CVE-2026-126380: メディアのアップロードで.pharが拒否リストから漏れ、PHPのウェブシェルを置かれてコマンドを実行される(CVSS v3は9.1、CWE-434)
  • CVE-2026-126378: テーマインストーラーの検証が甘く、ZIPに含めたPHPファイルを置かれてnginx環境でコマンドを実行される(CVSS v3は9.1、CWE-434)
  • CVE-2026-126377: cookieのハッシュ比較が緩く、cookieを偽造されてアカウントを乗っ取られる(CVSS v3は8.1、CWE-287)

CVE-2026-126380は、拒否リストにある'.phar'の先頭に不要なドットが付いていたのが原因です。同じコードベースのsaveDenyExtensionsには、ドットのない'phar'が正しく入っています。バイナリ検査(MZ・ELF・シェバンの確認)も、GIFの先頭バイト列を付けたファイルを止められません。GitHubの勧告には再現手順も載っています。

攻撃の流れ

  1. 1

    権限の入手

    cookieを偽造してアカウントを乗っ取るか、管理者の認証情報を手に入れます。

  2. 2

    不正なアップロード

    メディアのアップロードやテーマのインストール機能に、PHPのファイルを送り込みます。

  3. 3

    検査のすり抜け

    拡張子の拒否リストや内容の検査をすり抜け、ファイルがサーバーに保存されます。

  4. 4

    コマンド実行

    保存されたファイルがPHPとして実行され、Webサーバーユーザーの権限で任意のコマンドが動きます。

  5. 5

    侵害の拡大

    設定ファイルの認証情報を盗まれたり、内部ネットワークへ広げられたり、バックドアを置かれたりします。

公開されている情報をもとにした流れの例です。

どう悪用されるか

CVE-2026-126380は、管理者としてログインできることが前提です。ネットワーク経由で悪用でき、利用者の操作は要りません。アップロード自体はどのサーバー構成でも通ります。ただ、置かれたファイルが実行されるのは、.pharをPHPとして処理する環境です。勧告によると、Apacheのmod_php(既定)と、.pharをPHPハンドラーに割り当てたnginxのPHP-FPMが該当します。実行後はWebサーバーユーザー(勧告ではwww-data)の権限で、そのユーザーが読み書きできるファイルをすべて操作されます。config/配下のデータベース認証情報の窃取、内部ネットワークの他サービスへの横展開、バックドアの設置にもつながります。

CVE-2026-126378も、管理者の認証情報が前提です。PHPファイルを含むZIPをテーマとしてアップロードする手口で、記録にはnginx環境でコマンドを実行されると書かれています。

CVE-2026-126377だけは、ログインが要りません。外部から総当たりでcookieの値を試し、緩い比較をすり抜けるcookieを作って、アカウントを乗っ取ります。偽造したcookieは持続するため、一度成功すると居座られやすくなります。乗っ取られたのが管理者アカウントなら、ほかの2件の前提も満たしてしまうでしょう。管理者権限が要る2件も、ログイン不要の1件と組み合わせれば現実的な脅威になるというのが筆者の見立てです。

今すぐやること

  1. 1

    Vvvebを1.0.9.0に更新する

    まず稼働中のVvvebの版を確かめ、1.0.9.0より前なら修正版に更新します。更新後は、メディアのアップロードとテーマのインストールが通常どおり動くか確認してください。

  2. 2

    不審なファイルが置かれていないか調べる

    メディアのアップロード先と、テーマの配置先に、.pharファイルや、画像に見えて中身がPHPのファイルがないか探します。見つかれば、Webサーバーのログで、そのファイルへのアクセスの有無を調べます。

    find /path/to/vvveb -type f -name '*.phar'
  3. 3

    管理者アカウントとログインの履歴を点検する

    身に覚えのない管理者アカウント、不自然な時間帯のログイン、短時間にログイン要求が大量に届いた形跡がないか見ます。疑わしければ、管理者のパスワードを変更し、セッションも無効にします。

  4. 4

    侵害の疑いがあれば認証情報を替える

    不審なファイルが実行された形跡があるなら、config/配下に書かれたデータベースの認証情報と、同じサーバー上のほかの鍵やパスワードを替えます。

  5. 5

    修正版の提供状況を配布元で確かめる

    GitHubの勧告ページには、修正版が「なし」と表示されています。CVE記録は1.0.9.0を修正版としているため、更新に使う配布物が1.0.9.0であることをVvvebのリリース情報で確認します。テーマインストーラーの件(CVE-2026-126378)の修正状況も、あわせて見ておきます。

すぐ更新できないとき

更新がすぐにできないときは、管理画面へのアクセスを、社内ネットワークや特定のIPアドレスだけに絞ります。ログイン不要の件(CVE-2026-126377)には、この制限が効きます。あわせて、アップロード先のディレクトリでPHPを実行させない設定にし、.pharをPHPハンドラーに割り当てている場合は外します。勧告が示す修正は、system/traits/media.phpの33行目で、拒否リストの'.phar'を'phar'に直すことです。ソースを書き換える場合は、この1か所の変更にとどめ、更新までのつなぎとして使います。

背景

Vvvebは、PHPで書かれたオープンソースのCMSです。管理画面からテーマの追加やメディアの管理ができ、中小規模のサイトを公開するときに使われます。管理画面は、サイトの内容だけでなく、サーバー上のファイルの置き場にも触れる入口です。その入口が、Webサーバーのユーザー権限で動く点が、今回の3件の重さにつながっています。

拒否リストでアップロードを制限する方式は、リストに載せ忘れた拡張子や、書き間違いがそのまま穴になります。今回のCVE-2026-126380も、'phar'を書くべき場所に'.phar'と書いた入力ミスが原因です。勧告は、拒否リストではなく許可リストにすることも勧めています。cookieの件(CVE-2026-126377)は、PHPの緩い比較で、0eで始まる文字列が数値として扱われる性質を突きます。ハッシュ値の検証を厳密な比較にしていない実装で、昔から知られている落とし穴です。

よくある質問

Q.1.0.9.0に更新すれば、すでに置かれたファイルも消えますか。
A.修正は、検査の穴を塞ぐものとして示されています。すでに保存された不審なファイルが更新で消えるとは書かれていません。更新後も、メディアとテーマの配置先を手で調べ、見つかったファイルは削除してください。

まだ分かっていないこと

  • GitHubの勧告ページは修正版を「なし」と表示しているのに対し、CVE記録は1.0.9.0を修正版としています。この食い違いの理由は公表されていません。
  • テーマインストーラーの件(CVE-2026-126378)で、1.0.9.0が修正版に当たるかは明記されていません。
  • 3件が実際の攻撃で悪用されたかどうかは、公表されていません。

この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。

影響パッケージ

パッケージ影響を受ける版 → 修正版
givanzVvveb
1.0.9.0 未満→ 1.0.9.0
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。

Vvveb before 1.0.9.0 contains a denylist bypass in system/traits/media.php where '.phar' is misconfigured with a leading dot, allowing authenticated administrators to upload .phar PHP files. Attackers can upload a GIF magic-byte polyglot webshell bypassing binary inspection and execute arbitrary OS commands as the web-server user.

出典: CVE.org (CVE Program・cvelistV5) NVD

参照URL

当サイトでは、アクセス解析と広告の効果測定のために Cookie を使います。株式会社Game のサイト共通の設定です。 詳しく