
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 です。Loopback ラボです。クライアントは CVE-2026-22599-Abraxas-Labs.py です。
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 式を指定して POST /content-type-builder/content-types を実行します。その型への次の挿入で攻撃者の SQL が使用されます。ラボのオラクルは、新しい labitem 行上の GHSA22599-WITNESS であり、シェルではありません。
createColumn が attribute.column を defaultTo に展開し、その後 isRaw が knex raw() をサニタイズせずに呼び出すことを突き止めました。Strapi 5.33.1 を立ち上げ、管理者を登録し、コンテンツタイプを POST し、行を挿入しました。
ラボにはすでにフェイルコントロールがあります。eval/base64/system は証拠ではなく、リバースシェルも証拠ではありません。5.33.2 は生のタプルを受け入れてはなりません。
ポート 18098。Strapi 5.33.1。管理者 JWT。CTB 書き込み API に到達可能(パッチ前:本番環境でも)。./run.sh。
対象は 127.0.0.1:18098 のみ(またはバインドしたループバック)。
cd lab
docker compose up --force-recreate
python3 ../CVE-2026-22599-Abraxas-Labs.py
証拠: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 によって許可されていません。保証はありません。