CVE-2016-9638 – Privilege escalation on BMC Patrol

CVE-2016-9638 – Privilege escalation on BMC Patrol

Under Linux, setuid binaries is a well-known security topic since it allows users to run programs using the security context of their owner. Thus, if a program, whose owner is root, is executed by a non-privileged user, the binary will run under a privileged security context and will be able to perform actions that he normally wouldn’t be able to. Therefore, it is important to check that setuid binaries are well secured and that their behaviour can’t be altered.

Recently, during a security audit we discovered that BMC Patrol product was affected by a vulnerability that could lead to privilege escalation. Indeed, after a quick analysis on a deployed Patrol package, here is a list of setuid binaries available on a Linux system:

patrol_files_2

We have highlighted one specific binary called « listguests64 » which seems to present security flaws in the way it handles dependency programs. This vulnerability has been reported as CVE-2016-9638 and referenced here: http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9638.

 

Description of the vulnerability

With the command « strace -f ./listguests64 », we can see that the program is looking for a binary named « virsh » in multiple path locations :

strace_vuln_2

Actually, these paths are the paths contained in the user’s environment variable « PATH »:

path_var

 

Exploit scenario

The attack is pretty simple to perform as a simple user.

When launching the binary, we can see that it produces an error, saying « virsh : not found »

patrol_poc_1

Therefore, we create the missing file at any location and add this location to the PATH environment variable. For instance, it is possible to create a script that launches a shell. Thus, when launching the vulnerable binary, the evil « virsh » program will be executed and a root shell will appear:

patrol_poc_2

The vulnerability has been tested under versions 9.5 and 9.6, but other versions should be affected too.

Security patch

After contacting BMC on this issue, they did not considered this as a vulnerability (in a first place). After a while, they finally decided to patch the vulnerability and provided a fix in UNIX KM patch 9.13.10.02.

As a consequence, in the fixed version of “listguests64”, we can see that when launching the binary, « virsh » is only checked at one place, in « /usr/bin/ », which is not writeable by default:

strace_patched_2

 

===============================================================================================

Version française

Les binaires setuid sous Linux permettent à des utilisateurs d’exécuter ces programmes sous l’identité de leur propriétaire. Ainsi, si un programme, dont le propriétaire est root, est exécuté par un utilisateur non privilégié, le binaire tournera alors dans un contexte privilégié et pourra effectuer des actions que l’utilisateur ne pourrait normalement pas. Dès lors, il est important de vérifier que le comportement d’un binaire setuid ne peut être altéré, notamment lors de son exécution.

Récemment, pendant un audit de sécurité, il a été constaté que le produit Patrol de BMC était affecté par une vulnérabilité qui permettait d’élever ses privilèges. En effet, voici la liste des binaires setuid disponibles après déploiement du produit sur un système Linux :

patrol_files_2

Le binaire nommé « listguests64 » semble présenter un défaut de sécurité dans la manière dont il exécute un programme tiers. Cette vulnérabilité a été remontée en tant que CVE-2016-9638 et est référencée à l’adresse suivante : http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-9638.

 

Description de la vulnérabilité

Avec la commande « strace -f ./listguests64 », il est possible de voir que le programme va chercher un binaire nommé « virsh » à plusieurs endroits sur le système :

strace_vuln_2

En réalité, ces chemins utilisés par le programme sont ceux qui sont contenus dans la variable d’environnement « PATH », de l’utilisateur courant :

path_var

 

Scenario d’exploitation

L’attaque est plutôt simple à réaliser d’un point de vue utilisateur :

En exécutant le binaire « listguests64 », comme illustré par la capture d’écran ci-dessous, une erreur se produit avec le message d’erreur suivant « virsh : not found » :

patrol_poc_1

Dès lors, un utilisateur malveillant peut créer le fichier manquant dans n’importe quel répertoire et ajouter l’emplacement dans sa variable d’environnement « PATH ».  Par exemple, il est possible de créer un script lançant un shell. Ainsi, en lançant le binaire vulnérable, le programme « virsh » malveillant sera exécuté, et un prompt root apparaitra :

patrol_poc_2

Cette vulnérabilité a été testée sur les versions 9.5 et 9.6 du produit Patrol, mais d’autres versions devraient être également affectées.

Patch de sécurité

Après avoir contacté BMC sur cette vulnérabilité, les équipes techniques ne considéraient pas ce comportement comme étant une vulnérabilité. Finalement, ils ont par la suite décidé de patcher la faille de sécurité grâce à un correctif : UNIX KM patch 9.13.10.02.

Désormais, dans la version corrigée de « listguests64 », lors du lancement du binaire, « virsh » est appelé directement depuis « /usr/bin », qui n’est pas accessible en écriture par défaut, pour un utilisateur standard :

strace_patched_2

 

Article rédigé par: Christophe GARRIGUES