|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [CD] Reconsidering "split-by-default" in content decisions
Following is a writeup of some rationales for a new approach I plan on taking with respect to some content decisions. This will be discussed in more detail at the CVE Board meeting. The short intro is: in mid-2000, Editorial Board members suggested adopting a "split-by-default" approach for handling closely related candidates. For example, if you're not sure whether you should create 1 candidate or 2, then create 2 if you don't have conclusive information. The short thesis is: Split-by-default doesn't work very well for CVE. It's just an accident that the first examples are in Cisco products (seriously), but maybe Andy Balinsky and Kevin Ziese can give us some insider feedback. Similarly for David LeBlanc, as some Microsoft examples follow. This writeup discusses CD:SF-LOC, which covers multiple bugs in the same executable. However, the same principles could be applied to CD:SF-EXEC, which covers the same apparent bug appearing in multiple, closely related executables. - Steve --------------------------------------------------------------------- CD:SF-LOC in action - present and past --------------------------------------------------------------------- Consider these candidates: ====================================================== Candidate: CAN-2001-0019 Proposed: 20010202 Reference: ATSTAKE:A013101-1 Reference: URL:http://www.atstake.com/research/advisories/2001/a013101-1.txt Reference: CISCO:20010131 Cisco Content Services Switch Vulnerability Reference: URL:http://www.cisco.com/warp/public/707/arrowpoint-cli-filesystem-pub.shtml Arrowpoint (aka Cisco Content Services, or CSS) allows local users to cause a denial of service via a long argument to the "show script," "clear script," "show archive," "clear archive," "show log," or "clear log" commands. ====================================================== Candidate: CAN-2001-0020 Proposed: 20010202 Reference: ATSTAKE:A013101-1 Reference: URL:http://www.atstake.com/research/advisories/2001/a013101-1.txt Reference: CISCO:20010131 Cisco Content Services Switch Vulnerability Reference: URL:http://www.cisco.com/warp/public/707/arrowpoint-cli-filesystem-pub.shtml Directory traversal vulnerability in Arrowpoint (aka Cisco Content Services, or CSS) allows local unprivileged users to read arbitrary files via a .. (dot dot) attack. ---------------- I view these as different, since one involves accessing files via .. directory traversal (one type of bug), and another involves effectively a buffer overflow. There are clearly 2 different places in the code in which some error occurs. While it's the same product in both cases, they're effectively 2 different types of bugs, so we create separate candidates. This approach is generally in line with how others distinguish between vulnerabilities. This is a good example of the application of the CD:SF-LOC (software flaws in different lines of code) content decision. Below are the affected bullets from that CD: >The "trigger code" is the specific line in the source code whose >execution affects the system's security. For example, the trigger >code for a buffer overflow might be a call to the strcat() function >which causes the overflow and overwrites a stack pointer > > [...] > >*2) If it can be proven that the trigger code for P1 is different than > the trigger code for P2, then P1 and P2 must remain SPLIT. > > [...] > >6) If the method of exploitation for P1 is significantly different > from the exploitation of P2, then P1 and P2 should be SPLIT. For > example, P1 might appear to be a buffer overflow that is caused by > sending a long command line argument, whereas P2 might follow > symbolic links improperly. So, we've got sufficient reason to separate the apparent buffer overflow from the .. directory traversal problem. However, note that CAN-2001-0019 involves a DoS that is visible through the execution of 6 different commands; the exploit and the result are basically the same. However, CAN-2001-0019 could be 1, 2, or 6 separate bugs, depending on the actual source code. For example, perhaps the piece of code that processes a "show" command is different than the code that processes a "clear" command. Internally, the code might look something like: if (strcmp(cmd, "show") == 0) { /* Buffer overflow 1 */ strcpy(str, long_cmd_argument); process_show_command(str); } elsif (strcmp(cmd, "clear") == 0) { /* Buffer overflow 2 */ strcpy(str, long_cmd_argument); process_clear_command(str); } If the above code is what's "really" going on within the Cisco source code, then one could say that there are 2 different buffer overflows. But then again, the source code could be: /* Buffer overflow 1 */ strcpy(arg, long_cmd_argument); if (strcmp(cmd, "show") == 0) { process_show_command(arg); } elsif (strcmp(cmd, "clear") == 0) { process_show_command(arg); } in which case there's only one point in the code where the overflow occurs. But even still, the code could be: if (strcmp(cmd, "show") == 0) { if (strcmp(arg1, "script") == 0) { /* Buffer overflow 1 */ strcpy(arg2, long_cmd_argument); show_script(arg2); } elsif (strcmp(arg1, "archive") == 0) { /* Buffer overflow 2 */ strcpy(arg2, long_cmd_argument); show_archive(arg2); } elsif (strcmp(arg1, "log") == 0) { /* Buffer overflow 3 */ strcpy(arg2, long_cmd_argument); show_log(arg2); } } elsif (strcmp(cmd, "clear") == 0) { if (strcmp(arg1, "script") == 0) { /* Buffer overflow 1 */ strcpy(arg2, long_cmd_argument); show_script(arg2); } elsif (strcmp(arg1, "archive") == 0) { /* Buffer overflow 2 */ strcpy(arg2, long_cmd_argument); show_archive(arg2); } elsif (strcmp(arg1, "log") == 0) { /* Buffer overflow 3 */ strcpy(arg2, long_cmd_argument); show_log(arg2); } } If this is the case, then there are 6 different buffer overflows. So, depending on the actual source code, we have either 1, 2, or 6 overflows. Ideally, we'd want to create a separate CAN for each separate bug. However, we don't have access to the source code, so we can't tell for sure. The vendor could tell us, but what if they believe it's only 1 problem, even if our content decisions say it would be 6? Last August, the Editorial Board said: "when in doubt, SPLIT," i.e. create separate candidates unless you have solid proof that the issues really stem from the same vulnerable line of code. So, I went ahead and started separating candidates. But this did several things: 1) CVE's level of abstraction (LOA) started becoming a lower level than the LOA of other security databases and tools. In general, CVE should probably live somewhere in the middle. 2) The LOA definitely started getting too low level for system administrator purposes. For example, a sysadmin doesn't necessarily care whether there's 1 buffer overflow or 5, it's more important to know that a particular package has a problem. While system administrators aren't the only type of CVE user out there, they are definitely a major user community, so we should be mindful of them. 3) The LOA would vary depending on the amount of information that was available, e.g. source code or detailed exploit information. Generally, the more information that was available, the more candidates you'd create for closely related issues. Effectively, we wind up penalizing those vendors with open source code, or those who are more closely analyzed. We also end up "helping" vendors who release little or no information at all. This seems backwards. 4) Since "SPLIT by default" is effectively arbitrary, it's probably going to be wrong half the time. Because we're affected by the amount of available information as described in (3) above, split-by-default won't be consistently applied to every vulnerability. 5) It gets more difficult to write descriptions that adequately differentiate between closely related bugs. For example, in OpenBSD, you might have a bug in stdio.c in line 340; but that same bug is in line 476 in stdio.c in FreeBSD, and it's in line 78 in file somethingelse.c in Linux. The poster children for problems 1, 2, 3, and 4 are CAN-2000-1081 through CAN-2000-1088, which describe buffer overflows that are *triggered* through different functions in Microsoft SQL Server. Each function got its own candidate. However, there could be a single point of failure in a piece of code that's shared by all those functions, so maybe it's only 1 bug. Also, all the bugs happen in SQL Server. From a sysadmin's perspective, there's only one major point of concern - vulnerable SQL Server - instead of 8 concerns, which argues for 1 candidate. The poster children for problem 5 are format string problems, which generally seem to be found and fixed in bunches. Since various Unices are doing the fixing, and each Unix has a slightly different code base, identifying and differentiating these becomes near impossible and would require close code evaluation of each affected OS to be accurate. So, I'm backing off of the split-by-default suggestion, and adopting a more consistent approach that's less susceptible to lack of information, "politics," and deep analysis, and is more in line with what I've generally seen in other databases: 1) Create separate candidates for separate types of bugs, e.g. buffer overflows versus .. problems. 2) If P1 and P2 are the same type of bug, *and* they are both present in the same version of software, *and* they are both fixed by the same version (if fixes are available), then create a single candidate for them. 3) If there's a possibility that there are multiple similar bugs as seen through (2), then try to clearly distinguish them in the CVE description, so people will know that it could be multiple bugs. 4) Make the content decisions more directly available to the public, and annotate each CVE item with its associated CD's, so that users can tell which CVE items might be at an "incorrect" level of abstraction. Now, the challenge will be actually discussing this at the face-to-face meeting in March :-) - Steve ====================================================== Candidate: CAN-2000-1081 URL: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-1081 Phase: Proposed (20001219) Category: SF Reference: ATSTAKE:20001201 Microsoft SQL Server extended stored procedure vulnerability Reference: URL:http://marc.theaimsgroup.com/?l=bugtraq&m=97570878710037&w=2 Reference: MS:MS00-092 Reference: URL:http://www.microsoft.com/technet/security/bulletin/ms00-092.asp Reference: BID:2030 Reference: URL:http://www.securityfocus.com/bid/2030 The xp_displayparamstmt function in SQL Server and Microsoft SQL Server Desktop Engine (MSDE) does not properly restrict the length of a buffer before calling the srv_paraminfo function in the SQL Server API for Extended Stored Procedures (XP), which allows an attacker to cause a denial of service or execute arbitrary commands, aka the "Extended Stored Procedure Parameter Parsing" vulnerability. Analysis ---------------- Vendor Acknowledgement: yes advisory Content Decisions: SF-LOC ABSTRACTION: CD:SF-LOC suggests having separate items, one for each buffer overflow in each separate "line of code." Thus xp_displayparamstmt, xp_enumresultset, xp_showcolv, and xp_showcolv should be separate. However, CD:SF-LOC is still under discussion by the Editorial Board, so these may be MERGED together. ====================================================== Candidate: CAN-2000-1082 URL: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-1082 Phase: Proposed (20001219) Category: SF Reference: ATSTAKE:20001201 Microsoft SQL Server extended stored procedure vulnerability Reference: URL:http://marc.theaimsgroup.com/?l=bugtraq&m=97570878710037&w=2 Reference: MS:MS00-092 Reference: URL:http://www.microsoft.com/technet/security/bulletin/ms00-092.asp Reference: BID:2031 Reference: URL:http://www.securityfocus.com/bid/2031 The xp_enumresultset function in SQL Server and Microsoft SQL Server Desktop Engine (MSDE) does not properly restrict the length of a buffer before calling the srv_paraminfo function in the SQL Server API for Extended Stored Procedures (XP), which allows an attacker to cause a denial of service or execute arbitrary commands, aka the "Extended Stored Procedure Parameter Parsing" vulnerability. Analysis ---------------- Vendor Acknowledgement: yes advisory Content Decisions: SF-LOC ABSTRACTION: CD:SF-LOC suggests having separate items, one for each buffer overflow in each separate "line of code." Thus xp_displayparamstmt, xp_enumresultset, xp_showcolv, and xp_showcolv should be separate. However, CD:SF-LOC is still under discussion by the Editorial Board, so these may be MERGED together. ====================================================== Candidate: CAN-2000-1083 URL: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-1083 Phase: Proposed (20001219) Category: SF Reference: ATSTAKE:20001201 Microsoft SQL Server extended stored procedure vulnerability Reference: URL:http://marc.theaimsgroup.com/?l=bugtraq&m=97570878710037&w=2 Reference: MS:MS00-092 Reference: URL:http://www.microsoft.com/technet/security/bulletin/ms00-092.asp Reference: BID:2038 Reference: URL:http://www.securityfocus.com/bid/2038 The xp_showcolv function in SQL Server and Microsoft SQL Server Desktop Engine (MSDE) does not properly restrict the length of a buffer before calling the srv_paraminfo function in the SQL Server API for Extended Stored Procedures (XP), which allows an attacker to cause a denial of service or execute arbitrary commands, aka the "Extended Stored Procedure Parameter Parsing" vulnerability. Analysis ---------------- Vendor Acknowledgement: yes advisory Content Decisions: SF-LOC ABSTRACTION: CD:SF-LOC suggests having separate items, one for each buffer overflow in each separate "line of code." Thus xp_displayparamstmt, xp_enumresultset, xp_showcolv, and xp_showcolv should be separate. However, CD:SF-LOC is still under discussion by the Editorial Board, so these may be MERGED together. ====================================================== Candidate: CAN-2000-1084 URL: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-1084 Phase: Proposed (20001219) Category: SF Reference: ATSTAKE:20001201 Microsoft SQL Server extended stored procedure vulnerability Reference: URL:http://marc.theaimsgroup.com/?l=bugtraq&m=97570878710037&w=2 Reference: MS:MS00-092 Reference: URL:http://www.microsoft.com/technet/security/bulletin/ms00-092.asp Reference: BID:2039 Reference: URL:http://www.securityfocus.com/bid/2039 The xp_updatecolvbm function in SQL Server and Microsoft SQL Server Desktop Engine (MSDE) does not properly restrict the length of a buffer before calling the srv_paraminfo function in the SQL Server API for Extended Stored Procedures (XP), which allows an attacker to cause a denial of service or execute arbitrary commands, aka the "Extended Stored Procedure Parameter Parsing" vulnerability. Analysis ---------------- Vendor Acknowledgement: yes advisory Content Decisions: SF-LOC ABSTRACTION: CD:SF-LOC suggests having separate items, one for each buffer overflow in each separate "line of code." Thus xp_displayparamstmt, xp_enumresultset, xp_showcolv, and xp_showcolv should be separate. However, CD:SF-LOC is still under discussion by the Editorial Board, so these may be MERGED together. ====================================================== Candidate: CAN-2000-1085 URL: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-1085 Phase: Proposed (20001219) Category: SF Reference: ATSTAKE:20001201 SQL Server 2000 Extended Stored Procedure Vulnerability Reference: URL:http://marc.theaimsgroup.com/?l=bugtraq&m=97570884410184&w=2 Reference: MS:MS00-092 Reference: URL:http://www.microsoft.com/technet/security/bulletin/ms00-092.asp Reference: BID:2040 Reference: URL:http://www.securityfocus.com/bid/2040 The xp_peekqueue function in Microsoft SQL Server 2000 and SQL Server Desktop Engine (MSDE) does not properly restrict the length of a buffer before calling the srv_paraminfo function in the SQL Server API for Extended Stored Procedures (XP), which allows an attacker to cause a denial of service or execute arbitrary commands, aka the "Extended Stored Procedure Parameter Parsing" vulnerability. Analysis ---------------- Vendor Acknowledgement: yes advisory Content Decisions: SF-LOC ABSTRACTION: CD:SF-LOC suggests having separate items, one for each buffer overflow in each separate "line of code." Thus xp_peekqueue, xp_printstatements, xp_proxiedmetadata, and xp_SetSQLSecurity should be separate. However, CD:SF-LOC is still under discussion by the Editorial Board, so these may be MERGED together. ====================================================== Candidate: CAN-2000-1086 URL: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-1086 Phase: Proposed (20001219) Category: SF Reference: ATSTAKE:20001201 SQL Server 2000 Extended Stored Procedure Vulnerability Reference: URL:http://marc.theaimsgroup.com/?l=bugtraq&m=97570884410184&w=2 Reference: MS:MS00-092 Reference: URL:http://www.microsoft.com/technet/security/bulletin/ms00-092.asp Reference: BID:2041 Reference: URL:http://www.securityfocus.com/bid/2041 The xp_printstatements function in Microsoft SQL Server 2000 and SQL Server Desktop Engine (MSDE) does not properly restrict the length of a buffer before calling the srv_paraminfo function in the SQL Server API for Extended Stored Procedures (XP), which allows an attacker to cause a denial of service or execute arbitrary commands, aka the "Extended Stored Procedure Parameter Parsing" vulnerability. Analysis ---------------- Vendor Acknowledgement: yes advisory Content Decisions: SF-LOC ABSTRACTION: CD:SF-LOC suggests having separate items, one for each buffer overflow in each separate "line of code." Thus xp_peekqueue, xp_printstatements, xp_proxiedmetadata, and xp_SetSQLSecurity should be separate. However, CD:SF-LOC is still under discussion by the Editorial Board, so these may be MERGED together. ====================================================== Candidate: CAN-2000-1087 URL: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-1087 Phase: Proposed (20001219) Category: SF Reference: ATSTAKE:20001201 SQL Server 2000 Extended Stored Procedure Vulnerability Reference: URL:http://marc.theaimsgroup.com/?l=bugtraq&m=97570884410184&w=2 Reference: MS:MS00-092 Reference: URL:http://www.microsoft.com/technet/security/bulletin/ms00-092.asp Reference: BID:2042 Reference: URL:http://www.securityfocus.com/bid/2042 The xp_proxiedmetadata function in Microsoft SQL Server 2000 and SQL Server Desktop Engine (MSDE) does not properly restrict the length of a buffer before calling the srv_paraminfo function in the SQL Server API for Extended Stored Procedures (XP), which allows an attacker to cause a denial of service or execute arbitrary commands, aka the "Extended Stored Procedure Parameter Parsing" vulnerability. Analysis ---------------- Vendor Acknowledgement: yes advisory Content Decisions: SF-LOC ABSTRACTION: CD:SF-LOC suggests having separate items, one for each buffer overflow in each separate "line of code." Thus xp_peekqueue, xp_printstatements, xp_proxiedmetadata, and xp_SetSQLSecurity should be separate. However, CD:SF-LOC is still under discussion by the Editorial Board, so these may be MERGED together. ====================================================== Candidate: CAN-2000-1088 URL: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CAN-2000-1088 Phase: Proposed (20001219) Category: SF Reference: ATSTAKE:20001201 SQL Server 2000 Extended Stored Procedure Vulnerability Reference: URL:http://marc.theaimsgroup.com/?l=bugtraq&m=97570884410184&w=2 Reference: MS:MS00-092 Reference: URL:http://www.microsoft.com/technet/security/bulletin/ms00-092.asp Reference: BID:2043 Reference: URL:http://www.securityfocus.com/bid/2043 The xp_SetSQLSecurity function in Microsoft SQL Server 2000 and SQL Server Desktop Engine (MSDE) does not properly restrict the length of a buffer before calling the srv_paraminfo function in the SQL Server API for Extended Stored Procedures (XP), which allows an attacker to cause a denial of service or execute arbitrary commands, aka the "Extended Stored Procedure Parameter Parsing" vulnerability. Analysis ---------------- Vendor Acknowledgement: yes advisory Content Decisions: SF-LOC ABSTRACTION: CD:SF-LOC suggests having separate items, one for each buffer overflow in each separate "line of code." Thus xp_peekqueue, xp_printstatements, xp_proxiedmetadata, and xp_SetSQLSecurity should be separate. However, CD:SF-LOC is still under discussion by the Editorial Board, so these may be MERGED together.
|
||||