SV.SERIAL.SIG
SV.SERIAL.SIG は、クラスが 'java.io.Serializable' インターフェイスを直接的または間接的に実装しているにもかかわらず、宣言された 'readObject' メソッドまたは 'writeObject' メソッドのシグネチャが正しくない場合に報告されます。
脆弱性とリスク
クラスが正しいシグネチャの 'readObject' メソッドおよび 'writeObject' メソッドを実装していない場合、デフォルトのシリアライズが使用されます。
Klocwork セキュリティ脆弱性 (SV) チェッカーは、潜在的に危険なデータを生成する呼び出しを特定します。このような呼び出しは安全でないソースと考えられます。ユーザーは攻撃者になる可能性があり、ヒューマンエラーを取り込む可能性があるため、安全でないソースはユーザーが指定した任意のデータである可能性があります。
軽減と防止
'readObject' メソッドおよび 'writeObject' メソッドのシグネチャはそれぞれ、'private void writeObject(java.io.ObjectOutputStream out) throws IOException' および 'private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException' である必要があります。
例 1
public class SV_SERIAL_SIG_Sample_1 implements Serializable {
final void readObject(ObjectInputStream in) {
}
void writeObject(ObjectOutputStream in) throws IOException {
}
}
SV.SERIAL.SIG が 17 行目のクラス 'SV_SERIAL_SIG_Sample_1' の宣言に対して報告されています。'writeObject()' メソッドが 'private' 修飾子を持たないためです。SV.SERIAL.SIG が 14 行目のクラス 'SV_SERIAL_SIG_Sample_1' の宣言に対して報告されています。'readObject()' メソッドが 'private' 修飾子を持たないためです。SV.SERIAL.SIG が 14 行目のクラス 'SV_SERIAL_SIG_Sample_1' の宣言に対して報告されています。'readObject()' メソッドが 'java.io.IOException' および 'java.lang.ClassNotFoundException' のスローを宣言していないためです。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。