
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입니다.
Content-Type Builder 쓰기 API 데이터베이스 쿼리 주입. Yup은 검증하지만 알 수 없는 column.defaultTo를 제거하지 않습니다. 스키마 빌더가 [value, { isRaw: true }]를 Knex defaultTo(raw())에 병합합니다. 프로덕션에서 CTB 쓰기 API를 숨기는 방식으로 5.33.2 / 4.26.1에서 수정되었습니다.
| 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(또는 바인딩한 루프백)만 대상으로 하십시오.
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에 의해 승인되지 않습니다. 보증하지 않습니다.