Harbor 任意管理员注册漏洞

Author Avatar
xF0rk 9月 20, 2019

Harbor 镜像仓库 CVE-2019-16097 漏洞是指若 Harbor 仓库开启了用户注册功能且其为漏洞版本,则存在任意管理员注册漏洞,攻击者可上传写入恶意 Docker 镜像,用来攻击 Docker 主机。

漏洞概述

Twitter 上出现 Harbor Docker 镜像仓库 CVE-2019-16097 漏洞利用截图,如下图所示,漏洞存在接口为 /api/usersPOST 方法,当提交的用户参数中包含 has_admin_role: true 时,则可直接注册创建权限为管理员的账号,并且可上传写入恶意 Docker 镜像,进而可直接感染使用此镜像仓库的 Docker 主机。

漏洞分析

Harbor HTTP 接口基于 Beego 框架构建,其所有 API 接口路由在 src/core/router.go 代码文件中注册声明,如下图所示,其接口实现在 api/UserAPI

UserAPIPost 方法中,若 Harbor 开启了注册功能(默认该功能开启),其直接将用户所提交的用户信息反序列化至 models.User

models.User 中包含 has_admin_role 字段,其用于标记用户是否有管理员权限

若用户提交的信息中包含 has_admin_role,则反序列化操作将直接赋值到新建的用户 has_admin_role,同时之后代码只对数据进行格式校验

校验成功后,将用户信息直接存储之数据库中(common\dao\register.go 代码文件中实现),由于并未对 has_admin_role 进行检查,进而导致可任意注册管理员账号

漏洞修复

在任意注册管理员的功能修复中,在创建用户之前,校验当前创建账号的权限是否具有管理员权限,若不具有管理员权限,则直接中断注册操作,进而将漏洞修复成功,其漏洞修复提交 链接

漏洞影响

Harbor 镜像仓库 CVE-2019-16097 任意管理员注册漏洞影响 1.7.0-1.8.2,当且仅当镜像仓库开启了用户注册功能

参考链接

  1. Critical Vulnerability in Harbor Enables Privilege Escalation from Zero to Admin (CVE-2019-16097) 链接
  2. 漏洞预警 | Harbor任意管理员注册漏洞 链接