关于程序员:Onedev-v7414-路径遍历漏洞分析CVE202238301

破绽简述

OneDev 是开源的一体化轻量DevOps平台,在OneDev 7.4.14及以前版本中存在门路遍历破绽,具备项目管理权限的攻击者能够将歹意 jar 文件上传到 lib 目录,笼罩原有jar包,攻击者可利用此破绽在服务器中写入任意文件或近程执行恶意代码。

  • 破绽CVSS评分:8.8(高危)
  • 受影响组件版本范畴:Onedev <= v7.4.14

破绽剖析

问题代码剖析

我的项目管理员能够在 OneDev 的build模块对本人的一个我的项目进行构建,同时在build模块中提供了手动上传Artifacts性能。

以v7.4.14为例,当用户点击上传后会调用ArtifactUploadPanel.java中的onSubmit函数将该用户抉择的自定义文件上传到服务器,其中如果用户自定义了Directory , filePath将会采纳字符串拼接的形式将用户自定义的目录名和文件名进行组合,导致攻击者能够上传文件至任意门路。

上传 Artifacts 流程验证

  1. 在上传Artifacts时任意抉择一张图片进行上传,Directory能够自定义,这里先留空。

  1. 上传时如果自定义目录名为空,则默认上传到后盾的我的项目对应的artifacts目录:

破绽复现

  1. 创立一个新我的项目并进行构建(build
  1. 零碎build性能代码对应为io.onedev.server-plugin-executor-serverdocker-7.4.14.jar中的ServerDockerExecutor类。如果攻击者能将其替换为本人定义的歹意jar包,将会近程执行攻击者可控的代码。
  1. 因而攻击者能够制作一个歹意的jar包,将其命名为“io.onedev.server-plugin-executor-serverdocker-7.4.14.jar”,而后通过构建歹意门路(../../../../../../lib)上传到服务的lib目录(如/opt/onedev/lib),原有的同名jar包将被替换。

  1. 此时进入oneDev服务器“/opt/onedev/lib”目录进行查看,发现原来的“io.onedev.server-plugin-executor-serverdocker-7.4.14.jar”曾经替换成攻击者上传的jar包。
  1. 因为执行build性能的 jar 包已被替换,重启服务后从新进行build,发现恶意代码被执行:

针对门路遍历破绽对开发者的倡议

  • 防止在调用文件系统 API 时间接传递用户输出数据
  • 对用户提交的文件名进行归一化,并查看该文件名是否蕴含门路遍历序列如“..”、“/”、” “
  • 将用户上传内容限定至特定的上传门路
  • 针对文件拜访的性能应应用一个硬编码的白名单列表,回绝任何拜访其余文件类型的申请

下图为 onedev v7.4.15针对门路遍历破绽的修复代码:

对用户的修复倡议

将 Onedev 降级至 7.4.15 及更高版本

参考链接

https://www.oscs1024.com/hd/M…

https://nvd.nist.gov/vuln/det…

https://github.com/theonedev/…

https://code.onedev.io/projec…

情报订阅

OSCS(开源软件供应链平安社区)通过最快、最全的形式,公布开源我的项目最新的平安危险动静,包含开源组件安全漏洞、事件等信息。同时提供破绽、投毒情报的收费订阅服务,社区用户可通过配置飞书、钉钉、企业微信机器人,及时取得一手情报信息推送:

https://www.oscs1024.com/?src=sf

具体订阅形式详见:

https://www.oscs1024.com/docs/vuln-warning/intro/?src=sf

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理