>Maybe Steven have a newer version available? Unfortunately, I haven't been able to do a major overhaul, or to refine the categories.
>Would be nice with some illustrations to each vulnerability listed. Below is an updated version. There are some more sub-categories, and now most categories have some example vulnerabilities. It still needs a lot of work, but maybe it will be useful. I haven't had a chance to read it closely, but McGraw and Hoglund's new book "Exploiting Software" defines a number of specific attack patterns. There's also the OWASP WebApp Pen Test Checklist. Both of these are a good move forward in formalizing some aspects of auditing and, by extension, vulnerability research. - Steve ================================================================ Vulnerability Auditing Checklist ================================================================ Version: 0.0000004 Modified: 2004/05/03 (Change Log at end) Created: 2002/12/04 Disclaimer: This is a DRAFT document. The list of categories is incomplete. In addition, some categories overlap, and some terms are wholly invented or ill-defined. It has not been compared with other sources. This document has been publicly posted to facilitate discussion of code review/testing procedures, and to spur progress in vulnerability classification. Many of these categories include CVE identifiers (CVE-yyyy-nnnn or CAN-yyyy-nnnn) for specific vulnerabilities that demonstrate the given category. The identifiers can be accessed from the search form at http://cve.mitre.org/cve Notes on the Checklist ---------------------- The categories, as presented, sometimes mix the underlying programming error ("the vulnerability") with the attack vector and/or the consequence/impact of the issue. This is a reflection of the current state of affairs in vulnerability/attack research. Significant work is required to clearly delineate the boundaries between these closely related concepts. Some bug types are probably "under-studied" by researchers. That is, there may be many latent issues that remain undiscovered because researchers have not been paying close attention to them. These types are appropriately noted, based on the author's experience. General Unexpected or Malformed Input Problems ---------------------------------------------- 1. Buffer Overflows Terminology Note: many issues that are now called "buffer overflows" are substantively different than the "classic" overflow, including entirely different bug types that rely on overflow exploit techniques, such as integer signedness errors and format string bugs. This imprecise terminology can make it difficult to determine which variant is being reported. 1a. Boundary end violation ("classic overflow") Note: from the standpoint of programming errors, stack-based and heap-based overflows may not differ significantly (closer study is needed). Examples: many, such as CVE-2000-1094 1b. Boundary beginning violation ("buffer underflow" ?) Note: term may have been used for multiple issue types; concept seems understudied Ref: VULN-DEV:20040110 Buffer UNDERFLOWS: What do you know about it? Examples: BUGTRAQ:20020911 Buffer over/underflows in ssldump prior to 0.9b3 1c. Array index modification (also called "index overflow" or "out-of-bounds array index" or "index-out-of-range") Note: involves accessing memory outside an allocated buffer, and exploit uses buffer overflow techniques, but this can be exploited without "large inputs" Note: can overlap integer signedness errors, parameter/arg tampering Examples: CAN-2003-0072, CAN-2004-0093, CAN-2001-1009, CAN-2001-1036, CAN-2002-1066, CAN-1999-0798, CAN-2003-0721, CAN-2004-0093 1d. Length parameter manipulation ("length tampering") Definition: the attacker can manipulate the length parameter associated with an input, and provide an input of a different length. Note: probably overlaps other categories Examples: CAN-2001-1186, CVE-2001-0191, CAN-2003-0429, CVE-2000-0655, others 1e. Off-by-one error Note: not always a buffer overflow Examples: CAN-2001-1391, CVE-2002-0083, CVE-2002-0653, CAN-2002-0844, CAN-2004-0342 (this is an interesting example that might not be an off-by-one) 1f. Other length calculation error Note: this is a broad category. Some examples include: (1) simple math errors, (2) incorrectly updating parallel counters, (3) not accounting for size differences when "transforming" one input to another format (e.g. URL canonicalization or other transformation that can generate a result that's larger than the original input, i.e. "expansion") Examples: likely many, with variants such as those described above. However, this level of detail is rarely available. 2. Format strings Note: format string issues seem to be heavily under-studied for languages other than C. Memory or disk consumption, control flow or variable alteration, and data corruption may result from format string exploitation in applications written in other languages such as Perl, PHP, Python, etc. Ref: Format String Vulnerabilities (Tim Newsham) Examples: many, including CVE-2000-0573, CAN-2000-0574, CAN-2004-0354, CAN-2004-0232, CAN-2004-0159, CAN-2004-0104 3. Syntax/grammar violation Note: the general problem of "malformed input" is under-studied from the standpoint of underlying programming errors. Most efforts have been in developing attack methods, which rarely suggest the nature of the underlying error. Attack-related research in this type of "malformed input" is scattered but ongoing, e.g. see fuzzers, suite-based testing (PROTOS style), and fault injection. The effect of these is often a denial of service, although other impacts may be under-studied. However, the specific underlying cause is rarely diagnosed by the researcher. This is especially problematic when researchers report that "a number of random inputs were provided, which led to a crash." 3a. "Empty" or blank input Note: some of "crash by port scan" bugs are probably due to this, but lack of diagnosis makes it difficult. Examples: CAN-2002-0422 (overlaps information leak) 3b. Missing argument Examples: CAN-2004-0276, CAN-2002-1488, CAN-2002-1169, CVE-2000-0521, CVE-2001-0590, CAN-2002-1236, CAN-2003-0239, CAN-2003-0477, CAN-2003-0422 3c. Extra argument Examples: N/A 3d. Repeated argument Examples: N/A 3e. Missing/repeated/extra separator or delimiter Examples: CAN-2002-1362, CVE-2000-0116, CAN-2001-1157 3f. Wrong data type Definition: the application does not properly handle input data that is of the wrong type, e.g. it expects a digit (0-9) but is provided with a letter (A-Z). Examples: CVE-1999-1156 3g. Incomplete input Note: overlaps incomplete resource release Examples: CAN-2002-1532, CAN-2003-0195 3h. Missing/misplaced special characters (delimiters/etc.) Examples: N/A 3i. Unknown/unrecognizable argument/command/whatever Examples: CVE-2001-0650 4. Special character mismanagement Note: some bug types overlap this category, e.g. SQL injection and LDAP injection. Note: some of these types of special chars have been observed at one point or another, but it's difficult to construct the proper query to find suitable examples. In an attempt to be complete about what kinds of "special characters" exist, some types may have been added to this list without any publicly reported vulnerability for those types. Note: some buffer overflow vulnerabilities rely on mismanagement of special characters 4a. Shell metacharacters Note: same as item 11 Examples: see item 11 4b. Delimiter between fields Examples: CAN-2003-0307 4c. Delimiter between values Examples: CVE-2000-0076, CAN-2000-0293 4d. Delimiter between records Examples: N/A 4e. CRLF injection (line delimiter) Ref: CRLF Injection (Ulf Harnhammer) Note: probably under-studied. Examples: CAN-2002-1575, CAN-2003-0336, CVE-2000-0610, CAN-2001-0902 4f. Section delimiter Note: overlaps CRLF injection (e.g. CRLF between MIME headers and content) 4g. End-of-input delimiter (e.g. "." in mail message data) Examples: CVE-2000-0319, CVE-2000-0320, CAN-2001-0996 4h. Input terminator Note: overlaps null character injection Examples: N/A 4i. Quoting character Examples: N/A 4j. Escape/meta/control character Examples: CAN-2000-0476, CAN-2003-0083 (overlaps interaction error), CAN-2002-0985 (overlaps argument injection), CVE-2002-0542, CAN-2003-0021, CAN-2003-0022, CAN-2003-0023, CAN-2000-0476, CAN-2001-0523 4k. General separator char Examples: N/A 4l. Comment char Examples: CAN-2002-0001 4m. Macro symbol or other char for substitution Examples: CAN-2002-0770 4n. Variable name leader/terminator (e.g. "$" for env. variable) Examples: N/A 4o. Wildcard or "completion" character Examples: CAN-2002-0433 (overlaps equivalent filename), CAN-2002-1010, CVE-2000-0587 4p. Disallowed character Definition: does not properly handle a character that is specifically disallowed by specification or other convention. Note: overlaps wrong data type, probably others Examples: CAN-1999-1265 5. Dependent Field/Value Inconsistency (e.g.: a "length" field for a buffer does not reflect the actual length of the buffer; or, two fields have values that do not make sense when combined) Note: partially overlaps length parameter manipulation (1d) Examples: N/A (difficult to search for examples of this type) 6. Null dereference Note: typically this is the result of another vuln (e.g. failed error handling, malformed inputs); however, most vulnerability reports only list the null dereference and not the underlying trigger. Note: some attacks that use long input values can trigger null dereferences, which are then mis-diagnosed by the researcher as buffer overflows. Examples: CAN-2004-0365, CAN-2003-1013, CAN-2003-1000, CAN-2004-0389 (overlaps malformed inputs), CAN-2004-0119 File/Directory Processing ------------------------- 7. Directory traversal and filename equivalents Terminology note: some people use "directory traversal" only to refer to the injection of ".." and equivalent sequences whose specific meaning is to traverse directories. Other variants like "absolute pathname" and "drive letter" have the *effect* of directory traversal, but some people may not call it such, since it doesn't involve ".." or equivalent. Note: filename equivalents can be regarded as a type of canonicalization error. Note: this item should be split into multiple sub-categories, but for the sake of consistency with the numbering convention in earlier versions of this checklist, they were combined. Note: Incomplete diagnosis or reporting of vulnerabilities can make it difficult to know which variant is affected. For example, a researcher might say that "..\" is vulnerable, but not test "../" which may also be vulnerable. Note: any combination of the items below can provide its own variant, e.g. "//../" is not listed (CAN-2004-0325). Note: most of these issues are probably under-studied. 7a. ../filename Examples: many 7b. /../filename Examples: many 7c. /absolute/pathname/here Examples: CAN-2000-0614, CVE-2001-0265, CVE-2000-0778, CAN-2000-0845, CVE-2000-0915, CVE-2000-1196, CAN-2001-1269, CVE-2001-0677, CAN-2003-0753 7d. /directory/../filename Examples: CAN-2001-1152, many others 7e. directory/../../filename Examples: many, including CAN-2002-0298 7f. ..\filename ("dot dot backslash") Examples: many, including CAN-2002-0661, CVE-2002-0946, CAN-2002-1042, CAN-2002-1209 7g. \..\filename Examples: N/A 7h. \absolute\pathname\here ("absolute path") Examples: many, including CVE-1999-1263, CAN-2003-0753, CAN-2002-1344, CAN-2002-1525, CAN-2000-0614, 7i. \directory\..\filename Examples: N/A 7j. directory\..\..\filename Examples: CVE-2002-0160 7k. C:dirname or C: ("drive letter") Examples: CAN-2001-0687, CAN-2001-0933, CAN-2002-0466, CAN-2002-1483 7l. ... (triple dot) Examples: CVE-2001-0963, CVE-2001-0615, CAN-2001-0419, CAN-2003-0425, CVE-2001-0467, CAN-2002-0325, CAN-2003-0313, CAN-2002-0288, CAN-2002-0261, CAN-2001-1335, CVE-2001-1193, CAN-2001-1131, CAN-2002-0784, CAN-2002-0708 7m. .... (or other multiple-dots) Examples: CVE-2000-0240, CVE-2001-0615, CAN-1999-1082, CAN-2001-0491 7n. \\UNC\share\name\ Examples: CAN-2001-0687 7o. filename.ext. (trailing dot) Examples: CAN-2001-1386 7p. filename.ext[SPACE] (trailing space) Examples: N/A 7q. dirname. (trailing dot) Examples: CAN-2004-0061 7r. dirname[SPACE] (trailing space) Examples: CVE-2001-0054 7s. dirname/ (trailing slash) Examples: CAN-2002-0253 (overlaps infoleak), CAN-2001-0446 7t. dirname/filename.ext/ (trailing slash) Examples: CAN-2001-0893, CAN-2001-0892 7u. //multiple/leading/slash ("multiple leading slash") Examples: CVE-2000-1050, CAN-2002-1483, CVE-1999-1456 7v. /multiple//internal/slash ("multiple internal slash") Examples: N/A 7w. /multiple/trailing/slash// ("multiple trailing slash") Examples: N/A 7x. \double\\windows\\separator Examples: N/A 7y. /./ Examples: possibly CAN-1999-1083 (could be a cleansing error) 7z. dirname/fakechild/../realchild/filename Examples: CAN-2001-1152 7aa. dirname.... Example: BUGTRAQ:20040205 Apache + Resin Reveals JSP Source Code ... 7ab. filename... Example: BUGTRAQ:20040205 Apache + Resin Reveals JSP Source Code ... 8. Link Following Note: symlink following bugs are the combination of multiple elements: file or directory permissions, filename predictability, etc. Note: UNIX hard links and Windows hard/soft links are probably vastly under-studied. Note: Windows soft links have been exploited remotely. Note: these can overlap filename equivalents. 8a. UNIX symbolic link (symlink) following Examples: many, including CVE-1999-1386, CVE-2000-0972, CVE-2000-1178, CAN-2004-0217 8b. UNIX hard link Examples: CAN-2002-0793, CAN-2003-0578, CVE-1999-0783 8c. Windows .LNK Examples: CVE-2000-0342, CAN-2001-1042, CVE-2001-1043 8d. Windows hard link Examples: CAN-2002-0725, CAN-2003-0844 9. Windows 8.3 filenames Note: these are probably under-studied Examples: CAN-2001-0795, but there are others 10. "Virtual" files 10a. Windows MS-DOS device names Examples: CAN-2002-0106, CAN-2002-0200, CAN-2002-1052, CVE-2001-0493, CVE-2001-0558, CVE-2000-0168, CAN-2001-0492 10b. Windows ::DATA alternate data stream Examples: CVE-1999-0278, CVE-2000-0927 (note: there may be others with different attack vectors and impacts) 10c. Apple ".DS_Store" Examples: BUGTRAQ:20010910 More security problems in Apache on Mac OS X Process/Command Execution ------------------------- 11. Shell metacharacters Examples: many, including CVE-1999-0066, CVE-2001-1246, CVE-2002-0061, CAN-2003-0041 12. Malicious search path execution (search path can be modified by untrusted user to point to malicious program, e.g. UNIX PATH environment variable) Note: this doesn't just apply to Unix. Examples: CAN-2002-1576, CAN-2000-1128, CAN-1999-1461, CVE-1999-1318 13. Program/command argument modification or argument injection Examples: CAN-2004-0121, CAN-2003-0907, CVE-1999-0113 Canonicalization Errors ----------------------- 14. Encodings Note: partially overlaps directory traversal/filename equivalents Note: many other types of encodings should be listed here 14a. URL encoding (hex encoding) - %2e (encoded dot "." - overlap directory traversal) - Examples: CAN-2004-0072 - %5c (encoded backslash "\" - overlap directory traversal) - Examples: CAN-2004-0072 - %0a (overlap CRLF) - Examples: CAN-2002-1575 - %20 (encoded space " " - overlap filename equivalent) - Examples: CAN-2004-0280, CAN-2003-0424, CAN-2001-0693 - %00 (encoded null - overlap filename equivalent, factor in directory traversal) - Examples: CVE-2000-0671, CAN-2004-0189, CAN-2002-1291, CVE-2002-1031, CAN-2001-1140 - + (may be converted to a space when decoding the query string) - Examples: CAN-2002-1451 14b. Unicode Examples: CVE-2000-0884, CAN-2001-0709, CAN-2001-0669 (overlaps interaction error) 15. Multiple separators or other characters Note: overlaps the current items in the directory traversal / filename equivalents section. Examples: N/A 16. Case sensitivity Note: these are probably under-studied in Windows environments, e.g. case sensitivity in filenames (see filename equivalents). Examples: CVE-2000-0497, CVE-2000-0498, CAN-2001-0766, CAN-2001-0795, CAN-2001-1238, CAN-2003-0411 17. Validate-Before-Canonicalize Definition: a program "validates" data before it is canonicalized. This can allow attackers to "insert" invalid data by causing it to be produced by canonicalization. Note: this is probably a general category, and we may see more of it as programmers begin to take defensive steps, but take those steps in the wrong order. Examples: CAN-2002-0433, CAN-2003-0332, CVE-2002-0802 18. Validate-Before-Cleanse Definition: a program "validates" data before it has been cleansed. This can allow attackers to make data look "clean" at first, but the cleansing step produces "dirty" output. Note: this is probably a general category, and we may see more of it as programmers begin to take defensive steps, but take those steps in the wrong order. Note: currently seen mostly in directory traversal Note: this category is probably under-studied. Examples: CAN-2002-0934, CAN-2003-0282, possibly CAN-2003-0417 Leaks ----- 19. Information Leak Note: there seem to be many different types of problems that lead to information leaks, whose severity can range widely depending on the type of information that is leaked. In addition, information leaks are often the result of other bugs. 19a. Sensitive information not cleared after use Examples: CAN-2001-0984 19b. Sensitive memory not cleared due to compiler removal Examples: BUGTRAQ:20021105 When scrubbing secrets in memory doesn't work 19c. Command-line arguments visible to other processes Examples: N/A 19d. Environment variables visible to other processes Examples: N/A 19e. State information leak due to inconsistent responses (e.g. user name enumeration: valid username/wrong pass generates "incorrect password," but invalid username generates "incorrect user") Note: can overlap errors related to escalated privileges Examples: CAN-2004-0294, CAN-2004-0243, CAN-2002-0514, CAN-2002-0515, CAN-2001-1387 19f. State information leak due to timing discrepancies (e.g. a "successful" operation takes more time than an unsuccessful one) Examples: CAN-2003-0078, CAN-2000-1117, CAN-2003-0637 19g. Incomplete removal of temporary resources (e.g. files) Examples: CVE-2001-0465 19h. Application-controlled diagnostic or error messages Examples: N/A 19i. Uncontrolled, external diagnostic or error messages (e.g. the programming language leaks information on an error that happens in the application) Note: PHP applications are often targeted for having this issue when the PHP interpreter generates the error outside of the application's control. Examples: N/A 19j. Design-intended or configuration-intended leak (information is intended for publication, but sensitive) Examples: CAN-2003-1038, CAN-2004-0033 (and many other PHP apps that support phpinfo) 19k. Sensitive information not cleared before reuse or initialization Examples: CAN-2003-0001, CAN-2003-0291, CAN-2004-0177, CVE-2001-1074, CAN-2002-0339 19l. Sensitive information leaked via "stale" pointer Examples: CAN-2004-0080 20. Resource leaks 20a. UNIX file descriptor leak Examples: CVE-1999-0083, CAN-2003-0740, others Multiple Operation/Action Errors -------------------------------- 21. Duplicate operation 21a. Double-free Examples: CVE-2002-0004, CVE-2000-0550, CAN-2002-0847, CVE-2002-0059 21b. Double-encoding / double-decoding Note: overlaps canonicalization. Probably under-studied. Examples: CVE-2001-0333 22. Improper handler deployment (dispatch error) Note: may be the same as item 28. 23. Inability to handle out-of-order actions (state machine violations). Examples: possibly CAN-2000-0647 and/or CAN-2000-0648 (diagnosis incomplete; could be null dereferences or similar issues) 24. Race Condition (non-file link) 24a. Signal handler race condition Note: probably under-studied. Examples: CVE-2001-1349 24b. Other TOCTOU (time-of-change time-of-use) Examples: N/A 25. Deadlock Note: this is under-studied relative to vulnerability research. This item is more of an effect that is triggere by an underlying bug. Examples: CAN-2001-1400 Configuration Errors -------------------- Note: configuration errors are vastly under-studied, especially in terms of classification. They can be more complex than vulnerabilities (which are often discrete and easily separable). In addition, configuration overlaps with the general area of "policy" which can have elements that are not always considered to be relevant to security. 26. Permissions, ACLs, and ownership 26a. Bad default or inherited permissions (read, write, execute) Examples: many 26b. Bad program-assigned permissions (read, write, execute) Examples: many, such as CVE-2002-0265, CAN-2003-0876 26c. Ownership of critical resource not verified Examples: many 26d. Does not properly manage failures due to insufficient permissions Note: probably under-studied. Examples: CAN-2004-0148 27. Default configuration enables insecure feature 27a. Default password Note: default passwords should probably be distinguished from hard-coded passwords. Examples: many 27b. Default, non-essential service or component Examples: many 27c. Network-based admin capability accessible to arbitrary hosts by default Examples: many Error Condition Identification/Management Errors ------------------------------------------------ 28. Handler dispatch error Note: may be the same as item 22. Note: may be the result of another vulnerability 28a. Improper handler deployment (the wrong "handler" is assigned to process an input, e.g. calling a servlet to reveal source code of a .JSP file, or automatically "determines" type even if contradictory to an explicitly specified type) Examples: CVE-2002-0025, CVE-2000-0682, CVE-2000-0778, CAN-2000-1052, CVE-2001-0004, CVE-2001-0126 28b. Missing handler (handler not available or implemented) Examples: CAN-2002-0614, CVE-2001-0330 28c. Dangerous handler not cleared/disabled during sensitive operations 29. Insufficient logging of security-critical events Note: should be distinguished from cases when logging does not coccur as the result of other vulnerabilities (e.g. those that cause a crash) Examples: CAN-2000-0118, CVE-2000-0542, CVE-2000-0937, CVE-2001-0056, CAN-2001-0471, CAN-2001-0978 30. Incomplete error detection (product does not properly detect or check for security-critical error conditions) GUI Errors ---------- 31. Insufficient user warning of "unsafe" actions Examples: CVE-2001-0072, CAN-2001-0919, CAN-2000-1138 (overlap error handling?) 32. Interface inconsistency Definition: an API, GUI, or other interface behaves inconsistently with what operations are actually performed on the system, e.g. checking a security option does nothing, or user tells interface "restrict ALL" and it says "restrict SOME") Note: can be the result of another issue Examples: CVE-2000-0127, CAN-2001-1387, CVE-2000-0225, CVE-2000-1169, CVE-2001-0003, CVE-2001-0081, CAN-2001-0617, CVE-2001-0863, CVE-2001-0864, CVE-2001-0865, CVE-2001-0866, CVE-2001-0867, CVE-2001-0969, CAN-2001-1387 Product Management Errors ------------------------- Note: many of these categories cover specific phases of the software life cycle, which is often independent of the category of bug that is involved. However, some types of bugs seem to be inherent to certain phases of the life cycle, so at this early stage, these categories may be useful as a "catch-all" for certain issues. 33. Design limitations Note: this seems under-studied, especialy with respect to classification of design flaws. 33a. Incomplete specification 33b. Vague specification 33c. Support (or lack of support) for security-relevant options 34. Distribution Error 34a. Debugging code not omitted from production version Note: exposes vuln's in the debugging code itself; perhaps this is not a category Examples: CVE-1999-0095, CVE-2001-0528 34b. Product is shipped with insecure configuration that was used to facilitate internal testing. Examples: CAN-2003-0983 35. Patch Error 35a. Regression error - an old vulnerability is introduced into new code 35b. Incomplete vulnerability fix 36. Documentation Error 36a. Omission of security-critical information 36b. Error/typo causes user to introduce a vulnerability or risk 37. Developer-introduced back door / Trojan Horse Examples: CVE-1999-0145 38. Port Error Definition: A product is ported to a different environment (e.g. OS) and does not consider differences with the original environment - sometimes introducing vulnerabilities specific to the new environment. Examples: CAN-2002-0661 (overlaps directory traversal) 39. Interaction Error Two independent products work correctly and according to specification, but interact in ways that cause problems. Note: this category needs refinement. 39a. Interpretation conflict ("Conflicting Interpretation Error"): A interprets inputs differently than B. Note: this is generally found in proxies, firewalls, anti-virus software, and other "mid-stream" devices that allow or deny traffic based on how the client or server is expected to behave. Examples: classic Ptacek/Newsham IDS design flaws, CAN-2002-1121 (anti-virus), poison NULL byte between Perl and C 39b. Incomplete awareness: A is not aware of all types of input that B can take. Technology-Specific Problems ---------------------------- This is probably missing a number of issues in web technologies. 40. Cross-site scripting (XSS) Terminology Note: some people distinguish between XSS and "HTML injection." Terminology is imprecise for this category, which has a number of variants. Note: overlaps special char management Note: this category needs work Examples: many, such as CVE-2002-0074, CVE-2002-0938, CVE-2002-1053, CAN-2002-0530, CAN-2002-0840 41. Form field / parameter tampering Note: overlaps other categories; not just present in web apps. Examples: many, including CVE-2000-0758, CAN-2000-0554 (overlap informtion leak), CVE-2000-0926, CAN-2002-1352, CVE-2000-0253, CVE-2000-0254, CAN-2000-0101, CAN-2000-0102 42. SQL injection Note: overlaps special character mismanagement. Examples: many, including CAN-2004-0366, CAN-2004-0343, CAN-2003-0779, CAN-2003-0500, CAN-2003-0377 43. PHP-specific issues Note: these may overlap other categories, especially design Ref: A Study in Scarlet (Clowes) 43a. PHP remote code injection Examples: many, including CVE-2002-0953, CAN-2004-0285, CAN-2004-0030, CAN-2004-0068, CAN-2004-0127, CAN-2004-0128 43b. PHP untrusted external initialization of critical variables Note: can overlap PHP remote code injection, other types Examples: CVE-2000-0860, CAN-2002-0764, CAN-2001-0854, CAN-2001-1025, CAN-2003-0754 (overlaps authentication) 44. Perl null character injection (technically an interaction vulnerability, but important to mention specifically) Note: overlaps directory traversal / filename equivalents Other Errors ------------ 45. Initialization Error 45a. Insecure default initialization (e.g. variables or permissions) Note: overlaps other categories 45b. Untrusted/externally controlled initialization of trusted variables or values Note: overlaps other categories Examples: CVE-2000-0959, CVE-2001-0033, CAN-2001-0084, CVE-2001-0872 45c. Non-exit on failed initialization affecting security-critical resource (e.g. configuration file format error) 46. Resource exhaustion (memory, application-specific objects, general objects) Note: exhaustion is often the result of another bug. 46a. Memory leak Definition: software does not sufficiently track and release allocated memory when it is finished, which slowly consumes remaining memory. This is often triggered by improper handling of malformed data or unexpectedly interrupted sessions. Note: memory leaks are probably more often the result of an underlying bug, than an inherent bug themselves. Terminology Note: "memory leak" has sometimes been used to describe other kinds of issues, e.g. for information leaks in which the contents of memory are inadvertently leaked (CAN-2003-0400 is one such example of this terminology conflict). Examples: CAN-2004-0221 (overlaps other bug types), CAN-2004-0222, CVE-2001-0136, CAN-2001-0337, CVE-2002-0574, CAN-2004-0427 46b. Other incomplete resource release Definition: resource is not "released" for re-use or deletion, often as a result of an unusual error Note: overlaps memory leaks, asymmetric resource consumption, malformed input errors Examples: CVE-1999-1127, CVE-2001-0830, CVE-2002-0741, CAN-1999-1569, CAN-2002-1372 46c. Asymmetric resource consumption (aka "amplification") Definition: an "untrusted" entity can make a "trusted" entity consume more resources than necessary. Sometimes a factor in "flood" attacks, but other types of amplification exist. Note: There are probably several sub-types. Ref: Algorithmic Complexity Attacks (Crosby, Wallach) Examples: network amplification: CAN-2001-1244, CVE-2000-0041, CVE-1999-1379, CVE-1999-0513 algorithmic complexity: CAN-2003-0364, CAN-2003-0244, CAN-2002-1203, CAN-1999-1537, CVE-2000-1184; similar issues exist in cryptography CAN-2004-0002 identifies both subtypes. 46d. Insufficient resource pool Definition: the software's resource pool is not large enough to handle peak demand, which allows an attacker to prevent others from accessing the resource by using a (relatively) large number of requests for resources. Frequently the resource is a "flood" of connection or sessions. Note: "large" is relative to the size of the resource pool. See examples. Note: floods often cause a crash or other problem besides denial of the resource itself; these are likely examples of *other* vulnerabilities, not an insufficient resource pool. Note: overlaps other categories. Examples: CAN-2002-1063, CAN-2002-0782, CVE-2002-0406, CAN-2002-0234 47. Numeric conversion errors 47a. Integer Signedness Error (aka "signed integer" error) Note: overlaps array out-of-bounds Examples: CVE-2001-1279, CAN-2003-0619, CAN-2003-0972, CAN-2002-1420, CAN-2003-0166, CAN-2003-0721, CAN-2004-0094 47b. Integer overflow / underflow (value "resets" to maximum or minimum, often through incrementing values) Note: exploit sometimes uses buffer overflow attack Note: terminology may be inconsistent. Examples: overflows: CVE-2002-0391, CVE-2002-0639, CVE-2001-0144; possible underflows: CAN-2003-0761, CAN-2004-0219, CAN-2004-0184 47c. Network byte ordering mismanagement Examples: N/A 47d. Truncation error (happens when bits are truncated, e.g. due to casting or conversion between numeric types) Examples: N/A (but Halvar Flake mentioned some of these in his talk at CanSecWest 2004) 48. Authentication Error Note: this is a broad category, as there can be multiple errors that lead to authentication problems. More study is needed. Note: often, an authentication error is the result of a vulnerability. 48a. Authentication bypass by alternate path Definition: multiple "execution paths" exist for accessing resources that require authentication, but the authentication step is not placed in front of all paths. Seen in web applications that assume access to a particular CGI program can only be obtained through a "front" screen. But this problem is not just in web apps. Examples: CVE-2000-1179, CAN-1999-1454, CVE-2000-0944, many web applications 48b. Authentication bypass by alternate name Note: overlaps equivalent encodings, canonicalization Examples: CAN-2003-0317 48c. Dependency on user-controlled key data: user controls key data elements that are used for authentication, e.g. if a web application relies on a cookie "Authenticated=1" Examples: CVE-2002-0367 (DebPloit) 48d. Logic error Note: overlaps other categories; in these cases, an authentication bug is the *result* of a logic error. Examples: CAN-2003-0750 (conditional should have been an 'or' not an 'and') 48e. Partial password comparison Definition: the application uses the length of an input password to compare against the target password, which can allow an attacker to easily conduct brute force guessing. Examples: CAN-2002-1374, CVE-2000-0979, CAN-2001-0088 49. Unnecesarily large privilege window (app runs at higher privileges longer than it "has to") Note: difficult to distinguish this from failures to drop privileges. Examples: N/A 50. Capability operating at higher privilege than necessary without authentication Note: probably overlaps authentication Examples: N/A 51. Infinite loop Note: this is more the result of a programming error. Multiple sub-categories likely. More study is needed. Note: can overlap amplification or flooding Examples: CVE-2000-0620, CAN-2000-1203, CVE-2000-0738, CAN-2002-1355 (overlaps integer signedness) 52. Incomplete/missing security check for standardized algorithm/technique. Note: this is an implementation error, in which the algorithm/technique requires certain security-related behaviors that are not implemented, thus causing a vulnerability Note: overlaps cryptographic errors Examples: "Basic Constraints" browser cert issues (CAN-2002-0862, CAN-2002-0970, CAN-2002-1407), other issues (CVE-2000-0974 53. Cryptographic error Note: this category is incomplete and needs refinement, as there is some good documentation of cryptographic flaws. 53a. Stores sensitive data in plaintext (passwords, credit cards, etc.) Note: often overlaps bad permissions problems Examples: CVE-1999-0982, CVE-2000-0402, CAN-1999-1256, CAN-2002-0344, many others 53b. Does not use peer-reviewed cryptographic algorithms Note: this is a "best practice" more than a vulnerability Examples: N/A 53c. Does not perform all required cryptographic steps Note: overlaps incomplete/missing security check Examples: N/A 54. Insufficient Randomness 54a. Predictable from system or network state (time, process ID, etc.) Note: overlaps symlink attacks, cryptographic errors, information leaks Examples: CVE-2002-0389, CVE-2001-1141 54b. Insufficiently large space of random values (susceptible to brute force) Examples: CAN-2002-0583, CAN-2002-0903, CAN-2002-1107, CAN-2004-0230 (overlaps design limitation) 54c. Use of "known weak" randomness algorithms Note: probably a number of sub-types here Examples: CAN-2000-0916 54d. Does not initialize PRNG Note: overlaps predictable system state Examples: CVE-2002-0872 54e. Predictable from previous "random" values Examples: CAN-2002-1463 55. Miscellaneous remote code injection (inputs are fed directly into an interpreted language which is dynamically evaluated; other "classes" such as SQL injection are covered elsewhere) Examples: CVE-2000-0353, CAN-2002-0317, CAN-2001-1192 56. LDAP injection Note: overlaps SQL injection, special character mismanagement Note: probably under-studied Ref: Web Applications and LDAP Injection (SPI Dynamics) Examples: no public examples known yet, but probably frequently found by pen testing companies in custom apps Gaps in the Checklist --------------------- These items are known "gaps" relative to the above checklist, but they have not been studied well enough to place them into categories. This list is not complete relative to the known issues, but time constraints prevented a more complete list being provided. - Shatter style attacks Note: it is suspected that a number of publicized vulnerabilities that involve local privilege escalation on Windows systems may be related to Shatter attacks, but are not labeled as such. BUGTRAQ:20020806 White paper: Exploiting the Win32 API Examples: CAN-2002-0971, CAN-2002-1230, CAN-2003-0350, CAN-2003-0908 - web browser vulnerabilities, especially cross-domain and similar categories related to "sandboxing" Note: some browser bugs have a high complexity that makes them difficult to classify. These might be regarded as "technology-specific" except that they typically involve crossing security boundaries, and thus may have equivalents in other technologies that involve security models for multiple "domains." These bugs may stem from more basic programming errors, and thus may be an *effect* of those errors. Examples: many, such as CAN-2004-0380, CAN-2003-1026, CAN-2002-0284 - Windows named pipes Note: probably under-studied. Note: these sometimes play an important factor as an "alternate path" into a system, or an "equivalent filename." Examples: CVE-2002-0066, CAN-2003-0230, CAN-2003-0496 - physical access Note: problems that require physical access to exploit are probably under-studied, and may have certain categories that are unique to physical access. - Application-specific logic errors Note: this covers logic errors that are specific to a particular application, which can only be viewed as vulnerabilities within the context of that application's implicit or explicit security model. "Price tampering" in CGI applications has some overlap here, though that is not a solid example (see "form field" item 41) - "partial password comparison" is an example of a much larger category which involves the comparison or management of "smaller" items as if they were "bigger" items, or vice versa. Examples: CAN-2002-0499, CAN-2003-1025, CAN-2003-0412 - authorization errors - privilege errors - susceptibility to certain attacks (brute force, spoofing) - dotless IP addresses Examples: CVE-2001-0664, CAN-2001-0724 ========== Change Log ========== 0.0000001 - initial version, posted to secprog on 2002/12/05 0.0000002 - lost in the mists of time 0.0000003 - some dir. trans variants added, posted to Vuln-Dev on 2003/06/13 0.0000004 - extended some categories - added CVE examples - added notes for individual categories - added "Notes on the Checklist" - added "Gaps in the Checklist"