# V5621. OWASP. Error message contains potentially sensitive data that may be exposed.

Анализатор обнаружил раскрытие потенциально чувствительных данных, содержащихся в сообщении об ошибке. К таким данным относятся сообщения и стеки исключений.

Ошибки, связанные с неявным раскрытием чувствительных данных, относятся к категории 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 как критические и относятся к типу: Ошибки непроверенного использования чувствительных данных (ввода пользователя, файлов, сети и пр.).

Данная диагностика классифицируется как:

CWE-209 OWASP-8.3.5