【问题标题】:External Control of System or Configuration Setting (CWE ID 15)系统或配置设置的外部控制 (CWE ID 15)
【发布时间】:2020-12-25 21:00:00
【问题描述】:

在扫描 Veracode 中的应用程序时,我们遇到了安全威胁问题。得到“系统或配置设置的外部控制(CWE ID 15)”。

扫描报告 using (var connection = new SqlConnection(connectionString))

我们通过传递连接字符串检查是否"SQLConnectionExists"

string sqlConnString = SqlHelper.GetSQLConnectionString(input.ServerName, dbName, isWinAuth, input.UserName, input.Password);
if (!DBUtil.CheckSQLConnectionExists(sqlConnString))
{
_ValidationMessage += "Database Unreachable \n";
isValid = false;
}

public static bool CheckSQLConnectionExists(string connectionString)
        {
            bool isExist = false;
            try
            {
                using (var connection = new SqlConnection(connectionString))
                {
                    connection.Open();
                    connection.Close();
                    isExist = true;
                }
            }
            catch (Exception ex)
            {
                Logger.Instance.Log(LogLevel.EXCEPTION, "CheckSQLConnectionExists Exception : " + ex.Message);
            }
            return isExist;
        }

public static string GetSQLConnectionString(string servername, string db, bool isWinAuth, string username, string password)
        {
            System.Data.SqlClient.SqlConnectionStringBuilder builder = new System.Data.SqlClient.SqlConnectionStringBuilder();
            builder["Data Source"] = servername;
            builder["Initial Catalog"] = db;

            if (isWinAuth)
            {
                builder["Integrated Security"] = "SSPI";
                builder["Trusted_Connection"] = "Yes";
            }
            else
            {
                builder["Persist Security Info"] = false;
                builder["User ID"] = username;
                builder["Password"] = password;
            }

            return builder.ConnectionString;
        }

在这行using (var connection = new SqlConnection(connectionString)) 中,我们在安全扫描中遇到错误。请有人提供解决此 Veracode 错误的建议。

【问题讨论】:

    标签: c# connection-string veracode mysqlconnection secure-coding


    【解决方案1】:

    Veracode 检测到 input.ServerName、input.UserName 和 input.Password 是用户控制的,这是一个风险。

    确保实施验证 - 如果可能,与白名单或已知的预定义服务器名称进行比较。此外,检查输入的(注入的)最小池大小是否大于预期。使用框架类,例如您使用的 SqlConnectionStringBuilder

    之后将此检查建议为mitigation

    【讨论】:

    • input.servername、input.UserName 和 input.Password 值不在我们手中。这些值会根据客户的选择而改变,我们无法准确预测模式。那么还有其他可能性吗?
    • 一些 SAST 平台会将 SqlConnectionStringBuilder 视为在运行时动态构造连接字符串的安全方式。如果无法预定义连接字符串,我会认为这是误报。我已经更新了我的答案以包含一些额外的建议
    • 正如你所说,它被标记为“误报”,因为我们使用 SqlConnectionStringBuilder 来获取连接字符串,它不允许连接字符串注入。
    猜你喜欢
    • 2017-04-11
    • 2018-11-23
    • 1970-01-01
    • 2012-06-14
    • 2019-08-12
    • 1970-01-01
    • 2020-06-14
    • 2013-11-03
    • 2011-09-05
    相关资源
    最近更新 更多