Craft CMSに認証不要のSQLインジェクション、修正版あり
Craft CMSの検索機能にある脆弱性で、データベースを書き換えられ、管理者権限を奪われる恐れがあります。MySQLまたはMariaDBで4系・5系を使うサイトは、修正版の4.18.9か5.11.2へ早めに更新してください。
急ぎ度: 至急
CVSS v3は9.8、v4は9.3と最高クラスの深刻度で、公開サイトの検索機能が入口になり、修正版もすでに公開されているため、更新を後回しにする理由がありません。
関係があるか
Craft CMSの4系または5系で、データベースにMySQLまたはMariaDBを使い、公開ページの検索にcraft.searchを使っているサイトが対象です。PostgreSQLの構成は、この脆弱性の対象外とされています。
| 製品 | 影響を受ける版 | 修正版 |
|---|---|---|
| Craft CMS 5系(craftcms/cms) | 5.0.0以上、5.11.2未満 | 5.11.2 |
| Craft CMS 4系(craftcms/cms) | 4.0.0以上、4.18.9未満 | 4.18.9 |
確かめ方
- 1導入している版は、プロジェクトのルートで
composer show craftcms/cmsを実行すると確認できます。 - 2データベースの種類は、.envやconfig/db.phpの接続設定で確認します。MySQLまたはMariaDBなら対象です。
- 3検索機能の使用は、テンプレート内を
grep -rn "craft.search" templates/で探すと分かります。複数の環境(本番・ステージング)があるときは、すべてで確認します。
何が起きたか
Craft CMSの公開ページにある検索機能に、SQLインジェクションの脆弱性があります。悪用されると、データベースの内容を読み書きされ、最終的に管理者権限まで奪われます。
検索で受け取ったattributeパラメーターが、無害化されないままSQL文に連結されることが原因です。しかもPDOがエミュレートプリペアで動いているため、後ろに続けた別のSQL文まで実行されます。弱点の種類はCWE-89です。
CVEは2026年11月9日に公表されました。GitHubのセキュリティ勧告は10月22日に公開されており、修正版の4.18.9と5.11.2もその勧告で案内されています。深刻度はCVSS v3が9.8、CVSS v4が9.3です。
攻撃の流れ
-
1
検索に要求を送る
公開ページの検索機能に、細工した文字列を含む要求が届きます。
-
2
SQL文に混入する
attributeパラメーターが無害化されないまま、SQL文の一部になります。
-
3
追加の文が動く
エミュレートプリペアの設定のせいで、後ろに続くSQL文まで実行されます。
-
4
管理者権限を得る
ユーザー情報が書き換えられ、管理者として振る舞えるようになります。
どう悪用されるか
ログインは不要で、ネットワーク越しに届く要求だけで成立します。利用者の操作も要りません。前提になるのは、データベースがMySQLまたはMariaDBであることと、公開ページの検索にcraft.searchを使っていることです。
データベースへの読み取りと書き込みの両方が可能になります。Craft CMSの権限判定は、ユーザーテーブルの管理者フラグという1つの列だけで通ってしまうため、この列を書き換えるだけで管理者になれます。任意のアカウントのパスワードハッシュを上書きすることもできます。
今すぐやること
-
1
修正版に更新する
5系は5.11.2、4系は4.18.9に更新します。更新前にデータベースのバックアップを取り、本番に入れる前にステージング環境で検索まわりの動作を確認します。
-
2
更新後の版を確認する
更新したあと、すべての環境で版が修正版以降になっていることを確認します。
composer show craftcms/cms -
3
管理者アカウントを点検する
身に覚えのない管理者や、直近で変更されたパスワードがないかを調べます。勧告の公開は10月22日なので、それ以前までさかのぼって確認します。
-
4
アクセスログを調べる
検索を含む公開ページへの要求のうち、クエリ文字列にattributeを含むものがないかを探します。見つかれば、侵害されたものとして調査します。
-
5
疑わしければ認証情報を入れ替える
更新しても、すでに書き換えられた内容は元に戻りません。不審な変更が見つかったときは、管理者のパスワードを変更し、データベースの内容も点検します。
すぐ更新できないとき
すぐに更新できないときは、公開側へのリクエストのうち、クエリ文字列のどこかに %5Battribute%5D または [attribute] を含むものを、WAFやWebサーバーの設定で遮断します。開発元が示す一時的な措置で、修正版への更新に代わるものではありません。
背景
Craft CMSは、PHPとComposerで導入するCMSで、企業の公開サイトやメディアのコンテンツ管理に使われます。管理画面でコンテンツを更新する側と、訪問者が閲覧・検索する公開側の両方を1つのアプリケーションが受け持っています。今回の入口は、後者の公開側の検索フォームです。誰でも到達できる場所にあるため、外部から直接届きます。
この脆弱性が深刻なのは、権限の判定がユーザーテーブルの管理者フラグという1列に寄っているためです。データベースへの書き込みができれば、追加の手順を挟まず管理者になれます。SQLインジェクションは古くから知られた種類ですが、ここでは検索機能の入力がそのまま管理者の乗っ取りにつながる構造になっています。
よくある質問
Q.GitHubの勧告にはCVE番号がありません。同じ件ですか。
Q.検索機能を使っていないサイトは、更新しなくてよいですか。
まだ分かっていないこと
- 実際の攻撃で悪用されたかどうかは、公表されていません。
- 侵害を見分けるための具体的な痕跡や検知方法は、公表されていません。
この記事は、取得元の公開情報をもとに、人が監修しながらAIを活用して執筆しています。執筆と監修は佐々木 航が担い、公開したあとも人が内容を確認しています。誤りに気づいたときは直し、記事の末尾に訂正の行を残します。対応を決める前に、下の原文と参照先も確認してください。
影響パッケージ
| パッケージ | 影響を受ける版 → 修正版 | |
|---|---|---|
| craftcmscms |
5.0.0 以上 5.11.2 未満→ 5.11.2 4.0.0 以上 4.18.9 未満→ 4.18.9 |
5.11.2 4.18.9 |
原文の説明 取得元が公開している説明をそのまま載せています (多くは英語)。
An unauthenticated SQL injection can occur on the front end of any site that uses craft.search to perform a search, allowing stacked query execution and enabling escalation to an administrator.
Note that this only affects MySQL/MariaDB.
Impact * SQL injection — The attribute parameter is concatenated into the query unsanitized, and because PDO runs with emulated prepares, stacked statements execute. This gives unauthenticated read and write access to the application database.
- Privilege escalation to administrator — The write primitive was used to set the admin flag on user ID 1 in the users table, confirmed by reading the value back. Craft short-circuits its permission checks on this single column, so no further changes were needed. The same primitive can overwrite any account’s password hash.
Update to the patched versions (4.18.9 and 5.11.2) to get the fix.
If you cannot update immediately, you can block front-end requests with %5Battribute%5D and [attribute] anywhere in the query string as a temporary mitigation.
出典: CVE.org (CVE Program・cvelistV5) NVD GitHub Advisory
参照URL
- advisory nvd.nist.gov
- advisory github.com
- web hckrt.com
- web github.com
- web github.com
- web github.com
- web github.com
- web packagist.org