首页
社区
课程
招聘
[翻译]harbor权限提升漏洞(CVE-2019-16097)附exp
发表于: 2019-11-6 01:47 7272

[翻译]harbor权限提升漏洞(CVE-2019-16097)附exp

2019-11-6 01:47
7272

Harbor是一个用于存储和分发Docker镜像的企业级Registry开源服务器,集成了Docker Hub、Docker Registry、谷歌容器等。它提供了一个简单的GUI,允许用户根据自己的权限下载、上传和扫描图像。在过去的四年里,Harbor逐渐受到人们的关注,并在去年11月成为了CNCF的孵化项目,很多公司都使用这款产品。

然而,9.10日公布了一个严重漏洞CVE-2019-16097,这个漏洞允许攻击者通过发送恶意请求将权限提升为管理员从而接管Harbor。

这个漏洞的影响是很严重的,在获得管理员权限后有很多攻击思路。例如:攻击者可以拉取私有镜像进一步获得更多信息;删除仓库中的镜像;替换仓库中的镜像为自己精心构造的镜像;将新创建的普通用户设置为管理员,使用新的凭证通过Docker命令行工具连接到Harbor registry,并将当前映像替换为他们希望的任何内容,包括恶意软件,加密矿工甚至更加严重。截止作者写这篇文章,公网上大概有2500台使用了harbor的机器,发现约1300台是存在漏洞的。


一起来看看user这个结构都包含哪些属性:


有很多属性,此处我们关注的是”HasAdminRole”这个属性。这个字段用来区分管理员与普通用户,值是bool类型,控制这个字段我们就能利用这个漏洞了。

访问“/api/users”这个api,并且发送相应的post请求就能注册新用户。

漏洞代码位于user.go的第317行:

if err := ua.DecodeJSONReq(&user); err != nil


这段代码将用户的post的数据转换为user结构,类似如下格式:

{“username”:”test”,”email”:”test123@gmai.com”,”realname”:”no name”,”password”:”Password1\u0021″,”comment”:null}

如果我们在json数据包中加入“has_admin_role” = True这个字段,就能顺利的注册为管理员。

也可以写一个脚本批量向/api/users接口发送带“has_admin_role” = True字段的post包。


当我在评估这个漏洞的影响并准备负责任地公开它时,Harbor开发人员发布了一个提交,其中包含了对GitHub主分支的这个特定漏洞的修复。我帮助Harbor认识到这是一个重要的安全漏洞和CVE任务。我敦促他们尽快发布一个新版本,他们的工程师也立即这么做了。


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2019-11-6 01:55 被cherrir编辑 ,原因: 补充
收藏
免费 2
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//