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。Schema builder 将 [value, { isRaw: true }] 合并进 Knex 的 defaultTo(raw())。已在 5.33.2 / 4.26.1 中通过在生产环境隐藏 CTB 写入 API 修复。
| CVE | CVE-2026-22599 · CVE.org |
| CWE | CWE-89 |
| CVSS | 严重: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 |
| 产品 | Strapi |
| 受影响 | 所有版本 直至 5.33.1(含) |
| 已修补 | 5.33.2 / 4.26.1 及更高版本 |
| 认证 | 已认证 |
| 许可证 | GNU Affero GPL v3.0 |
| 实验环境 | 仅 127.0.0.1 |
已认证的管理员 JWT。向 /content-type-builder/content-types 发送带有原始 DEFAULT 表达式的 POST 请求。随后对该类型的插入操作会使用攻击者的 SQL。实验环境的判定标志是新 labitem 行上的 GHSA22599-WITNESS,而非 shell。
我梳理了 createColumn 将 attribute.column 展开覆盖到 defaultTo 上,随后 isRaw 调用未经过滤的 knex raw()。搭建了 Strapi 5.33.1,注册管理员,提交内容类型,插入一行数据。
实验环境中已内置失败对照:eval/base64/system 不是判定标志;反弹 shell 不是判定标志;5.33.2 必须不认可该原始元组。
端口 18098。Strapi 5.33.1。管理员 JWT。CTB 写入 API 可达(修补前:生产环境同样可达)。./run.sh。
目标仅限 127.0.0.1:18098(或你所绑定的 loopback 地址)。
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。
客户端仅与 loopback 通信。将其用于你并不拥有的系统,未获 Abraxas Labs 授权。不提供任何担保。