针对D-LINK的hnap命令执行补丁,引发作者的吐槽
正如我在关于型号为DIR-890L路由器的HNAP漏洞修复的文章中提到的那样,今年年初,同样的漏洞在型号为DIR-645的路由中也被发现并且报道过了,该公司随后便发布了一个更新补丁。现在,D-Link公司同样为DIR-890L发布了一个更新补丁。
DIR-645和DIR-890L型号的路由器都是使用同样的补丁,所以我这里仅对DIR-890L进行测试。
尽管在我之前发表的文章中我将注意力集中在了命令行注入方面,这个补丁修复了很多的安全漏洞,这一切都源自于使用strstr去验证HNAP的SOAPAction信息头:
1、 使用未经认证的用户数据去调用system命令(命令行注入)
2、 使用未经认证的用户数据去调用sprintf命令(堆栈溢出)
3、 未经认证的用户数据可以执行HNAP的特权指令(例如修改管理员的密码)
请您记住,D-Link公司在他们的安全公告上承认了上述所有的安全问题,因此我们可以很清楚地了解此类攻击的方向。
那么,他是否将sprintf命令堆栈溢出的问题解决了呢?
当然没有解决。
那么他们解决了system命令调用的问题么?
还是没有解决!
他们是否使用了strcmp函数去代替strstr函数来验证SOAPAction信息头?
呵呵,到底是为什么?
他们解决所有这些基本问题的方法就是使用access函数去对SOAPAction是否有效,为了达到验证的目的,我们需确保/etc/templates/hnap/<SOAPAction>.php文件存在。
好吧,这样做至少可以防止用户向sprintf命令和system命令注入任意的数据。
无论如何,在调用access命令之前,他们已经向源代码中添加了另一个sprintf命令;他们的更新补丁是防止一个未经认证的sprintf命令引起堆栈溢出,然而这个补丁却含有一个新的sprintf命令引发的堆栈溢出。
但有趣的是:这个补丁并不能够阻止未经认证的用户像管理员一样执行完整的HNAP操作,因为这个补丁所能做的就是保证HNAP操作是有效的。没错,在他们自己的安全公告中,这些更新补丁并没有解决我们上面所列出的那些漏洞!
一个内部网络中,未经认证的用户可以随意在主机中查询信息这件事情,我相信没人会在乎,包括查看/修改系统设置,或者将路由器恢复为出厂设置等行为:
$ wget --header="SOAPAction: http://purenetworks.com/HNAP1/GetDeviceSettings/SetFactoryDefault" http://192.168.0.1/HNAP1
本文由 360安全播报 翻译,转载请注明“转自360安全播报”,并附上链接。
原文链接:http://www.devttys0.com/2015/04/what-the-ridiculous-fuck-d-link/