Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
sqlite-collate-depth — SQLite 3.53.4 - 높음 - 로컬 - 크래시 - COLLATE 체인이 SQLITE_LIMIT_EXPR_DEPTH를 건너뜀 | Kitploit
도구/GitHubGitHub/abraxas/sqlite-collate-depth
Static AnalysisVulnerability AnalysisExploitationFuzzingDatabase Security
GitHubabraxas/sqlite-collate-depth

sqlite-collate-depth

SQLite 3.53.4 - 높음 - 로컬 - 크래시 - COLLATE 체인이 SQLITE_LIMIT_EXPR_DEPTH를 건너뜀

저장소 보기
187일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - sqlite-collate-depth

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  sqlite-collate-depth

분석 문서: https://abraxaslabs.tech/research/sqlite-collate-depth

sqlite-collate-depth

분류: 크래시 도달 범위: 로컬

SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) - Hwaci

COLLATE 문법 액션은 sqlite3ExprCheckHeight를 절대 호출하지 않습니다. sqlite3ExprAddCollateToken은 nHeight가 여전히 1인 TK_COLLATE 노드를 할당한 뒤, 이전 표현식을 pLeft에 매답니다. 일반 연산자는 sqlite3PExpr를 거쳐 문서화된 SQLITE_LIMIT_EXPR_DEPTH(기본값 1000)를 적용받습니다. 이 연산자는 그렇지 않습니다.

워커는 여전히 모든 pLeft에서 재귀합니다. EP_Skip은 affinity를 위한 것이지 sqlite3WalkExprNN을 위한 것이 아닙니다. 50개 노드 체인은 1을 반환합니다. 8k와 40k도 마찬가지로, 깊이 제한을 넘어섭니다. 120k는 sqlite3WalkExprNN에서 ASan 스택 오버플로를 일으킵니다(rc=134). RCE는 아닙니다.

정식 트리는 https://sqlite.org/src 입니다. GitHub sqlite/sqlite는 Fossil 미러입니다. 공식 zip은 sqlite-src-3530400입니다. 퍼블릭 도메인 라이브러리입니다. 이 팩은 AGPLv3입니다.

ID아직 CVE 없음
분류크래시 (sqlite3WalkExprNN에서 ASan 스택 오버플로; RCE는 입증되지 않음)
도달 범위로컬 (신뢰할 수 없는 SQL 또는 심어둔 VIEW)
CWECWE-674, CWE-770
CVSS높음: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
제품SQLite 3.53.4
영향받음3.53.4 (b09c88c); 이후 트렁크의 COLLATE 높이 검사에서 남은 부분
인증신뢰할 수 없는 SQL 또는 VIEW; 기본 load_extension은 꺼져 있음
라이선스GNU Affero GPL v3.0
랩127.0.0.1:18800 전용. ASan 아말감. 크래시 증거.

공격자가 할 수 있는 일

긴 후위 COLLATE BINARY 체인을 SQL로 공급하거나, 신뢰할 수 없는 .db 내부의 VIEW에 심어둡니다. 호스트 프로세스가 체인을 순회하다가 C 스택에서 죽습니다. 문서화된 표현식 깊이 제한은 이 연산자에서 절대 실행되지 않습니다.

SELECT 1 COLLATE BINARY COLLATE BINARY ...만으로 충분합니다. CREATE VIEW v AS SELECT 1 COLLATE BINARY ...로 만든 뒤 새 연결에서 SELECT * FROM v를 실행해도 같은 형태입니다. 기본 SQLITE_LIMIT_SQL_LENGTH(1e9)는 이 랩에서 8 MB 스택을 오버플로시킨 약 1.8 MB 체인을 허용합니다.

이것은 임베더 프로세스의 크래시입니다. 명령 포인터 제어가 아닙니다. load_extension은 꺼져 있습니다.

발견 경위

OpenLiteSpeed 이후 SQLite 태그 version-3.53.4를 대상으로 스무 차례 소스 헌팅을 했습니다. 최신 GA이며, 3.54.0 초안이 아닙니다. sqlite.org/security.html은 신뢰할 수 없는 SQL과 신뢰할 수 없는 .db를 일급 위협으로 취급합니다. 기본 load_extension은 꺼져 있습니다.

COLLATE에 대한 parse.y는 세 줄입니다:

expr(A) ::= expr(A) COLLATE ids(C). {
  A = sqlite3ExprAddCollateToken(pParse, A, &C, 1);
}

sqlite3ExprAddCollateToken은 pNew->pLeft = pExpr와 EP_Collate|EP_Skip를 설정합니다. sqlite3ExprAlloc은 nHeight = 1로 남겨두었습니다. sqlite3ExprCheckHeight는 없습니다. sqlite3PExpr는 다른 모든 이항 연산자에 대해 이 두 가지를 모두 수행합니다.

잘못된 접근: 8k COLLATE를 크래시로 간주한 것(1을 반환함); 40k를 크래시로 간주한 것(역시 1을 반환했으며, SQLITE_LIMIT_EXPR_DEPTH 1000을 훨씬 넘음); sqlite3WalkExprNN에서 ASan이 죽기까지 120k가 필요했던 것.

이것은 핀에 남은 열네 가지 잔여 항목 중 G1입니다. 형제 항목들은 다른 게시물에 있습니다.

실습

cd lab
./run.sh

공식 sqlite-src-3530400의 ASan 통합 빌드(태그 version-3.53.4의 대체 클론). sqlite-collate-depth를 구성합니다. 127.0.0.1:18800에서 더미 HTTP를 실행합니다. 루프백에 바인딩합니다.

SUCCESS sqlite-collate-depth how=asan-stack-overflow control=50 crash-n=120000 SQLITE-COLLATE-DEPTH-WITNESS

50 COLLATE는 1을 반환합니다. 8k와 40k도 1을 반환합니다. 120k는 rc=134로 종료되며, sqlite3WalkExprNN에서 ASan 스택 오버플로가 발생합니다. 버전 확인은 SELECT sqlite_version() / SELECT sqlite_source_id()로 수행합니다.

수정 방법

sqlite3PExpr가 이미 하는 것처럼, pLeft를 연결한 후 COLLATE 노드에 sqlite3ExprCheckHeight를 호출합니다. 자식으로부터 nHeight를 다시 계산합니다. 후위 연산자도 여전히 표현식 트리입니다.

Trunk 252c0b7bf5 (2026-10-04)는 이 GA 이후입니다.

참고 자료

  • https://sqlite.org/src 태그 version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • https://github.com/sqlite/sqlite (Fossil 미러) 트리 https://github.com/sqlite/sqlite/tree/version-3.53.4
  • 공식 zip https://www.sqlite.org/2026/sqlite-src-3530400.zip
  • https://sqlite.org/security.html
  • src/parse.y COLLATE 액션
  • src/expr.c sqlite3ExprAddCollateToken, sqlite3ExprAlloc (nHeight = 1), sqlite3PExpr / sqlite3ExprCheckHeight
  • src/walker.c sqlite3WalkExprNN
  • src/sqliteLimit.h SQLITE_MAX_EXPR_DEPTH 기본값 1000
  • CWE-674 제어되지 않는 재귀
  • CWE-770 제한 또는 스로틀링 없는 리소스 할당
도구 다운로드