公式の TYPO3 Apache Solr 拡張機能(EXT:solr / apache-solr-for-typo3/solr)にアーキテクチャ上のセキュリティ脆弱性が発見されました。この問題により、未認証のリモート攻撃者が検索パラメータ tx_solr[q] を介して任意の Solr/Lucene クエリ構文を注入できるようになり、検索インデックスからの不正なブラインドフィールド列挙および完全なメタデータ抽出が可能になります。
EXT:solr(検索パラメータ: tx_solr[q])CVSS:4.0/AV:N/AC:H/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:NEXT:solr 拡張機能は、tx_solr[q] パラメータを介してユーザー提供の検索語を受け取り、それを Apache Solr エンジンに転送します。設計上、この拡張機能はファセットフィルタリングなどの正規の機能をサポートするために、ワイルドカード(*)、単一文字ワイルドカード(?)、フィールドセレクタ(:)、範囲クエリ([a TO z])といった特定のクエリ演算子を許可しています。
これらの文字が、強制力のあるホワイトリストやクエリアブストラクションレイヤーを経由せずにバックエンドのクエリ構築へ直接渡されていたため、攻撃者はフィールド固有の構文を供給して意図された検索境界を脱出できます。これにより、未認証のユーザーが内部の Solr フィールドを直接クエリし、ブールベースのブラインド手法を用いてインデックスデータを抽出できるようになります。
field:* によるフィールド列挙任意または推測されたフィールド名にワイルドカードを付加することで、攻撃者はそのフィールドがスキーマ内に存在するかどうかを検証できます:
GET /search?tx_solr[q]=siteHash:* HTTP/1.1
Host: target.example.com
フィールドが存在する場合、Solr は一致するすべてのレコードに対してクエリを処理し(多くの場合、異なるレスポンスコードやボリューム関連の挙動を引き起こす)、自動化されたワードリストベースのフィールド列挙を可能にします。
攻撃者はブール推論を用いて、機密フィールドの値を1文字ずつ抽出できます。
GET /search?tx_solr[q]=siteHash:a* HTTP/1.1 --> Returns search hits (Value begins with 'a')
GET /search?tx_solr[q]=siteHash:b* HTTP/1.1 --> "Nothing found" (Value does not begin with 'b')
? 演算子による長さ検出単一文字ワイルドカード演算子(?)は、文字の反復処理を開始する前に、格納されている文字列の正確な長さを判定できます。
GET /search?tx_solr[q]=siteHash:????????????* HTTP/1.1 (Checks for 12+ characters)
GET /search?tx_solr[q]=siteHash:?????????????* HTTP/1.1 (Checks for 13+ characters)
[a TO z])範囲クエリは先頭文字に対する二分探索による抽出を可能にし、文字位置ごとに必要なリクエスト数を26回から約5回に削減します:
GET /search?tx_solr[q]=siteHash:[a TO m] HTTP/1.1 --> Determines if character falls within 'a'-'m'
GET /search?tx_solr[q]=siteHash:[n TO z] HTTP/1.1 --> Determines if character falls within 'n'-'z'
長さ検出、範囲クエリ、プレフィックスワイルドカードを組み合わせることで、最小限のリクエストフットプリントでフィールド全体を抽出できます。
上記で概説した手法を用いたブラインド抽出を実演するため、自動検証スクリプト(poc.py)が提供されています。
python3 poc.py -u "https://target.example.com/?L=0&id=1" -f "someField"
-u, --url: TYPO3 検索エンドポイントを指すターゲット URL。
-f, --field: 列挙/抽出するスキーマフィールド名(例: appKey、siteHash)。
-c, --cookies: (オプション)認証/WAF バイパスの検証が必要な場合のセッション Cookie。
-o, --output: 発見されたプレフィックスを保存する出力ファイル(デフォルト: validated_fields.txt)。
EXT:solr 検索エンドポイントを利用するすべてのデフォルトインストールに影響しました。* や : といった演算子は意図された検索機能を担っているため、グローバルな文字エスケープでは不十分です。修復にはアプリケーション層でのホワイトリストとパースモデルが必要です:
[email protected])へ正式な脆弱性レポートを提出。