Bad Coding Practices
A category in the Common Weakness Enumeration published by The MITRE Corporation.
Categories in the Common Weakness Enumeration (CWE) group entries based on some common characteristic or attribute.
Weaknesses in this category are related to coding practices that are deemed unsafe and increase the chances that an exploitable vulnerability will be present in the application. These weaknesses do not directly introduce a vulnerability, but indicate that the product has not been carefully developed or maintained. If a program is complex, difficult to maintain, not portable, or shows evidence of neglect, then there is a higher likelihood that weaknesses are buried in the code.
The product is deployed to unauthorized actors with debugging code still enabled or active, which can create unintended entry points or expose sensitive information.
The product's architecture contains too many - or too few - horizontal layers.
The variable's value is assigned but never used, making it a dead store.
The code contains a function or method whose signature and/or associated inline documentation does not sufficiently describe the callable's inputs, outputs, ...
The code contains a class instance that calls the method or function to delete or destroy itself.
A class contains a virtual method, but the method does not have an associated virtual destructor.
The code is compiled without sufficient warnings enabled, which may prevent the detection of subtle bugs or quality issues.
A static code block creates an instance of a class.
The product creates an immutable text string using string concatenation operations.
The product uses a data element that has an excessively large number of sub-elements with non-primitive data types such as structures or aggregated objects.
The code contains a data element with a pointer that does not have an associated copy or constructor method.
The product accesses a data resource through a database without using a connection pooling capability.
The product contains dead code, which can never be executed.
The source code declares a variable in one scope, but the variable is only used within a narrower scope.
The source code contains a block that does not contain any code, i.e., the block is empty.
The product performs a data query with a large number of joins and sub-queries on a large data table.
The product contains a data query against an SQL table or view that is configured in a way that does not utilize an index and may cause sequential searches t...
The product contains an index range scan for a large data table, but the scan can cover a large number of rows.
The product has a loop body or loop condition that contains a control element that directly or indirectly consumes platform resources, e.g. messaging, sessions, l...
The code is structured in a way that relies too much on using or setting global variables throughout various points in the code, instead of preserving the as...
The product makes an explicit call to the finalize() method from outside the finalizer.
The product calls a function, procedure, or routine with arguments that are not correctly specified, leading to always-incorrect behavior and resultant weaknesses.
The product does not implement or incorrectly implements one or more security-relevant checks as specified by the design of a standardized algorithm, protocol, or tech...
The source code contains comments that do not accurately describe or explain aspects of the portion of the code with which the comment is associated.
The source code uses comment styles or formats that are inconsistent or do not follow expected standards for the product.
The source code contains whitespace that is inconsistent across the code or does not follow expected standards for the product.
The product's code, documentation, or other artifacts do not consistently use the same naming conventions for variables, callables, groups of related callabl...
The code uses boxed primitives, which may introduce inefficiencies into performance-critical operations.
The source code uses symbolic constants, but it does not sufficiently place the definitions of these constants into a more centralized or isolated location.
The source code uses literal constants that may need to change or evolve over time, instead of using symbolic constants.
A function or method contains too many operations that utilize a data manager or file resource.
A function, method, procedure, etc. contains an excessive amount of code that has been commented out within its body.
The code contains callable control elements that contain an excessively large number of references to other application objects external to the conte...
The product uses a large data table that contains an excessively large number of indices.
The code does not have a default case in an expression with multiple conditions, such as a switch statement.
The product contains a serializable data element that does not have an associated serialization method.
When multiple sockets are allowed to bind to the same port, other services on that port may be stolen or spoofed.
The product contains a client with a function or method that contains a large number of data accesses/queries that are sent through a data manager, i.e., does not use ...
The product does not maintain equal hashcodes for equal objects.
A parent class has a virtual destructor method, but the parent has a child class that does not have a virtual destructor.
A parent class contains one or more child classes, but the parent class does not have a virtual destructor method.
The product uses a storable data element that does not have all of the associated functions or methods that are necessary to support comparison.
A protection mechanism relies exclusively, or to a large extent, on the evaluation of a single condition or the integrity of a single object or entity in order to make...
The code uses a data representation that relies on low-level data representation or constructs that may vary across different processors, physical machines, ...
Java packages are not inherently closed; therefore, relying on them for code security is not a good practice.
The product uses automatically-generated code that cannot be executed without a specific runtime support component.
The product uses a protection mechanism whose strength depends heavily on its obscurity, such that knowledge of its algorithms or key data is sufficient to defeat the ...
The product uses a protection mechanism that relies on the existence or values of an input, but the input can be modified by an untrusted actor in a way that bypasses ...
A function returns the address of a stack variable, which will cause unintended program behavior, typically in the form of a crash.
The product uses deployed components from application servers, but it also uses low-level functions/methods for management of resources, instead of the API provided by...
The product contains a serializable, storable data element such as a field or member, but the data element contains member elements that are not serializable.
The source code contains elements such as source files that do not consistently provide a prologue or header that has been standardized for the project.
Security based on event locations are insecure and can be spoofed.
The product uses hard-coded constants instead of symbolic names for security-critical values, which increases the likelihood of mistakes during code maintenance or sec...
The product uses multiple resources that can have the same identifier, in a context in which unique identifiers are required.
The product relies on third-party components that do not provide equivalent functionality across all desirable platforms.
The product has multiple functions, methods, procedures, macros, etc. that contain the same code.
The product uses the same control element across multiple architectural layers.
The code contains a callable, block, or other code element in which the same variable is used to control more than one unique task or store more than one ins...
The product relies on third-party components that are not actively supported or maintained by the original developer or a trusted proxy for the original deve...
This view organizes weaknesses around concepts that are frequently used or encountered in software development. This includes all aspects of the software development l...