CET suportado por padrão
apphost
e singlefilehost
agora estão marcados como compatíveis com Intel CET (eles são compilados com a /CETCOMPAT
opção). Essa alteração foi feita para aumentar a segurança de aplicativos .NET. No entanto, ele impõe uma limitação às bibliotecas compartilhadas que os aplicativos .NET podem carregar e interoperar. As bibliotecas não têm permissão para definir o contexto do thread para um local com um ponteiro de instruções que não esteja presente na pilha de sombras ou em uma tabela de endereços de continuação permitidos para tratamento de exceções.
Comportamento anterior
Anteriormente, as bibliotecas compartilhadas carregadas no processo .NET eram capazes de definir o contexto de thread usando SetThreadContext, RtlRestoreContext/NtContinue
ou seus manipuladores de exceção para qualquer local no espaço de endereçamento do processo.
Novo comportamento
A partir do .NET 9, as bibliotecas compartilhadas carregadas no processo .NET só têm permissão para definir o contexto de thread usando SetThreadContext, RtlRestoreContextNtContinue
/ ou seus manipuladores de exceção para locais que são:
- Presente na pilha de sombras.
- Em uma tabela de endereços de continuação permitidos para tratamento de exceções (gerado pela opção do
/EHCONT
compilador ou pelaSetProcessDynamicEHContinuationTargets
API).
Se as bibliotecas tentarem alterar um contexto de thread para qualquer outro local, o processo será encerrado.
Versão introduzida
.NET 9 Visualização 6
Tipo de mudança de rutura
Essa alteração pode afetar a compatibilidade binária.
Razão para a alteração
A habilitação do CET aumenta a segurança dos aplicativos .NET adicionando proteção de pilha imposta por hardware que oferece proteção robusta contra explorações de ROP (programação orientada a retorno).
Ação recomendada
Soluções:
- Você pode desativar o CET adicionando
<CETCompat>false</CETCompat>
ao arquivo de projeto do seu aplicativo (por exemplo, arquivo .csproj ). - Use o aplicativo de Segurança do Windows ou uma política de grupo para desativar a imposição de pilha com suporte de hardware para o aplicativo .NET específico. Para obter mais informações, consulte Habilitar proteção contra exploração.
APIs afetadas
- N/A