Méfiez-vous des autres points de terminaison RPC fonctionnant dans le même processus
Lorsqu'une application réside dans un processus avec d'autres serveurs RPC, celles-ci peuvent utiliser tous les protocoles disponibles. Par conséquent, si un composant appelle RpcServerUseProtseq* pour LRPC uniquement, il n’est pas nécessairement accessible via LRPC uniquement. Celui-ci peut être accessible via d’autres protocoles, car d’autres serveurs RPC dans le processus peuvent écouter sur des canaux ou des sockets (par exemple).
Comme pour les handles de contexte stricts, ne pas placer un autre point de terminaison dans le processus ne signifie pas qu’un autre point de terminaison n’existe pas. Quelle que soit la façon dont vous inscrivez votre serveur, il n’existe aucune association spéciale entre votre interface et votre point de terminaison ; toutes les interfaces sont appelantes sur tous les points de terminaison de ce processus. C’est une autre raison pour laquelle le modèle de sécurité de point de terminaison est inefficace ; si un descripteur de sécurité est placé sur un point de terminaison, les attaquants peuvent appeler l’interface sur un autre point de terminaison.
Pour garantir qu’un processus est appelé uniquement sur une séquence de protocole spécifique, inscrivez une fonction de rappel de sécurité et, dans cette fonction, vérifiez la séquence de protocole effectuée par l’appel.