LANGSPEC: Language-Specific Issues and Examples
LANGSPEC: Language-Specific Issues and Examples
There are entries in CWE that describe a weakness specific only to a certain
language or even function within a language. There are two different
types of these problems:
1) Violation of a language-specific standard. This includes entries such as
CWE #245, J2EE Bad Practices: getConnection() or
CWE #383, J2EE Bad Practices: Threads.
These entries aren't necessarily weaknesses, but they might be indicative of
error prone locations in the code or areas where vulnerabilities are likely
to be introduced. Currently, these entries appear sporadically throughout
CWE under various parents, but there is no easy way to corral and review all
of these issues.
2) Language specific examples of language independent weaknesses. For
Example, CWE #481, Assigning Instead of Comparing and CWE #597,Erroneous
String Compare.
The latter was written up specific to Java, however it is relevant to other
languages and the consequences can vary. The former was written up with C in mind, however its consequences and detectability vary across languages as
well.
Possible Solutions / Questions to Discuss
- Leave CWE as it is.
- Enumerate each individual function-specific variation as its own CWE entry.
- Include all function-specific issues as examples in a more general
CWE entry.
- Create a new type of entry which will allow for capturing each type
of function-specific issue as an individual sub-entry within the more
general weakness CWE entry.
- Create a function-independent entry identifying the more abstract
weakness and include each related function-specific CWE entry as a
child. For example, consider CWE #573, Failure to Follow
Specification.
- Create a function-independent entry identifying the more abstract
weakness and exclude all current function-specific entries from CWE.
- Leave them as one entry, with the attributes specific to each
language detailed in the entries.
- Other ideas?
Relevant Use-Cases
Assessment Vendors: Search for different issues based upon the language used.
Assessment Customers: Pick out the weaknesses that apply to languages used in their code base.
Academic Researchers: Aid in identifying language-specific issues for
improvements to the language and its constructs.
Applied Vulnerability Researchers: Tailor testing and research to the
specific issues of the languages being explored.
Refined Vulnerability Information (RVI) Providers: identify likely problems
in specific languages and search for trends.
Educators: Helpful to find and teach language-specific issues.
Software Customers: Not applicable.
Software Developers: Identify language-specific issues they may have
to be aware of. Help to choose the "more secure" language.
Recommendation
The CWE Researcher Community is strongly encouraged to provide
feedback to the CWE team or the researchers list regarding this
recommendation.
No final decision should be made without first consulting the ISO/IEC
Project 22.24772: "Guidance for Avoiding Vulnerabilities through
Language Selection and Use". This project focuses on language-specific
constructs that have security implications. See
http://aitc.aitcnet.org/isai/.
Depending on the coverage scope of CWE, the enumeration and upkeep of
all of the function- and language-specific entries (or "sub-nodes")
would improve specificity and completeness. This level of granularity
might not be useful for many CWE consumers, although properly
constructed views might be able to address the concern that there
would be "too many" nodes in CWE. Additionally, some of the issues
here may overlap context-specific issues or be significantly vague
that most CWEs could be included as children.
Therefore, at this time, the MITRE CWE team recommends pursuing an
approach in which function- and language-specific entries are MERGED
into a more abstract entry that is more function- or language-
independent, while clearly capturing the specific variants. Note: the
mechanisms for node restructuring are still being defined; see the
node restructuring page for possible approaches.
This would mean that all relevant CWEs, including CWE-111, CWE-245,
CWE-382, etc., are MERGED into a more abstract CWE and their content
would be added as supplementary examples, or "sub-nodes." However,
the level of abstraction for the merged node should not be too high.
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 Language-Specific Issues:
- Unsafe use of a Func/Lang specification or standard
*111, 245, 382, 491, 579, 581, 586, 383
- Potentially legitimate functionality or non-security related problem that
might indicate a mistake on the programmers part, possibly context specific
or indicative of quality. Specific to a particular language or function.
*467, 481, 482, 484, 558, 560, 572, 580, 584, 587, 597
- Failed protection mechanism / violation of universal policies specific to
a language or function
*473, 582, 583, 616, 621, 98
Alternative way to view the entries:
- Specific Functions with security implications
- Specific Functions without security implications
- Language-Specific Constructs
- Language-Independent Constructs
Another alternative:
- PHP
- Java
- C/C++
- ...etc.
- Language Independent Constructs, Implications vary by language
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.
|