Tue Jan 13 20:44:17 UTC 2009
The top 25 most dangerous programming errors
--
Heads up, all you coders out there – and that includes sysadmin scripters too!
The SANS Institute and MITRE have published, in conjunction with a huge list of other security, coding standards, and educational bodies, a consensus list of the top 25 most dangerous programming errors that lead to insecure software.
CWE/SANS Top 25 Most Dangerous Programming Errors
This isn't just a New Year's list of good resolutions, it provides a standard against which courses can teach, tools can test, and vendors can certify. The full set is broken into three major areas :-
- Insecure Interaction Between Components – this covers input validation, SQL injection, request forgery, race conditions and information leakage.
- Risky Resource Management – good old buffer overflows, search path manipulation, improper initialisation and improper resource releasing.
- Porous Defenses – bad access control, hardcoded passwords, home-grown “encryption” systems and unnecessary privilege escalation.
The full list will be subject to update (although I'm not quite sure how this will reflect on the goals for certification and education) and will be published in two places :-
Here's a copy of the list headings taken from the MITRE page :-
Insecure Interaction Between Components
These weaknesses are related to insecure ways in which data is sent and received between separate components, modules, programs, processes, threads, or systems.
- CWE-20: Improper Input Validation
- CWE-116: Improper Encoding or Escaping of Output
- CWE-89: Failure to Preserve SQL Query Structure (aka ‘SQL Injection’)
- CWE-79: Failure to Preserve Web Page Structure (aka ‘Cross-site Scripting’)
- CWE-78: Failure to Preserve OS Command Structure (aka ‘OS Command Injection’)
- CWE-319: Cleartext Transmission of Sensitive Information
- CWE-352: Cross-Site Request Forgery (CSRF)
- CWE-362: Race Condition
- CWE-209: Error Message Information Leak
Risky Resource Management
The weaknesses in this category are related to ways in which software does not properly manage the creation, usage, transfer, or destruction of important system resources.
- CWE-119: Failure to Constrain Operations within the Bounds of a Memory Buffer
- CWE-642: External Control of Critical State Data
- CWE-73: External Control of File Name or Path
- CWE-426: Untrusted Search Path
- CWE-94: Failure to Control Generation of Code (aka ‘Code Injection’)
- CWE-494: Download of Code Without Integrity Check
- CWE-404: Improper Resource Shutdown or Release
- CWE-665: Improper Initialization
- CWE-682: Incorrect Calculation
Porous Defenses
The weaknesses in this category are related to defensive techniques that are often misused, abused, or just plain ignored.
- CWE-285: Improper Access Control (Authorization)
- CWE-327: Use of a Broken or Risky Cryptographic Algorithm
- CWE-259: Hard-Coded Password
- CWE-732: Insecure Permission Assignment for Critical Resource
- CWE-330: Use of Insufficiently Random Values
- CWE-250: Execution with Unnecessary Privileges
- CWE-602: Client-Side Enforcement of Server-Side Security
