注册功能设计缺陷
0x01 等保测评项
GBT 22239-2019《信息安全技术 网络安全等级保护基本要求》中,8.1.4安全计算环境—身份鉴别项中要求包括:
a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;
b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;
c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;
d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,并其中一种鉴别技术至少应使用密码技术来实现。
注册功能设计缺陷对应身份鉴别项中要求a),所以安全控制点为身份鉴别a。
GBT 28448-2019《信息安全技术 网络安全等级保护测评要求》中,测评单元(L3-CES1-01) 该测评单元包括以下要求:
a)测评指标:应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。
b)测评对象:终端和服务器等设备中的操作系统(包括宿主机和虚拟机操作系统)、网络设备(包括虚拟网络设备)、安全设备(包括虚拟安全设备)、移动终端、移动终端管理系统、移动终端管理客户端、感知节点设备、网关节点设备、控制设备、业务应用系统、数据库管理系统、中间件和系统管理软件及系统设计文档等。
c)测评实施包括以下内容:
注册功能设计缺陷属于测评单元(L3-CES1-01)中测评实施的第2项,故定测评单元为L3-CES1-01.2。
0x02 测试内容
当系统存在注册功能时,对其进行以下测试:
1. 任意用户注册,比如任意手机号注册、批量注册;
2. 覆盖注册,比如注册时显示该用户已注册,在注册新用户时抓包,把自己的信息篡改为admin,尝试覆盖admin重新注册;
0x03 漏洞原理
批量注册、任意用户注册: 通常是由于无验证码或者验证码不安全,可对注册时的用户名等信息遍历,达成批量注册的目的。使用脚本批量注册甚至会造成服务器Dos应用层攻击,影响网站的正常使用。
覆盖注册: 系统未对需要注册的账户进行检验,在未核对数据库中的账号是否已经存在情况下进行新用户的注册。
测试时可能会出现这类情况:网站数据库中已经有一个Tide用户,但新用户注册了一个账号,用户名也是Tide,但是开发人员并没有对重复的用户名进行提示,而是直接将数据插入数据库,导致老用户的用户名被覆盖。登录查看时却获取到数据库中同名用户的其他用户信息,导致其他用户信息泄漏,或者由于在验证用户名是否存在时,从前端获取到的数据与从数据库获取到的数据不同,但是往数据库中写入的时候却写入了相同的部分。
0x04 代码示例
CVE-2019-16097 Harbor任意管理员注册漏洞。此漏洞在于用户可以在注册发送POST数据包时,加入"has_admin_role":True字段就可以直接注册为管理员用户。
Harbor源代码的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}
如果在请求中添加"has_admin_role"="True"这个字段,那么创建的用户就拥有管理员权限。
0x05测试过程
测试案例1
CVE-2019-16097任意管理员注册漏洞。该漏洞因注册模块对参数校验不严格,可导致任意管理员注册。攻击者注册管理员账号后可以接管Harbor镜像仓库,从而写入恶意镜像,最终可以感染使用此仓库的客户端等。
进入Harbor注册页面,随意输入注册信息。
截取注册请求数据包,添加字段"has_admin_role":true,注册的test用户就变成管理员账号。
测试案例2
测试案例3
0x06风险分析
0x07 加固建议
1. 增加对数据库中账号是否存在的核对检验机制; 2. 注册页面增加验证码机制,为防止验证码被破解,可适当增加验证码强度,比如图形验证码、短信验证码等; 3. 使用session对当前用户的权限做校验等。
往期推荐
E
N
D