Risque

  • Élévation de privilèges

Systèmes affectés

  • Microsoft Windows toutes versions

Résumé

Le 27 août 2018, un utilisateur a publié sur Twitter l'existence d'une vulnérabilité de type élévation de privilèges ainsi qu'un lien vers un dépôt GitHub contenant le code d'attaque exploitant cette vulnérabilité. Ce code est stable et facilement adaptable.

Si la preuve de concept ne fonctionne en l'état que sur les versions 64 bits de Windows, la vulnérabilité est présente dans toutes les versions de Windows (de Windows 7 à Windows 10, Windows Server 2008 R2 à Windows Server 2016).

Cette vulnérabilité provient du planificateur de tâches, plus précisément de l'interface RPC ITaskSchedulerService.

Parmi les fonctions exportées par cette interface RPC, la fonction SchRpcSetSecurity permet de fixer arbitrairement un descripteur de sécurité (Discretionary access control lists ou DACLs) pour un fichier contenu dans le répertoire C:\Windows\Tasks.

Comme tout le monde peut écrire dans le répertoire C:\Windows\Tasks, il est possible de créer un lien non brisable (hard link) vers n'importe quel autre fichier sur lequel on possède les droits en lecture. Lorsque la fonction SchRpcSetSecurity est appelée, la DACL du fichier pointé par le lien est remplacée par celle spécifiée lors de l'appel à la fonction SchRpcSetSecurity. Cette action est réalisée avec le niveau de privilège System.

Cette vulnérabilité ne s'exploite que localement, elle peut toutefois être combinée avec une vulnérabilité d'exécution de code à distance.

Le CERT-FR rappelle ici l'importance d'installer les correctifs de sécurité dans les plus bref délais lorsque ceux-ci sont disponibles.

Jusqu'à ce que cette vulnérabilité soit corrigée, on peut considérer que si un attaquant arrive à exécuter du code sur une machine, il sera en mesure d'obtenir une compromission totale à moindre coût.

Solution

Se référer au bulletin de sécurité de l'éditeur pour l'obtention des correctifs (cf. section Documentation).

Contournement provisoire

Dans l'attente d'un correctif de la part de Microsoft, le CERT-FR propose de bloquer l'accès en écriture au répertoire C:\Windows\Tasks par le biais d'une Access Control Entry (ACE).

Cette mesure est restrictive mais permet d'éviter la création du lien matériel. Cela bloque donc de fait l'utilisation de la vulnérabilité pour acquérir des privilèges System.

Cette mesure est réversible et peut être désactivée le temps de créer un nouvelle tâche légitime.

Avec l'interface graphique, positionner une ACE sur le répertoire C:\Windows\Tasks avec les propriétés suivantes :

  • Type : Deny
  • Principal : EveryOne
  • Apply to: This folder, subfolders and files
  • Rights : 'Create files / write data' et 'Create folders / append data'

En ligne de commande :

[pastacode lang="c" manual="cacls%20c%3A%5CWindows%5CTasks%20%2FS%3A%22D%3APAI(D%3BOICI%3BDCLC%3B%3B%3BWD)(A%3B%3B0x1200ab%3B%3B%3BAU)(A%3B%3BFA%3B%3B%3BBA)(A%3BOICIIO%3BGA%3B%3B%3BBA)(A%3B%3BFA%3B%3B%3BSY)(A%3BOICIIO%3BGA%3B%3B%3BSY)(A%3BOICIIO%3BGA%3B%3B%3BCO)%22" message="" highlight="" provider="manual"/]

La désactivation de la mesure de contournement consiste à enlever l'ACE d'interdiction ou en remettant les droits d'origine sur le répertoire C:\Windows\Tasks

[pastacode lang="c" manual="cacls%20c%3A%5CWindows%5CTasks%20%2FS%3A%22D%3APAI(A%3B%3B0x1200ab%3B%3B%3BAU)(A%3B%3BFA%3B%3B%3BBA)(A%3BOICIIO%3BGA%3B%3B%3BBA)(A%3B%3BFA%3B%3B%3BSY)(A%3BOICIIO%3BGA%3B%3B%3BSY)(A%3BOICIIO%3BGA%3B%3B%3BCO)%22" message="" highlight="" provider="manual"/]

Documentation