CXX.POSIX.VFORK
vfork() を使用しない
POSIX の vfork() 関数は、セキュリティの脆弱性が多く知られているため、使用しないでください。
脆弱性とリスク
POSIX 固有の vfork() 関数は、未定義の動作をしばしば引き起こします。また、vfork() 関数を使用すると、競合状態を発生させる可能性があります。権限があるプロセスが vfork() 関数を呼び出し、その子プロセスが execve() 関数を呼び出す場合、子プロセスの権限は親プロセスよりも低くなりますが、子プロセスの実行中に親プロセスは停止します。このため、親プロセスを停止したままにしておくことで、攻撃者は子プロセスを継続的に要求し、サービス拒否攻撃を実行できます。
軽減と防止
vfork() の代わりに fork() 関数を使用します。
脆弱コード例
コピー
void func(char *filename)
{
pid_t pid = vfork();
if (pid == 0) /* child */ {
if (execve(filename, NULL, NULL) == -1) {
/* Handle error */
}
_exit(1); /* in case execve() fails */
}
}
上記のコードでは、vfork() 関数の代わりに fork() 関数を使用して、サービス拒否攻撃と競合状態を防ぐことができます。