
SQLite 3.53.4 - 높음 - 로컬 - 크래시 - 중첩 CTE가 nNestSel 뷰 깊이 제한을 우회함
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-cte-nest
분류: 크래시 도달 범위: 로컬
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci
sqlite3ResultSetOfSelect는 nNestSel을 증가시키고 체인이 SQLITE_LIMIT_EXPR_DEPTH에 도달하면 VIEWs and/or subqueries nested too deep 오류를 발생시킵니다. 이 핀에서 중첩 VIEW는 이미 그 상한에 도달합니다. select.c:5754(sqlite3SrcItemAttachSubquery)의 CTE 연결은 nNestSel을 증가시키지 않습니다. 그러면 selectExpander / sqlite3WalkSelect가 CTE 체인을 재귀하면서 C 스택이 소진될 때까지 진행됩니다.
작은 CTE 체인은 행을 반환합니다. N=25000에서의 중첩 FROM은 파서 Recursion limit이며 크래시하지 않습니다. .limit expr_depth 20에서의 중첩 VIEW는 too-deep 오류를 냅니다. CTE N=25000은 ASan 스택 오버플로입니다. RCE는 아닙니다.
| ID | 아직 CVE 없음 |
| 분류 | 크래시 (selectExpander의 ASan 스택 오버플로; RCE는 입증되지 않음) |
| 도달 범위 | 로컬 (신뢰할 수 없는 SQL 또는 중첩 CTE 스키마) |
| CWE | CWE-674 |
| CVSS | 높음: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H |
| 제품 | SQLite (GitHub 미러 sqlite/sqlite) |
| 영향받음 | 3.53.4 (b09c88c); 이후 트렁크 CTE nNestSel의 잔재 |
| 인증 | 신뢰할 수 없는 SQL 또는 심어진 WITH 체인 |
| 라이선스 | GNU Affero GPL v3.0 |
| 랩 | 127.0.0.1:18810 전용. ASan 아말감. 크래시 증거. |
신뢰할 수 없는 .db에서 SQL로 또는 VIEW 본문으로 긴 CTE 체인을 공급합니다:
WITH c0 AS (SELECT 1),
c1 AS (SELECT * FROM c0),
...
cN AS (SELECT * FROM cN-1)
SELECT * FROM cN;
selectExpander는 각 CTE를 중첩 FROM 서브쿼리로 순회합니다. nNestSel은 전혀 움직이지 않습니다. 호스트 프로세스가 C 스택에서 죽습니다. 중첩 VIEW는 이미 상한이 적용되어 있습니다. 중첩 FROM은 파서 재귀 한계에 도달합니다. 이 잔재는 CTE 연결 경로입니다. SQLite는 CTE 이름을 셸로 평가하지 않습니다. RCE가 아니라 크래시입니다.
https://github.com/sqlite/sqlite 태그 https://github.com/sqlite/sqlite/releases/tag/version-3.53.4에 대한 스무 번의 소스 사냥. 이 핀(3f3fb9b638 / branch-3.53 38430aa5ed, 2026-06-16)에서는 중첩 VIEW에 상한이 적용되어 있었습니다. CTE 연결에는 적용되지 않았습니다. 트렁크 f547308713(2026-10-05)은 이 GA 이후입니다.
이미 기록된 잘못된 방향: 중첩 VIEW를 크래시로 취급(too-deep 오류를 냄); 중첩 FROM N=25000을 크래시로 취급(파서 Recursion limit); 5-CTE 체인을 상한이 적용된다는 증거로 삼음.
cd lab
./run.sh
공식 sqlite-src-3530400 zip, ASan 아말감, compose sqlite-cte-nest, 게시 127.0.0.1:18810. 루프백에 바인딩하십시오. 다른 사람의 SQLite에 이걸 겨누지 마십시오.
SUCCESS sqlite-cte-nest how=asan-stack-overflow crash-n=25000 small-cte=ok nested-views=too-deep nested-from=rejected SQLITE-CTE-NEST-WITNESS
sqlite3ResultSetOfSelect가 VIEW에 대해 이미 하는 방식대로 CTE 연결 시 nNestSel을 증가시키고 SQLITE_LIMIT_EXPR_DEPTH에서 오류를 내십시오. 트렁크 f547308713(2026-10-05, "Limit the depth of recursion for CTEs using SQLITE_LIMIT_EXPR_DEPTH")이 그 부류의 패치입니다. 3.53.4에는 없습니다.
b09c88c14082339b66c7b7158d609a771e64ca69)2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bccsrc/select.c sqlite3ResultSetOfSelect (nNestSel++), CTE 연결 :5754src/walker.c sqlite3WalkSelectFrom 서브쿼리 순회selectExpander / sqlite3SelectExpand2026-10-04T04:58:58Z; 트렁크 f547308713