Critical Flaw in ADOdb SQLite3 Driver Allows Arbitrary SQL Execution
2025/08/05 gbhackers — PHP ユーザーに人気を博す ADOdb で発見された、セキュリティ脆弱性 CVE-2025-54119 により、SQLite3 データベースを使用するアプリケーションに深刻な影響が及ぶとされる。このデータベース抽象化ライブラリの脆弱性を悪用する攻撃者は、任意の SQL ステートメントを実行する可能性を手にするため、ADOdb バージョン 5.22.9 以下に深刻なリスクが生じている。

脆弱性の詳細と影響
この問題は、ADOdb の SQLite3 ドライバにおけるクエリ・パラメータの不適切なエスケープに起因しており、特に metaColumns()/metaForeignKeys()/metaIndexes() の3つのメタデータ取得メソッドが影響を受ける。これらのメソッドを呼び出す際に、細工されたテーブル名を指定することで、攻撃者は悪意の SQL コードを注入し、基盤となる SQLite3 データベース上で任意のクエリを実行できる。
| Field | Details |
| CVE ID | CVE-2025-54119 |
| Vulnerability Type | SQL Injection in ADOdb sqlite3 driver |
| Severity | Critical |
| CVSS v3.1 Score | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L |
この脆弱性は、スイスを拠点とする ADOdb プロジェクトの主要メンテナであり、Mantis Bug Tracker など複数の PHP プロジェクトにも関与する、dregad により公開されたものだ。彼によるセキュリティ・アドバイザリは、2日前に発行されており、その緊急性を強調するものとなっている。
この脆弱性の CVSS v3.1 評価は Critical とされている。攻撃ベクターはネットワーク・ベースでの複雑性は低く、特権やユーザー操作も不要である。また、スコープは Changed に分類されており、この脆弱性の影響は、当該コンポーネントに留まらず、他のリソースにも及ぶ可能性がある。機密性/完全性への影響は高く、可用性への影響は比較的低い。
CVE-2025-54119 の根本的な原因は、影響を受けるメタデータ・メソッドに渡されるテーブル名の処理において、入力値に対する適切なサニタイズ処理が施されていない点にある。この脆弱性は CWE-89 に分類され、典型的な SQL インジェクションの事例となっている。
悪用された場合の最悪のシナリオは、ユーザーが提供した入力が検証されずに、ダイレクトにメソッドに渡されるケースである。それにより攻撃者は、機密データの閲覧/データベースの改竄/管理操作の実行などを達成するとされる。
この脆弱性の影響が及ぶ範囲は、ユーザー入力に基づいてデータベース・メタデータのクエリを動的に生成するアプリケーションとなる。このような実装は、データベース管理ツール/コンテンツ管理システム/データベース・イントロスペクション機能 (スキーマ表示/構造検査ツール) を提供する、カスタム・アプリケーションなどに共通する典型的なパターンである。
ADOdb 開発チームは、この脆弱性に対処するため、コミット 5b8bd52cdcffefb4ecded1b399c98cfa516afe03 を通じて、修正バージョン 5.22.10 をリリースしている。影響を受けるバージョンを使用する組織に対して強く推奨されるのは、修正済みのバージョンへと速やかにアップグレードすることである。
また、早急なアップグレードが困難な環境においては、一時的な緩和策として、metaColumns()/metaForeignKeys()/metaIndexes() の $table パラメータに対して、制御/検証済みのデータのみを渡すように実装を変更し、リスクを軽減する方式がある。
この脆弱性は、セキュリティ研究者 Marco Nappi (@mrcnpp) により責任ある形で開示された。同氏は、この脆弱性を特定し、適切なチャネルを通じて報告した。
この発見が改めて浮き彫りにするのは、世界中の多くの Web アプリケーションで広く使用される、OSS ライブラリに対する継続的なセキュリティ調査の重要性である。
ユーザー組織にとって必要なことは、自身の ADOdb 実装を監査し、速やかにセキュリティ更新を適用し、この深刻な脆弱性の悪用を阻止することである。
この脆弱性の原因は、ADOdb の SQLite3 ドライバがテーブル名を処理する際に、入力値を適切にサニタイズしないところにあります。特に、文中で指摘されている3つのメソッドでは、渡されたテーブル名がそのまま SQL クエリに組み込まれてしまうため、悪意の入力による SQL インジェクションが成立します。ご利用のチームは、ご注意ください。よろしければ、SQLite3 で検索も、ご参照ください。
You must be logged in to post a comment.