破绽简述
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 流程验证
- 在上传
Artifacts
时任意抉择一张图片进行上传,Directory
能够自定义,这里先留空。
- 上传时如果自定义目录名为空,则默认上传到后盾的我的项目对应的
artifacts
目录:
破绽复现
- 创立一个新我的项目并进行构建(
build
)
- 零碎
build
性能代码对应为io.onedev.server-plugin-executor-serverdocker-7.4.14.jar
中的ServerDockerExecutor
类。如果攻击者能将其替换为本人定义的歹意 jar 包,将会近程执行攻击者可控的代码。
- 因而攻击者能够制作一个歹意的 jar 包,将其命名为“io.onedev.server-plugin-executor-serverdocker-7.4.14.jar”,而后通过构建歹意门路(
../../../../../../lib
)上传到服务的 lib 目录(如 /opt/onedev/lib),原有的同名 jar 包将被替换。
- 此时进入 oneDev 服务器“/opt/onedev/lib”目录进行查看,发现原来的“io.onedev.server-plugin-executor-serverdocker-7.4.14.jar”曾经替换成攻击者上传的 jar 包。
- 因为执行
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