You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET6 WebApi项目Checkmarx误报Missing_Column_Encryption求助

Checkmarx Missing_Column_Encryption 误报分析(.NET6 WebAPI场景)

问题场景

使用Checkmarx基于OWASP Top 10-2017规则扫描.NET6 WebApi项目时,工具持续标记Missing_Column_Encryption漏洞,但被标记代码仅为SqlConnection的初始化及Open操作,与列加密逻辑无关。代码中_securityHelp.DecryptConn是用于解密appsettings.json中连接字符串的AES解密函数,即使将解密逻辑移出SqlConnection构造函数,误报仍未消失。

被标记的代码片段

// 初始写法
using var conn = new SqlConnection(_securityHelp.DecryptConn(config.GetConnectionString("DbConn")));
conn.Open();

// 调整后写法
var decryptedConnStr = _securityHelp.DecryptConn(config.GetConnectionString("DbConn"));
using var conn = new SqlConnection(decryptedConnStr);
conn.Open();

DecryptConn函数实现

public string DecryptConn(string encryptedConnStr)
{
    var key = Encoding.UTF8.GetBytes(Configuration["Encryption:Key"]);
    var iv = Encoding.UTF8.GetBytes(Configuration["Encryption:IV"]);
    
    using var aesAlg = Aes.Create();
    aesAlg.Key = key;
    aesAlg.IV = iv;
    
    var decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
    
    using var msDecrypt = new MemoryStream(Convert.FromBase64String(encryptedConnStr));
    using var csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read);
    using var srDecrypt = new StreamReader(csDecrypt);
    
    return srDecrypt.ReadToEnd();
}

Checkmarx配置说明

扫描规则启用:OWASP Top 10-2017,其中Missing_Column_Encryption规则处于激活状态

误报原因分析

  1. 规则匹配逻辑局限:Checkmarx的Missing_Column_Encryption规则核心检测逻辑是判断SqlConnection是否启用SQL Server列加密(Always Encrypted)。如果代码未显式设置SqlConnection.ColumnEncryptionSetting为Enabled,工具会默认判定存在漏洞,完全忽略连接字符串解密这类与列加密无关的操作。
  2. 上下文识别不足:工具无法识别DecryptConn函数仅用于解密连接字符串,而非处理敏感数据的存储/读取流程。它仅关注SqlConnection对象的创建环节,未关联后续是否实际执行了未加密的敏感数据操作。
  3. .NET6场景适配滞后:针对.NET6中简化的连接字符串处理方式,工具的静态分析逻辑未及时更新,误将连接字符串解密操作关联到列加密要求上。

验证与解决方法

  1. 标记误报并排除:在Checkmarx控制台中,针对该代码路径的Missing_Column_Encryption标记添加误报备注,说明代码仅用于连接字符串解密,未涉及敏感数据的未加密存储/读取,后续扫描将忽略该标记。
  2. 显式配置列加密状态:如果项目确实不需要启用Always Encrypted,可在SqlConnection初始化时显式设置列加密属性,让工具识别到已明确配置:
var conn = new SqlConnection(decryptedConnStr)
{
    ColumnEncryptionSetting = ColumnEncryptionSetting.Disabled
};
  1. 自定义规则调整:若拥有Checkmarx规则编辑权限,可修改Missing_Column_Encryption规则的检测逻辑,添加对连接字符串解密函数的白名单,避免无意义的触发。

内容的提问来源于stack exchange,提问作者Fire me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:10:29