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
メモリフォレンジック脆弱性分析エクスプロイト情報収集論文と研究データベースセキュリティラボと実践
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 ではありません。

IDCVE 未割当
分類情報漏洩 (SQL 経由の未初期化 pager 末尾)
到達範囲ローカル (信頼できない .db と隣接する -wal)
CWECWE-908, CWE-200
CVSSHigh: 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 に対する 20 回のソース調査。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

SQLite 3.53.4 を正規のソース zip からビルドします。sqlite-wal-pagesize を Compose します。127.0.0.1:18830 を公開します。48x4000 バイトのウィットネス行で pcache をプライミングし、その後ショートリードリーフに対して SELECT b FROM t を実行します。

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

修正

リカバリ中にWALヘッダーのページサイズとデータベースのページサイズを比較します。両者が一致しない場合、WALを拒否するか、ページャーページを完全に初期化します:

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)
ツールをダウンロード