Handles de contexte strict et de type strict
Utilisez l’attribut strict_context_handle pour tous les handles de contexte. Par défaut, un handle de contexte n’est pas associé à une interface, ce qui signifie qu’un handle de contexte peut être créé sur une interface, puis transmis à une autre. Il s’agit d’une attaque facile, et de nombreux serveurs RPC ne parviennent pas à l’empêcher.
Si deux interfaces coexistent dans le même processus, un attaquant peut ouvrir un handle de contexte sur une interface et le transmettre à une autre, ce qui peut basculer sur les données inattendues. De nombreux développeurs croient que leur logiciel est la seule interface d’un processus, mais ce n’est souvent pas le cas, car le système et de nombreux composants tiers utilisent RPC en interne, et ces interfaces peuvent créer des handles de contexte. Lorsque l’attribut strict_context_handle est utilisé, le temps d’exécution RPC garantit qu’un contexte créé sur une interface ne peut être passé qu’en tant qu’argument aux méthodes de cette interface.
Dans les situations où une application est développée pour Windows Vista, l’utilisation de type_strict_context_handle est disponible et recommandée. Les handles de contexte ne sont pas associés à un type spécifique par défaut. Lorsque plusieurs types de handles de contexte sont utilisés dans le même processus, il est possible pour un client malveillant de passer un handle de contexte à la place d’un autre pour produire des résultats indésirables. L’utilisation de type_strict_context_handle permet aux applications d’appliquer la cohérence du type de handle de contexte et d’empêcher toute utilisation de type de handle de contexte incompatible.