Анализатор обнаружил раскрытие потенциально чувствительных данных, содержащихся в сообщении об ошибке. К таким данным относятся сообщения и стеки исключений.
Ошибки, связанные с неявным раскрытием чувствительных данных, относятся к категории A04:2021 – Insecure Design списка OWASP Top 10 Application Security Risks.
Рассмотрим пример уязвимости:
public void Foo(string value)
{
try
{
int intVal = int.Parse(value);
....
}
catch (Exception e)
{
Console.WriteLine(e.StackTrace); // <=
}
}
Не рекомендуется показывать пользователям стеки исключений. Это может привести к раскрытию информации о деталях реализации проекта. Например, могут быть раскрыты названия используемых в проекте библиотек, а они могут содержать известные уязвимости. Злоумышленник может использовать эту информацию для атаки на проект.
Также стек исключения для стандартных классов исключений .NET может быть раскрыт через метод 'ToString':
public void Foo(string value)
{
try
{
int intVal = int.Parse(value);
....
}
catch (Exception e)
{
Console.WriteLine(e.ToString()); // <=
}
}
Следует помнить, что 'ToString' вызывается внутри методов вывода, принимающих 'object' в качестве аргумента:
Console.WriteLine(e);
Решением этой проблемы архитектуры может быть предотвращение вывода чувствительной информации пользователю. Например, можно использовать ресурсы, явно связанные с исключениями, но не содержащие чувствительной информации. Простой пример с использованием 'enum':
enum ErrorCode
{
/// <summary>
/// ArgumentNull exception occurred
/// </summary>
ArgumentNull,
....
Unknown
}
public void Foo(string value)
{
try
{
int intVal = int.Parse(value);
....
}
catch (Exception e)
{
ErrorCode errCode = e switch
{
ArgumentNullException => ErrorCode.ArgumentNull,
....
_ => ErrorCode.Unknown
};
Console.WriteLine("An error has occurred: " + errCode); // <=
}
}
Выявляемые диагностикой ошибки классифицируются согласно ГОСТ Р 71207–2024 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.). |
Данная диагностика классифицируется как:
|