SV.LPP.CONST
危険な関数についての安全でないマクロの使用
パラメーターとして危険なマクロを使用する可能性がある Microsoft Windows 関数がいくつかあります。そのため、悪意のあるユーザーがレジストリにアクセスし、任意のコマンドを実行することができます。RegCreateKeyEx、SHRegCreateUSKey、または RegOpenKeyEx は、望ましいアクセスパラメーターを KEY_ALL_ACCESS に設定することができ、そのために悪意のあるユーザーがレジストリで属性を変更することができます。キーに DLL への参照が含まれている場合、そのような参照を変更すると、任意のコマンドを実行できるようになります。
SV.LPP.CONST チェッカーは、RegCreateKeyEx、SHRegCreateUSKey、または RegOpenKeyEx アクセスパラメーターが KEY_ALL_ACCESS に設定されたインスタンスを探します。
脆弱性とリスク
all-access マクロを使用すると、リソースにアクセスするためのパーミッションを不適切に失うことになります。この行為により、攻撃者が権限を取得し、機密情報にアクセスし、おそらくはコマンドを実行できるようになるため、ソフトウェアのセキュリティが低下する可能性があります。リソースアクセスでは、ジョブの実行に必要な最低レベルの権限を常に使用する必要があります。
軽減と防止
フラグが立てられたこれらの欠陥をレビューし、特定されたパラメーターをより低い権限が確実に強制使用されるようにする安全なマクロまたはコードに置換する必要があります。
脆弱コード例
LONG foo(HKEY hkey, LPCTSTR lpSubKey, DWORD ulOptions, PHKEY phkResult) {
return RegOpenKeyEx(hkey, lpSubKey, ulOptions, KEY_ALL_ACCESS, phkResult);
}
Klocwork は 2 行目で指摘レポートを生成し、関数 RegOpenKeyEx が望ましいアクセスパラメーターとしてマクロ KEY_ALL_ACCESS を使用していることを示します。この緩いアクセスパーミッションマクロを使用すると、コードに脆弱性が生じるため、攻撃者がソフトウェアのセキュリティを低下させる可能性があります。この指摘をレビューし、KEY_ALL_ACCESS をより低い権限の使用を確実に実行する安全なマクロまたはコードに置換する必要があります。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。