SV.LPP.VAR

在危险函数的变量中使用不安全的参数

系统中有若干 Microsoft Windows 函数可使用危险的宏作为参数,让恶意用户可以访问注册表或运行任意命令。RegCreateKeyEx、SHRegCreateUSKey 或 RegOpenKeyEx 会将其希望访问的参数设置为 KEY_ALL_ACCESS,恶意用户可利用这一点修改注册表中的属性。如果键包含对 DLL 的引用,则修改此类引用可以允许执行任意命令。

SV.LPP.VAR 检查器查找那些 RegCreateKeyEx、SHRegCreateUSKey 或 RegOpenKeyEx 访问参数是可能被设为 KEY_ALL_ACCESS 的变量的实例。

漏洞与风险

使用 all-access 宏会导致不适当地降低资源访问的权限。此做法将允许攻击者获取权限、访问敏感信息并可能执行多项命令,这可能威胁软件的安全。资源访问应始终使用完成作业所需的最低级别的权限。

缓解与预防

应该检查这些被标记出的漏洞,并且将所标识的参数替换为更安全的宏或代码(这些宏或代码会确保强制实施更低级别的特权)。

漏洞代码示例 1

复制
    LONG foo(LPCTSTR lpSubKey, DWORD ulOptions, PHKEY phkResult) {
        REGSAM samDesired = KEY_ALL_ACCESS;
        return RegOpenKeyEx(HKEY_USERS, lpSubKey, ulOptions, samDesired, phkResult);
    }

Klocwork 针对第 3 行生成问题报告,表明函数 RegOpenKeyEx 正在将宏 KEY_ALL_ACCESS 用作其希望的访问参数。使用此宽松型访问权限宏将导致代码漏洞,该漏洞可能造成攻击者对软件的安全性带来威胁。应该检查此问题,并且将任何可以设置为 KEY_ALL_ACCESS 的变量替换为更安全的宏或代码(这些宏或代码会确保使用更低级别的特权)。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。