【技术分享】Jenkins Nested View插件XXE漏洞(CVE-2021-21680)分析

VSole2021-09-09 18:00:00

0×1 前言

逆推这个漏洞本身不难,主要记录下思路。

先看下漏洞描述:

该插件 1.20 及更早版本未配置其 XML 转换器以防止 XML 外部实体 (XXE) 攻击。这使攻击者能够配置视图,让 Jenkins 解析精心设计的视图 XML 定义,该定义使用外部实体从 Jenkins 控制器或服务器端请求伪造中提取秘密。

该插件 1.21 禁用了其 XML 转换器的外部实体解析。

根据漏洞描述可以提取关键信息:

  1. XXE漏洞
  2. 漏洞出现在配置视图处

0×2 分析

Jenkins在github提交了修复代码,修复后的版本和1.19.1对比如下图。定位代码修改处,主要是updateByXml方法添加限制对指外部DTD的访问来进行修复。

updateByXml方法在doConfigDotXml中被调用。当请求方法时GET时会将NestedView作为XML数据返回,当请求方法是POST时,执行updateByXml((Source)new StreamSource(req.getReader()))将请求数据作为Source进行XML解析。那么我们只需要请求的时候设置HTTP method为POST,就可以对NestedView进行更新,然后用GET方法来读取。

入口具体的api在哪里?在这个链接找到了-/user/view/viewname/config.xml。现在我们只要更新config.xml文件就能调用doConfigDotXml方法,那么xml文件的内容就能够传入到请求流从而进行解析。

现在的问题是怎么构造xml文件?既然能通过GET获取XML数据,我们可以在页面创建一个nested view,通过查看历史创建的nested view的config.xml文件就能够来构造我们想要的XML。

现在只要在nested view的config.xml文件中插入dtd,就可以达到我们的目的:

]>

另外需要注意,Jenkins配置了crumb来防御CSRF攻击,所以请求的时候在url后面加上Jenkins-Crumb,Jenkins-Crumb的值可以通过api/crumbIssuer/api/json获取。

0×3 总结

此次漏洞主要通过补丁对比反推漏洞,漏洞本身不复杂。首先根据描述提取关键信息比如什么漏洞类型、大致的漏洞位置,根据补丁修复代码,反推出漏洞。该漏洞是一个典型XXE漏洞,通过TransformerFactory使用了默认的解析方法,没有对dtd禁止。

StreamSource source = new StreamSource(req.getReader());Transformer t = TransformerFactory.newInstance().newTransformer();t.transform(source, new StreamResult(out));

下面是TransformerFactory解析xml防御XXE漏洞的典型方法,禁止外部DTD。

factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, "");

除了TransformerFactory,在Java中还有许多XML解析工具,如果需要防御XXE漏洞,基本都是通过禁用DTD及外部实体来解决的。

DocumentBuilderXMLStreamReaderSAXBuilderSAXParserSAXReaderXMLReaderSAXSourceSAXTransformerFactory......
jenkinsxml语言
本作品采用《CC 协议》,转载必须注明作者和本文链接
企业安全规划建设过程中,往往会涉及到开发的代码安全,而更多可以实现落地的是源代码安全审计中,使用自动化工具代替人工漏洞挖掘,并且可以交付给研发人员直接进行安全自查,同时也更符合SDL的原则,此外可以显著提高审计工作的效率。
探索全球互联网的资产信息,进行资产及漏洞影响范围分析、应用分布统计、应用流行度态势感知等。相对于shodan来说fofa的优点就是更加本土化,拥有更多的域名数据,建立了全球最大的资产规则集,而且现在已经更新了识别蜜罐的功能。fofa的功能这么强大,那我们要怎么利用好提供的功能来挖洞呢?不过在这之前一定要注意,遵守法律法规,不要作出破坏性的行为,不要做未授权的测试。
二. Apifox 做的改进1. Apifox的整体功能定位Apifox 是 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台。支持 Markdown 所见即所得地编写非 API 文档的普通文档。API 文档支持密码保护和生效时间,可生成多份不同内容和权限的文档。支持绑定接口,接口发生变化时,自动更新测试用例。支持执行循环次数和用例之间设置时间间隔。
反序列化漏洞汇总
2022-01-07 22:17:34
漏洞出现在WLS Security组件,允许远程攻击者执行任意命令。攻击者通过向TCP端口7001发送T3协议流量,其中包含精心构造的序列化Java对象利用此漏洞。然后将其序列化,提交给未做安全检测的Java应用。Java应用在进行反序列化操作时,则会触发TransformedMap的变换函数,执行预设的命令。
用户名:加密密码:密码最后一次修改日期:两次密码的修改时间间隔:密码有效期:密码修改到期到的警告天数:密码过期之后的宽限天数:账号失效时间:保留。查看下pid所对应的进程文件路径,
⽹上整理的⾯试问题⼤全,有些 HW ⾯试的题,已经收集好了,提供给⼤家。
后渗透2
2021-10-11 06:55:16
禁用AV/EDR产品在实践中绝不是一个好主意,最好的办法是绕过它。所有这些命令都需要本地管理权限。 # Disable realtime monitoring altogether Set-MpPreference -DisableRealtimeMonitoring $true
2021年11月16日,360漏洞云团队监测到Jenkins发布安全公告,修复了6个存在于插件中的高危漏洞。
逆推这个漏洞本身不难,主要记录下思路。
这篇文章主要收集一些常见的未授权访问漏洞。未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露。
VSole
网络安全专家