通过源码跟踪,最终找到 xml 实体解析类:REXML::Entity ,没有找到对外部实体的引入处理逻辑。
不考虑项目中猴子补丁因素的话,Hash.from_xml() 应该是没有 xxe 漏洞的。
# location: ruby/lib/rexml/entity.rbdefvalueif@valuematches=@value.scan(PEREFERENCE_RE)rv=@value.cloneif@parentsum=0matches.eachdo|entity_reference|entity_value=@parent.entity(entity_reference[0])ifsum+entity_value.bytesize>Security.entity_expansion_text_limitraise"entity expansion has grown too large"elsesum+=entity_value.bytesizeendrv.gsub!(/%#{entity_reference.join};/um,entity_value)endendreturnrvendnilend