ProcessDiagramLayoutFactory 中的 XML 外部实体 (XXE) 注入
作者: geo-chen创建于 2026年6月15日更新于 2026年6月15日
摘要
ProcessDiagramLayoutFactory.parseXml(InputStream) 创建了一个不具有 XXE 防护的 DocumentBuilderFactory,并解析了流程定义的 BPMN XML:
protected Document parseXml(InputStream bpmnXmlStream) {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
DocumentBuilder builder;
Document bpmnModel;
try {
builder = factory.newDocumentBuilder();
bpmnModel = builder.parse(bpmnXmlStream); // <-- DTD + external entities enabled by default
} catch (Exception e) {
throw new FlowableException("Error while parsing BPMN model.", e);
}
return bpmnModel;
}没有设置 disallow-doctype-decl、external-general-entities、external-parameter-entities、load-external-dtd、setExpandEntityReferences(false) 或 XMLConstants.ACCESS_EXTERNAL_DTD。JAXP 默认解析外部实体,因此解析的 XML 中的 SYSTEM 实体引用会被提取并嵌入 DOM 中。
内容来源: flowable/flowable-engine