フラットファイル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、ページ差分、管理者アクセスを点検します。
| 項目 | CVE-2026-75827 | CVE-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 のような可変タグは、いつ何が動いていたかを追跡しにくいため、検証済みの固定バージョンまたはイメージダイジェストを使います。
| 対象 | 確認内容 | 異常時の行動 |
|---|---|---|
| アカウント | 編集権限、直近ログイン、予期しないAPIキー | 無効化、セッション破棄、秘密更新 |
| 公開領域 | 新規・変更されたPHPや実行可能ファイル | 隔離し、ハッシュと時刻を保全 |
| ページ/Blueprint | 不審なdataディレクティブ、イベント属性、未知の差分 | 安全な版へ戻し、作成者を追跡 |
| ログ | 管理API、ページ保存、異常なPOST、未知のIP | 時系列化して影響範囲を判定 |
| 外部通信 | PHP/Webプロセスからの予期しない接続 | 通信遮断、ホスト再構築を検討 |
ファイルの更新日時だけでは、正規デプロイと攻撃を区別できません。Git、SBOM、イメージダイジェスト、CIの成果物と照合します。更新前に侵害されていた場合、パッチ適用後も設置済みのバックドアは残り得ます。
アップデートは将来の悪用を防ぎますが、過去の侵害を消しません。
不審なファイル、アカウント、通信が見つかった場合は、稼働中ホストを「修理」して信用せず、証拠を保存したうえでクリーンな基盤から再構築します。
CMSでは「編集者だから信頼できる」という前提を置けません。フィッシング、パスワード再利用、退職者アカウント、過剰なAPIキーから編集権限が奪われたとき、サーバー実行や管理者ブラウザーまで到達しない境界が必要です。更新管理に加え、コンテンツ権限と実行権限を分離することが再発防止になります。
Grav 2.xの追加アドバイザリ、1.7系へのバックポート有無、Admin/Admin2やFormプラグインの対応版を継続確認します。自動更新では、最新版の取得だけでなく、固定バージョン、署名・ハッシュ、ステージングテスト、ロールバックまでを一つの手順にします。
最終確認日:2026年9月20日