見出し画像

🚫シャローコピーからの情報漏洩の危険性 そのclone本当に安全か? cwe SECしらべ 危険コーディング

clone() メソッドは実装によっては浅いコピー(shallow copy)しか行わず、攻撃に悪用される恐れがある。また、clone() メソッドの実装が攻撃者によって提供されたものである可能性もある。

https://www.jpcert.or.jp/java-rules/sec02-j.html

privateかつ可変なオブジェクトの内部状態は、ディフェンシブコピーを作成すること。不変データを含む可変フィールドは、浅いコピーで十分である。一般に、可変データを参照するフィールドは、深いコピーを作成する必要がある。

https://www.jpcert.or.jp/java-rules/obj05-j.html

どちらかというと、クローン可能なオブジェクトのほうに留意せよというのが多かった

https://cwe.mitre.org/data/definitions/498.html

対策も簡単で、もう、そういうことやるな、ということらしい

クラスをクローン可能にする場合は、cloneメソッドをfinalにしてsuper.clone()を投げるようにしてください。

https://cwe.mitre.org/data/definitions/498.html
https://cwe.mitre.org/data/definitions/580.html

二つのクラスは super.clone() を呼び出さないことで発生するバグを示します。Kibitzer が clone() を実装しているため、 FancyKibitzer の clone メソッドは FancyKibitzer ではなく Kibitzer 型のオブジェクトを返します。

こんな感じか
セーブできたからこっちにした


お願い致します