PORTING.CAST.PTR
ポインター型と非ポインター型の間のキャスト
PORTING チェッカーは、異なるコンパイラ内で特定の実装詳細に依存する可能性があるコードを識別します。PORTING.CAST.PTR チェッカーは、ポインターまたは非ポインターのいずれでもない型の間でのキャストを検索します。
脆弱性とリスク
使用するプラットフォームやアーキテクチャによっては、符号なし整数のように整数型と同じビット数でポインターを表す場合と表さない場合があるので、ポインターを非ポインター型 (またはその逆) にキャストすることは安全ではないと考えられます。
軽減と防止
整数型にポインター値を保存しようとしないでください。ポイントされた型が実際に非表示となる必要がある場合は、代わりに void ポインターを使用します。
脆弱コード例
コピー
extern char* getData();
void foo()
{
char* ptr = getData();
unsigned int ptrValue = (unsigned int)ptr;
printf("Got data from: %d\n", ptrValue);
}
ポインター型の整数型との交換は、特定のプラットフォームで必ず失敗します。よって、すべてのプラットフォームで安全でないと考えられます。
修正コード例
コピー
extern char* getData();
void foo()
{
char* ptr = getData();
void* ptrValue = (void*)ptr;
printf("Got data from: %p\n", ptrValue);
}
修正例では、安全でない式の代わりに void ポインターを使用しています。
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。