-
-
[翻译]技术咨询:针对Quantenna公司芯片的命令行注入和伪造跨站请求影响了大量的网络设备
-
发表于: 2017-6-2 23:05 2533
-
供应商:Quantenna, Inc.
供应商URL: http://www.quantenna.com
受影响的版本: v37.4.0.56
受影响的系统: ASUSWRT-merlin, O-Box 3 (TG789Bvn), NETGEAR R7500 Nighthawk X4 AC2350 Smart WiFi Router, others very likely
作者: Joshua Makinen <joshua.makinen[at]nccgroup[dot]trust>
作者: Mike Warner <Mike.Warner[at]nccgroup[dot]trust>
建议 URL / CVE标识: TBD
风险等级: 高 (通过伪造跨站请求的远程命令行注入)
总结
Quantenna的网络设备使用web管理窗口监听80和443端口。这个管理界面具备配置无线和网络设置的能力。
这个web窗口使用了特定程序来实现对伪造跨站请求的检测,但检测程序遗漏了一处,即hidden.php文件中POST方法的参数passed_id。这个参数最终被传递到一个容易被命令行注入攻击的shell命令中,而通过通常的用户界面,hidden.php页面似乎无法访问。
漏洞位置
hidden.php
影响
一个能欺骗用户访问互联网上网页的攻击者就能通过伪造跨站请求攻击在任一Quantenna设备上像根用户一样执行任意命令,其结果就是攻击者可以进一步访问该设备和用户所属的局域网。
细节
hidden.php:55 –POST方法的passed_id参数不被截断,因为它在第48行为GET参数传值。 passed_id随后将与PHP变量$ interface_id进行级联,而后者将作为shell命令的一部分被并入。
hidden.php:459 - load_value()函数调用了一段容易被命令行注入的代码。如果设置了POST参数操作,则以下代码(第460行)对POST请求进行伪造跨站请求检查。将load_value()函数移动至468行之后,并对所有POST请求的伪造跨站请求令牌有效性进行检查,那么无论POST操作参数是否设置,都能解决此问题。
改进步骤
1.加载hidden.php
2.提交默认表单并使用代理拦截对hidden.php的请求。
3.将passed_id的值编辑为“; touch / tmp / proof”。
4.验证文件/ tmp / proof在设备上已经被创建
建议
要解决远程命令注入问题,请将55行更改为:
$passed_id= substr($_POST['passed_id'],0,1);
如果设置了POST参数的操作,则460行的代码会对POST请求进行伪造跨站请求的检查。 将第459行的load_value()函数移至行468之后并针对所有POST请求的伪造跨站请求令牌有效性进行检查,则无论POST操作参数是否被设置,伪造跨站请求的问题都将得到解决。
用户可以通过运行下列代码来给自己打补丁:
sed -i "s/\$passed\_id= \$\_POST\['passed\_id'\];/\$passed\_id= substr\(\$\_POST['passed\_id'],0,1\);/g" hidden.php;
使用上述介绍的漏洞或是在设备上执行命令等其他方式都可以完成打补丁。
与供应商的沟通历史
2017-04-05 由于缺少公开且安全的联系方式,NCC初步尝试通过客服邮箱来联系Quantenna
2017-04-13 NCC初步尝试通过几个潜在有效的邮箱与Quantenna取得联系并索要一个安全的沟通方式
2017-04-19 由于缺乏沟通,NCC通知了Quantenna公司我们将按照我们的披露策略将其漏洞公开
原文链接:https://www.nccgroup.trust/us/about-us/newsroom-and-events/blog/2017/april/technical-advisory-quentanna/
译者:jasonk龙莲
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)