フラットファイルCMSのGravに、編集者権限を足掛かりとしてサーバーや閲覧者へ影響を広げ得る2件の脆弱性が公開されています。対象はGrav 2.0.15未満です。アップデートだけで終わらせず、権限・変更ファイル・アクセス記録を確認する必要があります。

<style> .gv-hero,.gv-note,.gv-flow{padding:1.2rem;margin:1.5rem 0;border:1px solid #decbd3;border-radius:16px;background:#fff5f7;color:#3b1d2a}.gv-hero p:last-child,.gv-note p:last-child{margin-bottom:0}.gv-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,230px),1fr));gap:12px;margin:1.5rem 0}.gv-card{padding:1.1rem;border:1px solid #decbd3;border-radius:14px;background:#fff}.gv-card strong{display:block;color:#a52b4f;font-size:1.25rem;margin-bottom:.35rem}.gv-table{overflow-x:auto;margin:1.5rem 0}.gv-table table{border-collapse:collapse;width:100%;min-width:690px}.gv-table th,.gv-table td{padding:.8rem;border:1px solid #decbd3;text-align:left;vertical-align:top}.gv-table th{background:#f5e5eb}.gv-flow ol{padding-left:1.3rem}.gv-flow li{margin:.7rem 0}.gv-note{background:#fff4df;border-left:5px solid #bf6713}.gv-code{overflow:auto;padding:1rem;border-radius:14px;background:#17141b;color:#f5edf1;line-height:1.55}.gv-status{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:1.5rem 0}.gv-step{padding:1rem;text-align:center;border-radius:12px;background:#f5e5eb}.gv-step b{display:block;color:#a52b4f;font-size:1.3rem}@media(max-width:600px){.gv-status{grid-template-columns:1fr}} </style>

① Grav 2.0.15未満が対象。まず実行中のバージョンを確認します。

② 更新はバックアップ、検証、再配置、キャッシュ消去の順で行います。

③ 編集者アカウント、Blueprint、公開領域のPHP、ページ差分、管理者アクセスを点検します。

2件の脆弱性を整理

CVE-2026-75827Blueprintの動的データ処理が不完全な拒否リストに依存し、任意ファイル書き込みからコード実行へ至り得る問題。
CVE-2026-75828XSS検査の引用符処理をすり抜け、編集者が保存したイベントハンドラーを閲覧者のブラウザーで実行できる問題。
項目CVE-2026-75827CVE-2026-75828
影響任意ファイル書き込み、条件次第でサーバー上のコード実行保存型クロスサイトスクリプティング
攻撃の起点ページ編集またはBlueprint設定へ到達できる権限認証済み編集者
影響先CMSサーバー、保存データ、認証情報公開ページの閲覧者や管理者セッション
影響バージョンGrav 2.0.15未満
修正版2.0.15以降

CVSS v4.0は両方とも9.3と登録されています。ただし、CVE-2026-75827についてベンダーアドバイザリは編集権限を持つアカウントから到達する経路を説明しており、スコアだけで「完全な未認証RCE」と読み替えてはいけません。アカウント侵害や過剰権限と組み合わさると被害が拡大する問題として評価します。

公開日の読み方

ベンダーのGitHub Security Advisoryは2026年8月に公開され、CVEレコードは8月18日付です。一方、GitHub Advisory DatabaseのComposerパッケージ一覧では9月17日に掲載が確認されています。これは新しい攻撃が9月17日に発生したという意味ではありません。公開日、データベースへの取り込み日、パッケージ通知日を分けて管理します。

まず実行中のバージョンを確認する

コンテナイメージのタグ、ソースのタグ、Composerの解決結果が一致しているとは限りません。実際に配信しているコンテナまたはホスト内で確認します。

# Grav CLIが利用できる場合
bin/grav --version

# Composerの解決済みパッケージを確認
composer show getgrav/grav

# コンテナの場合は実行中の環境で確認
docker compose exec grav bin/grav --version

管理画面の表示だけでなく、デプロイ定義、ロックファイル、実行中コンテナの3点を照合してください。latest のような可変タグは、いつ何が動いていたかを追跡しにくいため、検証済みの固定バージョンまたはイメージダイジェストを使います。

安全な更新手順

1. 保全バックアップと証拠保全
2. 更新2.0.15以降へ
3. 検証権限・差分・ログ
  1. 公開停止を判断:不審な編集やPHPファイルがある場合は、更新より先に隔離と証拠保全を行います。
  2. バックアップ:ページ、設定、アカウント、プラグイン、ログ、データボリュームを別の保護領域へ保存します。
  3. ステージング更新:最低2.0.15、原則としてサポート中の最新安定版へ上げます。
  4. 互換性確認:Admin、Admin2、Form、テーマ、独自Blueprint、PHPの組み合わせをテストします。
  5. クリーン再配置:既存ホストへ上書きするだけでなく、信頼できるイメージから再作成します。
  6. キャッシュ消去:古いTwigやページキャッシュを消し、修正版コードで再生成します。
  7. 回帰テスト:ログイン、ページ編集、フォーム、アップロード、公開ページ、APIを確認します。
  8. 認証情報を更新:侵害の疑いがあれば、管理者パスワード、APIキー、DB・Redis・SMTP等の秘密をローテーションします。

更新後に見るべき侵害の兆候

対象確認内容異常時の行動
アカウント編集権限、直近ログイン、予期しないAPIキー無効化、セッション破棄、秘密更新
公開領域新規・変更されたPHPや実行可能ファイル隔離し、ハッシュと時刻を保全
ページ/Blueprint不審なdataディレクティブ、イベント属性、未知の差分安全な版へ戻し、作成者を追跡
ログ管理API、ページ保存、異常なPOST、未知のIP時系列化して影響範囲を判定
外部通信PHP/Webプロセスからの予期しない接続通信遮断、ホスト再構築を検討

ファイルの更新日時だけでは、正規デプロイと攻撃を区別できません。Git、SBOM、イメージダイジェスト、CIの成果物と照合します。更新前に侵害されていた場合、パッチ適用後も設置済みのバックドアは残り得ます。

権限設計で被害を狭める

  • ページ編集者へBlueprintやシステム設定の権限を与えない。
  • 管理画面をインターネットへ無制限に公開せず、SSO、MFA、接続元制限を組み合わせる。
  • Webプロセスから公開領域への書き込みを、必要なディレクトリだけに限定する。
  • 管理用APIキーを長期共有せず、用途別・期限付き・最小スコープにする。
  • コンテンツ変更をGitや監査ログへ残し、誰が何を公開したか追跡可能にする。

リスクと限界

  • この記事は攻撃成立を個別環境で判定するものではありません。
  • Grav本体が安全でも、Admin系プラグイン、Form、テーマ、独自コードには別の脆弱性があり得ます。
  • 1.7系は限定保守、1.8系は非サポートです。新規環境は2.xのサポート中リリースを使います。
  • WAFや入力フィルターは補助策であり、修正版への更新の代替ではありません。

開発者と企業への影響

CMSでは「編集者だから信頼できる」という前提を置けません。フィッシング、パスワード再利用、退職者アカウント、過剰なAPIキーから編集権限が奪われたとき、サーバー実行や管理者ブラウザーまで到達しない境界が必要です。更新管理に加え、コンテンツ権限と実行権限を分離することが再発防止になります。

今後注目すべき点

Grav 2.xの追加アドバイザリ、1.7系へのバックポート有無、Admin/Admin2やFormプラグインの対応版を継続確認します。自動更新では、最新版の取得だけでなく、固定バージョン、署名・ハッシュ、ステージングテスト、ロールバックまでを一つの手順にします。

最終確認日:2026年9月20日

参照元

Previous Post Next Post