Public Static Field Not Marked Final

Draft Variant
Structure: Simple
Description

An object contains a public static field that is not marked final, which might allow it to be modified in unexpected ways.

Extended Description

Public static variables can be read without an accessor and changed without a mutator by any classes in the application.

Common Consequences 2
Scope: Integrity

Impact: Modify Application Data

The object could potentially be tampered with.

Scope: Confidentiality

Impact: Read Application Data

The object could potentially allow the object to be read.

Detection Methods 1
Automated Static AnalysisHigh
Automated static analysis, commonly referred to as Static Application Security Testing (SAST), can find some instances of this weakness by analyzing source code (or binary/compiled code) without having to execute it. Typically, this is done by building a model of data flow and control flow, then searching for potentially-vulnerable patterns that connect "sources" (origins of input) with "sinks" (destinations where the data interacts with external components, a lower layer such as the OS, etc.)
Potential Mitigations 2
Phase: Architecture and Design
Clearly identify the scope for all critical data elements, including whether they should be regarded as static.
Phase: Implementation
Make any static fields private and constant. A constant field is denoted by the keyword 'const' in C/C++ and ' final' in Java
Demonstrative Examples 1
The following examples use of a public static String variable to contain the name of a property/configuration file for the application.

Code Example:

Bad
C++
c++

Code Example:

Bad
Java
java
Having a public static variable that is not marked final (constant) may allow the variable to the altered in a way not intended by the application. In this example the String variable can be modified to indicate a different on nonexistent properties file which could cause the application to crash or caused unexpected behavior.

Code Example:

Good
C++
c++

Code Example:

Good
Java
java
References 1
The CLASP Application Security Process
Secure Software, Inc.
2005
ID: REF-18
Likelihood of Exploit

High

Applicable Platforms
Languages:
C++ : UndeterminedJava : Undetermined
Modes of Introduction
Implementation
Taxonomy Mapping
  • CLASP
  • The CERT Oracle Secure Coding Standard for Java (2011)
  • Software Fault Patterns