XXEインジェクション
XML External Entity(XML外部エンティティ)インジェクション。攻撃者が仕込んだ外部エンティティをXMLパーサーに処理させ、ローカルファイルの読み取り、SSRF、DoSを引き起こす脆弱性である。パーサーが危険なXML機能をデフォルトで許していると発生する。
仕組みはこうだ。XMLには外部の内容を参照できる「エンティティ」がある。脆弱なパーサーにXMLを送れる攻撃者は、たとえば file:///etc/passwd や内部URLを指す外部エンティティを定義する。パーサーがそれを展開すると、ファイルを読み、呼び出しを行い、その内容をレスポンスに載せて返してしまう。結果として、機密ファイル(パスワードファイル、設定、鍵)の読み取り、SSRF(サーバーに内部サービスやクラウドのメタデータを呼ばせる)、メモリを膨らませる再帰的エンティティによる「billion laughs」DoSが起こる。
根本原因は、多くのXMLライブラリで外部エンティティの処理が既定で有効だったことだ。対策は、パーサーでDTD/外部エンティティの処理を無効にすること(単純で決定的な対処)、可能ならJSONのような単純な形式を使うこと、入力を検証することである。OWASP Top 10にも載った古典的な脆弱性だ。