近日爆出某知名NAS存在敏感信息泄露漏洞CVE-2022-24990,组合其他漏洞,可实现未授权远程命令执行。漏洞适用于所有 4.2.x 版本 < 4.2.30,以及所有 4.1.x 版本。
从官网下载完安装包之后,直接从压缩包中提取PHP文件。在阅读代码的时候,我们会发现目标PHP源码都被加密了。其加密方式为php_screw的变种,对应的解密过程在`usr/lib/php/php_***.so`中。通过逆向其加密算法,写出批量解密程序:
本文将以v4.2.28代码进行漏洞分析,我们先来看`module/api.php`文件。通过分析代码,可以了解其路由格式。例如访问`/module/api.php?test/api`,则程序会调用`test`类的`api`方法。但是并非所有的类方法都能调用,因为这里有两个`in_array`判断,如下图①②标记处:
第一处`in_array`,会判断我们调用的方法是否需要登录验证:
第二处`in_array`,则用来判断我们调用的方法是否需要验证头信息。其中`tos_encrypt_str`函数为TerraMaster自定义函数,其具体实现同样在 `php_***.so`中:
这里,我们先来看下符合调用规则的`mobile`类。该类的`webNasIPS`方法同时存在于`$notCheck`、`$notHeader`中,所以我们无需授权,可以直接调用该方法。`webNasIPS`方法会泄露管理员的密文密码,所以这是一处未授权信息泄露漏洞:
在查看`mobile`类的其他方法时,发现`createRaid`方法存在命令注入。这个方法不需要登录检测,但是需要验证头信息。注入点`$this->in[‘raidtype’]`来自全局变量`$in`,而`$in`变量则由`$_GET`、`$_POST`、`$_COOKIE`组成,用户完全可控:
接下来,我们就要来看下程序的头部校验是如何实现的,即`tos_encrypt_str`函数的代码逻辑。通过逆向`php_***so`,我们会发现 `tos_encrypt_str`函数返回的结果,是本机`eth0`的`mac`地址后6位与输入字符串结合之后的`md5`值。例如:`eth0`的`mac`地址为 `aa:bb:cc:dd:ee:ff`,那么`tos_encrypt_str(“123”)`的结果等价于`md5(“ddeeff123”)`:
最后我们要想成功触发`createRaid`方法,只需要满足下面4个条件就行了:
自动化批量测试效果如下:
由于传播、利用此文档提供的信息而造成任何直接或间接的后果及损害,均由使用本人负责,且听安全团队及文章作者不为此承担任何责任。
点关注,不迷路!
原文始发于微信公众号(且听安全):【最新漏洞预警】CVE-2022-24***-某知名NAS远程命令执行漏洞分析