Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

フィードお問い合わせプライバシー© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
sqlite-values-union — SQLite 3.53.4 - 高 - ローカル - クラッシュ - VALUES UNION ALL フォールバック クリーンアップ スタックオーバーフロー | Kitploit
ツール/GitHubGitHub/abraxas/sqlite-values-union
脆弱性分析エクスプロイトファジングバイナリ解析論文と研究データベースセキュリティラボと実践
GitHubabraxas/sqlite-values-union

sqlite-values-union

SQLite 3.53.4 - 高 - ローカル - クラッシュ - VALUES UNION ALL フォールバック クリーンアップ スタックオーバーフロー

リポジトリを見る
5日前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

Abraxas Labs - sqlite-values-union

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

sqlite-values-union

Class: Crash Reach: Local

SQLite 3.53.4 (b09c88c) - Hwaci

デフォルトの VALUES はコルーチンを使用する。WITH(またはスキーマのリロード、あるいは非定数行)は sqlite3MultiValues を UNION ALL に強制的にフォールバックさせる。SF_Values が設定されている場合、複合 SELECT の長さチェックはスキップされる(parse.y:562-567)。十分に大きな行リストは SQLITE_LIMIT_EXPR_DEPTH によって拒否され、再帰的な sqlite3ExprDeleteNN がエラークリーンアップ経路で C スタックを破壊する。

5000 行の単純な VALUES は問題ない。WITH と 1000 行の組み合わせはクリーンにエラーになる(Expression tree is too large)。WITH と 300000 行の組み合わせは sqlite3ExprDeleteNN で ASan スタックオーバーフローを引き起こす(rc=134)。RCE ではない。

IDCVE 未割当
ClassCrash(ExprDelete での ASan スタックオーバーフロー。RCE は実証されていない)
ReachLocal(信頼できない SQL、または VIEW/TRIGGER 内の VALUES)
CWECWE-674
CVSSHigh: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
ProductSQLite
Affected3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69、SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc)。後の trunk における VALUES 複合上限の残骸。
Auth攻撃者の SQL、または UNION ALL フォールバックを引き起こす仕込まれたスキーマ
LicenseGNU Affero GPL v3.0
Lab127.0.0.1:18820 のみ。ASan アマルガメーション。クラッシュの証拠。

攻撃者ができること

ホストが prepare する信頼できない SQL を投入する。巨大な VALUES リストの先頭に WITH を付けてコルーチン経路を無効化する。パースは式の深さエラーで失敗するはずである。そのツリーのクリーンアップが sqlite3ExprDeleteNN で再帰し、プロセスが死ぬ。

同じフォールバックは VALUES が VIEW または TRIGGER 内にある場合(db->init.busy)にも発生する。ホストはエンベッダである。CLI、攻撃者の SQL を prepare するアプリ、敵対的な .db を開くサービスなど。SQLite は VALUES のバイト列をコードとして評価しない。クラッシュそのものが発見事項である。

発見の経緯

github.com/sqlite/sqlite のタグ version-3.53.4 を対象に 20 回のソース探索を行った。スキップリストはすでに CVE-2026-11824、session NPD、concat_ws、LOOKASIDE、JSON UAF、WAL-reset を除外していた。デフォルトの load_extension は無効である。パーサ/VDBE の残骸が、この VALUES UNION ALL スキップと再帰的デストラクタであった。

if( (p->selFlags & (SF_MultiValue|SF_Values))==0
 && (mxSelect = pParse->db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT])>0
 && cnt>mxSelect
){
  sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
}
if( pParse->bHasWith
 || pParse->db->init.busy
 || exprListIsConstant(pParse,pRow)==0
 ...
){
  /* The co-routine method cannot be used. Fall back to UNION ALL. */
  ...
  pSelect->op = TK_ALL;
  pSelect->pPrior = pLeft;
}

clearSelect() は pPrior を反復的にたどる。sqlite3ExprDeleteNN() は依然として pRight 上で、また EP_Static が設定されている場合は pLeft 上でも再帰する。

誤った方向性: WITH を伴う 1000 行は文書化された深さ上限でクリーンにエラーとなりクラッシュしない。デストラクタの深さが 8 MiB の C スタックを破壊するには 300000 行が必要であった。単純な VALUES はコルーチン上に留まり、ネガティブコントロールとなる。

ラボ

cd lab
./run.sh

正規の 3.53.4 ソース zip、ASan sqlite3。Compose sqlite-values-union。公開 127.0.0.1:18820。ループバックにバインドすること。

SUCCESS sqlite-values-union how=with-values-union-all-fallback-exprdelete rows=300000 crash=asan-stack-overflow plain=5000 depth-error=1000 SQLITE-VALUES-UNION-WITNESS

修正

他の複合と同様に SQLITE_LIMIT_COMPOUND_SELECT を VALUES に適用する。削除時に UNION ALL チェーンを反復的にたどるか、ツリーが構築される前に EXPR_DEPTH を制限してクリーンアップが C スタックを再帰的にあふれさせないようにする。後の trunk(Bug 2026-10-04T05:34:47Z)はこの GA より後である。

参考資料

  • sqlite.org/src タグ version-3.53.4(b09c88c14082339b66c7b7158d609a771e64ca69)
  • SOURCE_ID 2026-07-24 19:02:57 bf7c7f30031888f4e796e429ab3978879485813aaca6f641c7b33e4e09459bcc
  • src/parse.y:562-567 SF_Values が設定されている場合の複合 SELECT スキップ
  • src/insert.c:681-704 sqlite3MultiValues の UNION ALL フォールバック
  • src/expr.c:1406-1430 再帰的な sqlite3ExprDeleteNN
  • sqlite.org/cves.html · sqlite.org/security.html
ツールをダウンロード