界: Code Quality

コードの質が低いと、予測できない動作につながります。ユーザーの視点には、それがしばしば使い勝手の悪さとなって現れます。攻撃者にとっては、予期せぬ方法でシステムにストレスを与える機会となります。

Code Correctness: Non-Static Inner Class Implements Serializable

Abstract
java.io.Serializable を実装している内部クラスは、問題が発生したり、外部クラスから情報が漏えいする可能性があります。
Explanation
内部クラスのシリアライズは、外部クラスのシリアライズにつながり、外部クラスがシリアライズ可能ではない場合、情報の漏えいやランタイム エラーが発生する可能性があります。また、内部クラスのシリアライズはプラットフォームの依存につながる可能性があります。Java コンパイラーは内部クラスを実装するために合成フィールドを作成します。しかし、これは実装によって、またコンパイラーによっても違います。

例 1: 次のコードでは、内部クラスのシリアライズを可能にしています。


...
class User implements Serializable {
private int accessLevel;
class Registrator implements Serializable {
...
}
}

Example 1 では、内部クラス Registrator がシリアライズされると、外部クラス User からのフィールド accessLevel もシリアライズされます。
References
[1] SER05-J. Do not serialize instances of inner classes CERT
[2] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1
[3] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[4] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 1
[5] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[6] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.java.code_correctness_non_static_inner_class_implements_serializable