XML外部エンティティー(XXE)

XML外部エンティティー(XXE)

説明

XMLパーサーが外部エンティティーや外部DTDを読み込む設定になっていると、攻撃者がローカルファイルや内部ネットワークのリソースにアクセスさせるおそれがあります。

想定される影響

  • ファイルの漏えい、SSRF、サービス拒否につながる可能性があります。

対処方法

外部エンティティーの展開と外部DTDの読み込みを無効にしてください。libxml2 2.13.0以降では、XML_PARSE_NO_XXE で外部DTDとエンティティーの読み込みを禁止できます。カスタムリソースローダーでも、信頼できない外部アクセスを許可しないでください。

例

変更前

c
xmlReadMemory(buf, size, NULL, NULL, XML_PARSE_NOENT | XML_PARSE_DTDLOAD);

変更後

c
xmlReadMemory(buf, size, NULL, NULL, XML_PARSE_NONET);

解説:

  • 変更前: 外部エンティティーの展開とDTDの読み込みを許可しています。
  • 変更後: XML_PARSE_NOENT と XML_PARSE_DTDLOAD を除去しています。XML_PARSE_NONET だけではローカルファイルを遮断できません。libxml2 2.15以降は組み込みのネットワーククライアントがないため、カスタムローダー側でこのオプションに対応する必要があります。

参考資料