你是否是 92,000+ 名受困于存在 CVE-2024-3272 漏洞却迟迟没有补丁的 D-Link NAS 用户之一?
此工具借助该漏洞利用代码本身来为易受攻击的设备打补丁。
1: 请参阅参考文献中的原始披露
Dinkleberry 将执行一条命令,用修补后的版本替换存在漏洞的 nas_sharing.cgi 文件——用 NOP 指令覆盖 system() 调用。
/usr/local/modules 目录(该文件所在位置)是只读的,因此改为在 /usr/local/config 中创建副本,并更新 /var/www/cgi-bin 中的符号链接,使其指向更安全的版本。
我选择仅将 system 调用 NOP 掉,这样命令仍能照常响应,只是实际上不会执行任何操作。
[!NOTE] 文件系统在启动时会从闪存重新加载。应用此补丁只在你重启设备之前有效。 如果你想要更永久的修复,你需要重新刷写固件——或许可以使用 Debian
aliask:~/git/dinkleberry$ python3 ./src/main.py -h 10:01:02
usage: dinkleberry [-h] [--telnet] [--kill-telnet] [--test] [--verbose] target
positional arguments:
target Target NAS to patch
options:
-h, --help show this help message and exit
--telnet Start telnet server
--kill-telnet Stop telnet server
--test Test if device is vulnerable
--verbose, -v Set this to print debug messages
如果未应用任何可选标志,脚本将执行修补操作。
如果你只是想在设备上四处看看,请使用 --telnet 命令,它会在 23 端口启动一个 telnet 会话。
这简直不安全到了可笑的地步,但你的设备本来就已经不安全得可笑了,所以不妨使用这个方便的 shell。
[!CAUTION] 使用此工具风险自负。它正在修改实际设备软件。
我不对以下情况负责:
- 你的设备无法工作
- NAS 上存储的数据丢失
- 引发火灾
- 让那个正愉快地利用着你的设备的 TA 感到不爽
在分析 nas_sharing.cgi 和 libsmbif.so 二进制文件的过程中,很快就清楚地看到此设备上的软件_极其_脆弱。脆弱到无法维护、需要从头重写的程度。
仅在 nas_sharing.cgi 中就有大约 80 处 system() 调用——其中许多为用户输入提供了路径。我没有费心去逐一分析它们以寻找更多需要修补的漏洞,但这里有一个 S 级示例:
/* Why use system() instead of libc fopen/fwrite?
What if you want to write a long string or your filename is long?
Painfully obvious command injection playground 🤦 */
void append_to_file(const char* string, const char* file) {
char s_cmd[1024];
sprintf(s_cmd, "echo %s >> %s", string, file);
system(s_cmd);
return;
}
除了这些_疯狂_的 system 调用之外,缓冲区溢出多到你用棍子都戳不过来——而我能戳很多棍子。
这个 CVE 在 CISA 的 KEV 列表 上——如果你有这样的设备暴露在互联网上,请将其下线。就是现在。
也许甚至应该采纳 D-Link 的建议,更换这个 EOL 设备。但我绝对不会购买 D-Link 的产品,这一点是肯定的。