查看原文
其他

注册功能设计缺陷

池羽 Tide安全团队 2023-02-21


0x01 等保测评项

GBT 22239-2019《信息安全技术 网络安全等级保护基本要求》中,8.1.4安全计算环境—身份鉴别项中要求包括:

a)应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换;

b)应具有登录失败处理功能,应配置并启用结束会话、限制非法登录次数和当登录连接超时自动退出等相关措施;

c)当进行远程管理时,应采取必要措施防止鉴别信息在网络传输过程中被窃听;

d)应采用口令、密码技术、生物技术等两种或两种以上组合的鉴别技术对用户进行身份鉴别,并其中一种鉴别技术至少应使用密码技术来实现。

注册功能设计缺陷对应身份鉴别项中要求a),所以安全控制点为身份鉴别a

GBT 28448-2019《信息安全技术 网络安全等级保护测评要求》中,测评单元(L3-CES1-01) 该测评单元包括以下要求:

a)测评指标:应对登录的用户进行身份标识和鉴别,身份标识具有唯一性,身份鉴别信息具有复杂度要求并定期更换。

b)测评对象:终端和服务器等设备中的操作系统(包括宿主机和虚拟机操作系统)、网络设备(包括虚拟网络设备)、安全设备(包括虚拟安全设备)、移动终端、移动终端管理系统、移动终端管理客户端、感知节点设备、网关节点设备、控制设备、业务应用系统、数据库管理系统、中间件和系统管理软件及系统设计文档等。

c)测评实施包括以下内容:

1)应核查用户在登录时是否采用了身份鉴别措施;
2)应核查用户列表确认用户身份标识是否具有唯一性;
3)应核查用户配置信息或测试验证是否不存在空口令用户;
4)应核查用户鉴别信息是否具有复杂度要求并定期更换。

注册功能设计缺陷属于测评单元(L3-CES1-01)中测评实施的第2项,故定测评单元为L3-CES1-01.2

0x02 测试内容

当系统存在注册功能时,对其进行以下测试:

  1. 1. 任意用户注册,比如任意手机号注册、批量注册;

  2. 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

覆盖注册 对于注册页面覆盖注册,是指原来用一个手机号或用户名等已经注册了账号,但是由于漏洞,导致可以利用该手机号或用户名等再次进行注册,并且会将之前的注册记录覆盖。当用已经注册的账号再次注册时,系统提示该手机号已经存在。
经抓包发现,服务器检测到手机号已经注册过会返回“true”,未注册时返回“false”。

根据上一步的发现,使用已注册的手机号进行注册,抓取返回包,将返回包的值改为“false”,注册成功。

0x06风险分析

任意用户注册、批量注册有可能造成服务器dos应用层攻击、影响网站的正常使用、浪费数据库资源、产生大量“僵尸”用户。覆盖注册会导致用户信息泄漏、用户身份盗用等风险。

0x07 加固建议

  1. 1. 增加对数据库中账号是否存在的核对检验机制;
  2. 2. 注册页面增加验证码机制,为防止验证码被破解,可适当增加验证码强度,比如图形验证码、短信验证码等;
  3. 3. 使用session对当前用户的权限做校验等。
参考 
https://unit42.paloaltonetworks.com/critical-vulnerability-in-harbor-enables-privilege-escalation-from-zero-to-admin-cve-2019-16097/ 
https://xz.aliyun.com/t/6412 
https://cloud.tencent.com/developer/article/1933492


往期推荐

敏感信息泄露

潮影在线免杀平台上线了

自动化渗透测试工具开发实践

【红蓝对抗】利用CS进行内网横向

一个Go版(更强大)的TideFinger

SRC资产导航监测平台Tsrc上线了

新潮信息-Tide安全团队2022年度总结

记一次实战攻防(打点-Edr-内网-横向-Vcenter)

E

N

D


知识星球产品及服务

团队内部平台:潮汐在线指纹识别平台 | 潮听漏洞情报平台 | 潮巡资产管理与威胁监测平台 | 潮汐网络空间资产测绘 | 潮声漏洞检测平台 | 在线免杀平台 | CTF练习平台 | 物联网固件检测平台 | SRC资产监控平台  | ......


星球分享方向:Web安全 | 红蓝对抗 | 移动安全 | 应急响应 | 工控安全 | 物联网安全 | 密码学 | 人工智能 | ctf 等方面的沟通及分享


星球知识wiki:红蓝对抗 | 漏洞武器库 | 远控免杀 | 移动安全 | 物联网安全 | 代码审计 | CTF | 工控安全 | 应急响应 | 人工智能 | 密码学 | CobaltStrike | 安全测试用例 | ......


星球网盘资料:安全法律法规 | 安全认证资料 | 代码审计 | 渗透安全工具 | 工控安全工具 | 移动安全工具 | 物联网安全 | 其它安全文库合辑  | ......

扫码加入一起学习吧~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存