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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
sqlite-wal-pagesize — SQLite 3.53.4 - 높음 - 로컬 - 정보 유출 - WAL/DB 페이지 크기 불일치로 인한 초기화되지 않은 페이지 꼬리 | Kitploit
도구/GitHubGitHub/abraxas/sqlite-wal-pagesize
Memory ForensicsVulnerability AnalysisExploitationInformation GatheringPapers & ResearchDatabase SecurityLabs & Practice
GitHubabraxas/sqlite-wal-pagesize

sqlite-wal-pagesize

SQLite 3.53.4 - 높음 - 로컬 - 정보 유출 - WAL/DB 페이지 크기 불일치로 인한 초기화되지 않은 페이지 꼬리

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Abraxas Labs - sqlite-wal-pagesize

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

분석 문서: https://abraxaslabs.tech/research/sqlite-wal-pagesize

sqlite-wal-pagesize

분류: 정보 유출 도달 범위: 로컬

SQLite 3.53.4(b09c88c)는 여전히 WAL 프레임을 꼬리 부분을 memset하지 않은 채 전체 pager 페이지로 짧게 읽어들인다. walIndexRecover는 [512, SQLITE_MAX_PAGE_SIZE] 범위의 2의 거듭제곱 WAL 페이지 크기를 모두 허용하며, 이를 데이터베이스 페이지 크기와 비교하지 않는다. 이어서 재활용된 pcache 슬롯은 일반 SQL을 통해 이전 힙/페이지 바이트를 반환한다.

실험 환경: 4096 페이지 WAL 모드 .db, 형제 -wal 헤더 페이지 크기 512, SELECT b FROM t가 2000바이트를 반환했다. 512바이트 프레임을 넘어선 꼬리 부분은 SQLITE-WAL-PAGESIZE-WITNESS였다. RCE는 아니다.

ID아직 CVE 없음
분류정보 유출 (SQL을 통한 초기화되지 않은 pager 꼬리)
도달 범위로컬 (신뢰할 수 없는 .db와 형제 -wal)
CWECWE-908, CWE-200
CVSS높음: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
제품SQLite (Hwaci)
영향받는 버전3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69); SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
인증없음 (피해자가 공격자 파일을 연다)
라이선스GNU Affero GPL v3.0
실험 환경127.0.0.1:18830 전용

공격자가 할 수 있는 일

WAL 모드 .db와, 헤더 페이지 크기가 데이터베이스보다 작은 유효한 2의 거듭제곱인 형제 -wal을 함께 전달한다. 복구 과정은 이를 받아들인다. sqlite3WalReadFrame은 WAL 프레임 크기만큼만 .db 크기로 할당된 pager 버퍼에 복사한다. 해당 프레임보다 큰 페이로드를 주장하는 테이블 리프 셀은 재활용된 pcache 꼬리 부분으로부터 채워진다. 해당 blob에 대한 SELECT / substr() / hex()는 같은 프로세스 내 이전 페이지들의 잔여 pager/힙 바이트를 반환한다.

반대 방향의 불일치(WAL이 pager보다 큰 경우)는 체크포인트 시 SQLITE_CORRUPT가 된다. 이 잔여물은 더 작은 WAL 읽기 경로에만 해당한다. RCE는 아니다.

발견 경위

이후 트렁크 잔여물 매트릭스 이후 3.53.4를 대상으로 스무 차례의 소스 탐색을 진행했다. Winter가 포럼에 2026-08-17T15:54:41Z로 보고했다. 트렁크 f9b4ee3695 / branch-3.53 4fde87b2a0(2026-08-16)은 이 GA(2026-07-24) 이후다. 이 핀에서 sqlite3WalReadFrame은 여전히 (nOut>sz ? sz : nOut)이며 꼬리 부분에 대한 memset이 없다.

시행착오: 초기의 리프 셀이 잘못 형성되어 SELECT가 SQLITE_CORRUPT rc=11을 반환했다. 동작하는 셀은 4096바이트 pager 페이지에서 512바이트 프레임에 걸쳐 2000바이트의 로컬 페이로드를 주장한다.

실험 환경

cd lab
./run.sh

정식 소스 zip에서 SQLite 3.53.4를 빌드합니다. sqlite-wal-pagesize를 구성합니다. 127.0.0.1:18830을 게시합니다. 48x4000바이트 witness 행으로 pcache를 프라이밍한 다음, short-read 리프에서 SELECT b FROM t를 실행합니다.

SUCCESS sqlite-wal-pagesize how=wal-shortread-pcache-tail len=2000 rootpage=2 SQLITE-WAL-PAGESIZE-WITNESS

수정 사항

복구 중에 WAL 헤더 페이지 크기를 데이터베이스 페이지 크기와 비교합니다. 두 값이 일치하지 않으면 WAL을 거부하거나 pager 페이지를 완전히 초기화합니다:

if( nOut>sz ){
  memset(pOut+sz, 0, nOut-sz);
  nOut = sz;
}

해당 헝크는 이 GA 이후 트렁크에 있습니다. 3.53.4에는 포함되어 있지 않습니다.

참고 자료

  • sqlite.org/src 태그 version-3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69)
  • src/wal.c sqlite3WalReadFrame, walIndexRecover
  • src/pager.c readDbPage
  • 포럼 2026-08-17T15:54:41Z (Winter)
도구 다운로드