界: Code Quality

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

Undefined Behavior: File Pointer Dereference

Abstract
アプリケーションはシステム FILE オブジェクトを間接参照する割り当てを使用します。
Explanation
使用している C コンパイラーによっては、システム FILE オブジェクトのアドレスが、FILE オブジェクトをストリームとして使用する際に重要になる場合があります。アドレスが関連付けられていない FILE オブジェクトのコピーを使用すると、未定義の動作が生じて、システム情報の漏洩やシステム クラッシュが発生したり、悪意のある攻撃者が自由にファイルの読み取りや編集を行えるようになる可能性があります。

例 1: 次のコードは、値によって間接参照されてコピーされるシステム FILE オブジェクトを示しています。


FILE *sysfile = fopen(test.file, "w+");
FILE insecureFile = *sysfile;
sysfileinsecureFile の割り当てで間接参照されるため、insecureFile を使用すると幅広い問題が発生する可能性があります。
References
[1] Standards Mapping - Common Weakness Enumeration CWE ID 706
[2] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 22.5
desc.structural.cpp.undefined_behavior_file_pointer_dereference