1. 前提知識#
XML は電子文書に構造的なマークアップを付与するためのマークアップ言語であり、データのマークアップやデータ型の定義に使用される。ユーザーが独自のマークアップ言語を定義することを可能にする。XML 文書の構造には XML 宣言、DTD ドキュメント型定義(オプション)、ドキュメント要素が含まれる。
通常、非同期 JavaScript と XML 技術(Ajax 技術)は、Web アプリケーションがページ全体をリロードすることなく、ユーザーインターフェースに増分更新を素早く表示できるようにする技術である。現在、JSON の使用が XML よりも一般的であり、JSON と XML は Ajax モデルで使用される。このようなマークアップ言語は、開発者が HTML で任意のデータ構造を定義および表現することを可能にする。
一般的な XML 構文構造は以下のようになる:
内部エンティティ宣言形式:<!ENTITY エンティティ名 “エンティティの値”>。
外部エンティティ参照形式:<!ENTITY エンティティ名 SYSTEM “URI”>
2. 脆弱性の説明#
XML 外部エンティティ注入(XML External Entity)略称 XXE 脆弱性
脆弱性の原理:
XXE 脆弱性は主に外部エンティティを参照する DTD によって引き起こされる。
一般的には、現在のサイトが外部エンティティを参照することを許可している場合に発生する
3. XXE 脆弱性の攻撃#
3.1 回映あり#
- 機密ファイルの読み取り
- PHP 擬似プロトコルを使用してファイルを読み取る
- 内部ネットワークポートのスキャン
- コマンドの実行
3.2 回映なし#
- データを抽出するための外部データチャネルを使用できる
4. XXE 脆弱性の防御#
- 外部エンティティメソッドの禁止
- ユーザーが提出した XML データのフィルタリング
- libxml コンポーネントのアップグレード