説明
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以降は組み込みのネットワーククライアントがないため、カスタムローダー側でこのオプションに対応する必要があります。