CONSPEC: Context-specific Issues 
	CONSPEC: Context-specific Issues
	
	
	
Some issues are generally thought of to be "bad practice" or
misuse, but they can be used in certain contexts that are perfectly
  	 legitimate. 
Examples: 
CWE-481 - Assigning instead of comparing 
CWE-482 - Comparing instead of assigning 
CWE-486 - Comparing Classes by Name 
CWE-568 - Erroneous Finalize Method 
CWE-572 - Calling Thread.run() instead of Thread.start() 
CWE-597 - Erroneous String Compare
 
Code: 
	char * a,b;
	...
	if (a == b) {...} /* 1 */
	if (! strcmp(a,b)) {...} /* 2 */
Issue 1: Inclusion 
Any possible security-related impact of these issues is dependent on
the context and policy of their use. CWE-597 might be flagged as an
issue, as in the above code, but it really depends on the context and
the programmer's intent.  Comparing strings using == is only
problematic if the programmer meant to compare the strings and not
their pointers. Likewise, just because strcmp() is used in the context
of comparing two char *, it does not mean that the programmer didn't
intend to compare the pointer references.  Furthermore, in some
languages, such as Python, == is the recommended way of testing string
equivalence. 
With CWE-572, there is no issue if the programmer intended for the
run() function to operate in a synchronous context.  Since these are
hard to identify might depend on external operational contexts, they
may lead to high false positive or false negative rates in detection
and should not be included as a weakness. 
With CWE-481, it is a common idiom to perform a variable assignment
  	 within a conditional.  While this might be regarded as a risky
  	 practice, many such constructs are performed correctly, even if
  	 automated tools might flag them as unintentional comparisons. 
Issue 2: Abstraction 
It could be argued that these are all issues in which the programmer
is not doing what is intended. Therefore, these might be restructured
under a general context-specific grouping. Similarly, it could be
argued that these are all function or language-specific issues and
should be restructured or merged into that issue.  Note: the
mechanisms for node restructuring are still being defined. 
Possible Solutions: 
1) Abstract all context-dependent issues under a context-dependent
   parent to indicate the potential problems when dealing with these
   weaknesses, making the current CWEs its children. 
  	 
2) Treat these as a case of language-specific issues. 
3) Leave the context-dependent entries in place in CWE, incorporating
  	    caveats as to their use, and highlight context-dependent
  	    circumstances. 
  	 
4) MERGE all context-dependent entries under a single abstract parent
	(see the node restructuring page for possible approaches). 
Relevant Use-Cases 
Assessment Vendors: Fairly easy to identify potential code issues, but
hard to judge context and programmer intent.  Nonetheless, they could
be flagged for further analysis by a developer, although it could lead
to a lot of false positives and/or false negatives. 
  	 
Assessment Customers: Useful when interpreting potential issues
flagged by vendors. 
Educators: Identify common language mistakes and misinterpretations to
use to highlight specific instances. 
Academic Researchers: Identify ambiguous aspects of languages that
allow programmers to misuse features, whether intentional or
unintentional. 
Applied Vulnerability Researchers: Pinpoint areas to look at as 
context can more easily be determined and problems identified,
especially since the code scanners may make many mistakes and 
developer confusion/syntactic similarities could cause these issues to
go unnoticed. 
Refined Vulnerability Information (RVI) Providers: Not applicable. 
Software Customers: Not applicable. 
Software Developers: Help to identify certain context-dependent issues 
that are commonly missed and might require extra attention. 
Recommendation 
The CWE Researcher Community is strongly encouraged to provide
  	 feedback to the CWE team or the researchers list regarding this
  	 recommendation. 
To provide stability, logical categorization, and maximize the overall
  	 usability by all of the potential CWE customers, the MITRE CWE team
  	 recommends to keep the current CWEs and their locations as they
  	 are. Any descriptions should be abstracted to remove language-specific
  	 inclinations where applicable, and any usage or context-specific
  	 caveats should be called out where necessary.  These could be treated
  	 as examples of "sub-nodes."  Note: the mechanisms for node
	restructuring are still being defined; see the node restructuring page
  	 for possible approaches. 
  	 
For example, this would mean the CWE-597 (Erroneous String Compare)
  	 entry would be described as "strings should be compared by content and
  	 not by references."  This means that functions like String.equals()
  	 (Java) and strcmp (C) should be used for string comparison, instead of
  	 == or !=. In some languages, like Python, comparing string contents is
  	 performed via ==, as might be expected. As a caveat, if the program is
  	 intending to compare string references or pointers, then == and != are
  	 the correct comparison operators. 
Notes 
Below is preliminary work done in order to more clearly identify problems
present in CWE. Any issues not addressed above should be brought to the 
attention of the whole list, especially if the CWE ID is missing from the 
notes below. 
Types of context-specific issues: 
- failure to adhere to a tech-specific specification
 
568, 574, 575, 576, 577, 578, 580, 581, 582, 583 
- use of unsafe or error-prone constructs
 
584, 586, 587, 588 
- legitimate functionality that's only a security concern relevant in
   privileged or other limited contexts
 
570, 571, 589, 595, 597, 598, 8, 9, 481, 482 
 
Complete List of Examples 
All CWE nodes that are affected by this discussion point are listed on
  	 a separate page. 
 
	Document version: 0.1    Date: September 13, 2007 
	This is a draft document.  It is intended to support maintenance of CWE, and to educate and solicit feedback from a specific technical
	audience.  This document does not reflect any official position of the MITRE Corporation or its sponsors. Copyright © 2007, The MITRE Corporation. All rights reserved. Permission is granted to redistribute this document if this paragraph is not removed. This document is subject to change without notice. 
	
More information is available — Please edit the custom filter or select a different filter.  
	 |