
StrapiのContent-Type Builder書き込みAPIにおけるKnex raw defaultToを介した認証済みSQLインジェクションであるCVE-2026-22599のPython PoCおよびDockerラボ。
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · CVE-2026-22599
Strapi 5.33.1 - Strapi
私は @abraxas_null です。ループバックラボ。CVE-2026-22599-Abraxas-Labs.py は lab/ に chdir して run.sh を実行します。
Content-Type Builder 書き込み API のデータベースクエリインジェクション。Yup は検証しますが、未知の column.defaultTo を除去しません。スキーマビルダーは [value, { isRaw: true }] を Knex の defaultTo(raw()) にマージします。5.33.2 / 4.26.1 で、本番環境では CTB 書き込み API を隠すことにより修正されました。
| CVE | CVE-2026-22599 · CVE.org |
| CWE | CWE-89 |
| CVSS | Critical: 9.3 CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:N/SC:H/SI:H/SA:N |
| Product | Strapi |
| Affected | 5.33.1 までのすべてのバージョン(含む) |
| Patched | 5.33.2 / 4.26.1 以降 |
| Auth | 認証済み |
| License | GNU Affero GPL v3.0 |
| Lab | 127.0.0.1 のみ |
認証済み管理者 JWT。生の DEFAULT 式を付けて /content-type-builder/content-types に POST します。その型への次の挿入で攻撃者の SQL が使用されます。ラボのオラクルは新しい labitem 行上の GHSA22599-WITNESS であり、シェルではありません。
createColumn が attribute.column を defaultTo に展開し、次に isRaw が knex raw() をサニタイズせずに呼び出すことを突き止めました。Strapi 5.33.1 を立ち上げ、管理者を登録し、コンテンツタイプを投稿し、行を挿入しました。
ラボにはすでにフェイルコントロールが組み込まれています。eval/base64/system は証拠ではなく、リバースシェルも証拠ではありません。5.33.2 は生のタプルを尊重してはなりません。
ポート 18098。Strapi 5.33.1。管理者 JWT。CTB 書き込み API に到達可能(パッチ前:本番環境でも同様)。./run.sh。
対象は 127.0.0.1:18098 のみ(またはバインドしたループバック)。
python3 CVE-2026-22599-Abraxas-Labs.py
これにより lab/ に chdir し、run.sh を実行します(compose up、admin を待機してから poc.py)。
Witness: content-manager のエントリ JSON に GHSA22599-WITNESS が含まれます。
何も学ばずに失敗する方法:
Strapi を 5.33.2 / 4.26.1 以降に更新してください。パッチ適用済みのビルドに対して CVE-2026-22599-Abraxas-Labs.py を再実行します。生の DEFAULT が到達してはなりません。
github.com/strapi/strapi/security/advisories/GHSA-3xcq-8mjw-h6mx
Abraxas Labs: abraxaslabs.tech · github.com/abraxas · @abraxas_null
GNU Affero GPL v3.0。LICENSE を参照してください。
クライアントはループバックと通信します。所有していないシステムに対して使用することは、Abraxas Labs によって認可されていません。保証はありません。