
SQLite 3.53.4 - 高 - ローカル - ヒープOOB書き込み - セッションチェンジセットの同名nCol増加
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · sqlite-session-ncol
分類: ヒープOOB書き込み 到達範囲: ローカル
SQLite 3.53.4 (b09c88c14082339b66c7b7158d609a771e64ca69, SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc) を -DSQLITE_ENABLE_SESSION 付きで使用。テーブル名 t を nCol=2 で再利用した後 nCol=64 で再利用する2ブロックのチェンジセットが sessionTableInfo のリセット (sqlite3session.c:5619) をスキップし、最初のブロックの aUpdateMask を越えて memset する。sessionUpdateFind におけるサイズ12のASan WRITE。対照実験では単一の2列UPDATEのapply-rc=0。
SESSIONが有効でない限り、デフォルトのアマルガメーションではない。CVE-2026-50812 NPDは3.53.2+でクローズ済み。武器化されたRCEペイロードではない。オラクルはASan WRITEである。
| ID | CVE未割当 |
| 分類 | ヒープOOB書き込み (サイズ12のASan WRITE、RCEは実証されていない) |
| 到達範囲 | ローカル (sqlite3changeset_apply* 経由の信頼できないチェンジセット) |
| CWE | CWE-787 |
| CVSS | High: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| 製品 | SQLite Session extra (Hwaci) |
| 影響を受けるバージョン | 3.53.4 (b09c88c) を -DSQLITE_ENABLE_SESSION 付きでコンパイル |
| 認証 | ホストが信頼できないチェンジセットを適用する |
| ライセンス | GNU Affero GPL v3.0 |
| ラボ | 127.0.0.1:18900 のみ。サイズ12のASan WRITEの証拠。 |
2番目のテーブルブロックがより大きな nCol でテーブル名を再利用する、信頼できないチェンジセットを適用する。ヒープOOB書き込み。extraをコンパイルする。SESSIONが有効でない限り、デフォルトのアマルガメーションではない。
最初のブロックは pIter->nCol から aUpdateMask を割り当てる。後続の同名ブロックは sessionTableInfo のリセットをスキップし、古い割り当てを越えてより大きなマスクを memset する。ラボ: nCol=2 の後に nCol=64 のUPDATE。sessionUpdateFind におけるサイズ12のASan WRITE。対照実験では単一の2列UPDATEのapply-rc=0。
このパックをwrite-what-whereガジェットとして扱ってはならない。サイズ12のASan WRITEがオラクルである。
3.53.2のFTS5 / session-NPDの波の後、SQLite 3.53.4を20回ソースハンティングした。CVE-2026-50812はクローズ済み (sessionBindRow は欠落した値を SQLITE_CORRUPT として扱う)。Sessionは依然として SessionApplyCtx をテーブル名のみでキー付けしている。同じ名前でより大きな宣言列数を持つ2番目のブロックが aUpdateMask を再利用する。
既に記録済みの誤った道: デフォルトのアマルガメーションを対象内とみなすこと (SESSIONはオフ); CVE-2026-50812の再申請; 2列スキーマに対してnCol=64の単一テーブルブロックを送信すること (schemaMismatch、書き込みなし); 12バイトの memset からRCEを主張すること。
cd lab
./run.sh
公式の sqlite-src-3530400 zipからのASanアマルガメーション。追加コンパイルオプション -DSQLITE_ENABLE_SESSION -DSQLITE_ENABLE_PREUPDATE_HOOK。127.0.0.1:18900 でヘルスチェック。ループバックにバインドすること。
SUCCESS sqlite-session-ncol how=asan-heap-write-sessionUpdateFind write-size=12 control-apply-rc=0 SQLITE-SESSION-NCOL-WITNESS
後続のチェンジセットテーブルブロックが名前を再利用する場合、新しい名前が既に行っているのと同じ方法で SessionApplyCtx を再構築する: aUpdateMask を解放し、sessionTableInfo を再実行し、ライブスキーマより大きな nCol を拒否する。トランク 3f57024aec / branch-3.53 a1dd7123d8 (2026-08-17) はこのGAより後である。
b09c88c14082339b66c7b7158d609a771e64ca69)sessionChangesetApply :5619, sessionUpdateFind :4381-4412