Анализатор обнаружил раскрытие потенциально чувствительных данных, содержащихся в сообщении об ошибке. К таким данным относятся сообщения и стеки исключений.
Ошибки, связанные с неявным раскрытием чувствительных данных, относятся к категории 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); // <= } }
Данная диагностика классифицируется как:
|