Lucene search

K
attackerkbAttackerKBAKB:D9826725-69EA-420F-9AB1-F16E3F0FDD68
HistoryApr 16, 2021 - 12:00 a.m.

CVE-2020-2509

2021-04-1600:00:00
attackerkb.com
30

9.8 High

CVSS3

Attack Vector

NETWORK

Attack Complexity

LOW

Privileges Required

NONE

User Interaction

NONE

Scope

UNCHANGED

Confidentiality Impact

HIGH

Integrity Impact

HIGH

Availability Impact

HIGH

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

7.5 High

CVSS2

Access Vector

NETWORK

Access Complexity

LOW

Authentication

NONE

Confidentiality Impact

PARTIAL

Integrity Impact

PARTIAL

Availability Impact

PARTIAL

AV:N/AC:L/Au:N/C:P/I:P/A:P

0.002 Low

EPSS

Percentile

54.9%

A command injection vulnerability has been reported to affect QTS and QuTS hero. If exploited, this vulnerability allows attackers to execute arbitrary commands in a compromised application. We have already fixed this vulnerability in the following versions: QTS 4.5.2.1566 Build 20210202 and later QTS 4.5.1.1495 Build 20201123 and later QTS 4.3.6.1620 Build 20210322 and later QTS 4.3.4.1632 Build 20210324 and later QTS 4.3.3.1624 Build 20210416 and later QTS 4.2.6 Build 20210327 and later QuTS hero h4.5.1.1491 build 20201119 and later

Recent assessments:

wvu-r7 at May 05, 2021 7:09am UTC reported:

Not sure this is the vuln (and I can’t test it), but it stood out to me because the exec_mount() function no longer calls popen(3)… or much of anything else:

 int32_t exec_mount(int32_t a1, int32_t a2, int32_t a3, int32_t a4, int32_t a5, int32_t a6) {
-    int32_t str3;
-    memset(&str3, 0, (int32_t)&g2);
-    int32_t str4;
-    memset(&str4, 0, (int32_t)&g1);
-    sprintf((char *)&str3, "mount.cifs -o \"username=%s,password=\"%s\",soft,iocharset=utf8,%s%s\" %s %s 2>&1", (char *)a3, (char *)a4, (char *)a5, (char *)a6, (char *)a1, (char *)a2);
-    struct _IO_FILE * stream = popen((char *)&str3, "r");
-    char * str = fgets((char *)&str4, (int32_t)&g265, stream);
-    int32_t result = 0;
-    if (str != NULL) {
-        while (strstr((char *)&str4, (char *)((int32_t)&g177 + 0x109d4)) == NULL) {
-            char * str2 = fgets((char *)&str4, (int32_t)&g265, stream);
-            result = -1;
-            if (str2 == NULL) {
-                goto lab_0x10a14;
-            }
-        }
-        char * found_char_pos = strchr((char *)&str4, 40);
-        result = -13;
-        if (found_char_pos != NULL) {
-            char * str5 = (char *)((int32_t)found_char_pos + 1);
-            *strchr(str5, 41) = 0;
-            sscanf(str5, "%d");
-            result = -1;
-        }
-    }
-  lab_0x10a14:
-    if (stream != NULL) {
-        pclose(stream);
-    }
-    return result;
+    int32_t str;
+    memset(&str, 0, (int32_t)&g2);
+    sprintf((char *)&str, "mount.cifs -o \"username=%s,password=\"%s\",soft,iocharset=utf8,%s%s\" %s %s 2>&1", (char *)a3, (char *)a4, (char *)a5, (char *)a6, (char *)a1, (char *)a2);
+    return 0;
 }

The CIFS_Mount_Speed() function no longer calls system(3) either:

 int32_t CIFS_Mount_Speed(int32_t a1, int32_t a2, int32_t a3, int32_t a4) {
     int32_t str;
     memset(&str, 0, (int32_t)&g1);
     int32_t str2;
-    memset(&str2, 0, (int32_t)&g83);
+    memset(&str2, 0, (int32_t)&g82);
     int32_t v1 = 0;
     int32_t v2;
-    memset(&v2, 0, (int32_t)&g80);
+    memset(&v2, 0, (int32_t)&g79);
     int32_t v3;
     memset(&v3, 0, 128);
     int32_t v4;
     function_3a18((int32_t)((char)v4 == 47) + a2, &v1);
     int32_t v5;
     function_3a18(a3, &v5);
     function_3a18(a4, &v3);
     char * v6 = (char *)a1;
     sprintf((char *)&str, "//%s/%s", v6, &v1);
     sprintf((char *)&str2, "%s/%s/%s/%s", "/mnt/RTRR_CIFS", v6, &v3, &v1);
     int32_t str3;
     sprintf((char *)&str3, "mkdir -p %s", &str2);
-    system((char *)&str3);
     int32_t v7;
-    memcpy(&v7, (int32_t *)((int32_t)&g169 + 0x10bb0), (int32_t)&g90);
+    memcpy(&v7, (int32_t *)((int32_t)&g158 + 0x10a7c), (int32_t)&g89);
     int32_t v8;
-    memcpy(&v8, (int32_t *)((int32_t)&g169 + 0x10df0), 128);
+    memcpy(&v8, (int32_t *)((int32_t)&g158 + 0x10cbc), 128);
     int32_t v9 = &v7;
     int32_t v10 = function_3e20(&str, &str2, a4, &v5, v9, &v8);
     int32_t result = 0;
     while (v10 != 0) {
         int32_t v11;
         int32_t v12 = function_3e20(&str, &str2, a4, &v5, v9, &v11);
         result = 0;
         if (v12 == 0) {
             break;
         }
         v9 += 64;
         if (v9 == (int32_t)&v5) {
             result = -v12;
             return result;
         }
         v10 = function_3e20(&str, &str2, a4, &v5, v9, &v8);
         result = 0;
     }
-  lab_0x10c7c:
+  lab_0x10b6c:
     return result;
 }

function_3e20() above is actually exec_mount(). Sorry about that.

Assessed Attacker Value: 4
Assessed Attacker Value: 4Assessed Attacker Value: 4

9.8 High

CVSS3

Attack Vector

NETWORK

Attack Complexity

LOW

Privileges Required

NONE

User Interaction

NONE

Scope

UNCHANGED

Confidentiality Impact

HIGH

Integrity Impact

HIGH

Availability Impact

HIGH

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

7.5 High

CVSS2

Access Vector

NETWORK

Access Complexity

LOW

Authentication

NONE

Confidentiality Impact

PARTIAL

Integrity Impact

PARTIAL

Availability Impact

PARTIAL

AV:N/AC:L/Au:N/C:P/I:P/A:P

0.002 Low

EPSS

Percentile

54.9%

Related for AKB:D9826725-69EA-420F-9AB1-F16E3F0FDD68