Исправление является критическим или не критическим
Не критическое
Включен по умолчанию в .NET 9
No
Причина
Исключения поврежденного состояния (CSE) указывают на то, что в процессе имеется повреждение памяти. Если перехватывать их вместо того, чтобы позволить процессу завершиться сбоем, это может привести к уязвимостям в системе безопасности, если злоумышленнику удастся поместить эксплойт в поврежденную область памяти.
Описание правила
Исключение CSE указывает на то, что состояние процесса было повреждено, и не перехватывается системой. В случае повреждения состояния общий обработчик перехватывает это исключение, только если вы пометили метод атрибутом System.Runtime.ExceptionServices.HandleProcessCorruptedStateExceptionsAttribute. По умолчанию среда CLR не вызывает обработчики catch для исключений CSE.
Наиболее надежный вариант — разрешить аварийное завершение процесса без перехвата исключений такого типа. Даже код ведения журналов может позволить злоумышленникам использовать ошибки повреждения памяти.
Это предупреждение срабатывает при перехвате исключений CSE с помощью общего обработчика, который перехватывает все исключения, например catch (System.Exception e) или catch, без параметра исключения.
Устранение нарушений
Чтобы устранить эту проблему, выполните любое из следующих действий.
Удалите атрибут HandleProcessCorruptedStateExceptionsAttribute. При этом восстанавливается поведение среды выполнения по умолчанию, при котором исключения CSE не передаются в обработчики catch.
Удалите общий обработчик catch и используйте обработчики, перехватывающие исключения определенных типов. Это могут быть и исключения CSE при условии, что они могут быть обработаны безопасным образом (что бывает редко).
Повторно создайте исключение CSE в обработчике catch, чтобы передать его вызывающему объекту и вызвать завершение выполняющегося процесса.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Пример псевдокода
Нарушение
В приведенном ниже псевдокоде показан шаблон, обнаруживаемый этим правилом.
Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.
Отзыв о .NET
.NET — это проект с открытым исходным кодом. Выберите ссылку, чтобы оставить отзыв:
Присоединитесь к серии встреч для создания масштабируемых решений искусственного интеллекта на основе реальных вариантов использования с другими разработчиками и экспертами.