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 替换为更安全的宏或代码(这些宏或代码会确保使用更低级别的特权)。