Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2020-25637 PoC — Red Hat libvirt 资源管理错误漏洞

Source
Associated Vulnerability
Title:Red Hat libvirt 资源管理错误漏洞 (CVE-2020-25637)
Description:Red Hat libvirt是美国红帽(Red Hat)公司的一个用于实现Linux虚拟化功能的Linux API,它支持各种Hypervisor,包括Xen和KVM,以及QEMU和用于其他操作系统的一些虚拟产品。 Red Hat libvirt 资源管理错误漏洞。该漏洞源于网络系统或产品对系统资源(如内存、磁盘空间、文件等)的管理不当。
Description
Double Free
Readme
*********************************************************************************        

     CVE-2020-25637 
                                        
*********************************************************************************
                                                   
    *** Description ***
    
*********************************************************************************  
                                                             
Un problème de double mémoire libre s'est produit dans l'API libvirt, dans les versions antérieures à la version 6.8.0, chargée de demander des informations sur les interfaces réseau d'un domaine QEMU en cours d'exécution. Cette faille affecte le pilote de contrôle d'accès polkit. Plus précisément, les clients se connectant au socket en lecture-écriture avec des autorisations ACL limitées pourraient utiliser cette faille pour planter le démon libvirt, entraînant un déni de service, ou potentiellement augmenter leurs privilèges sur le système. La plus grande menace de cette vulnérabilité concerne la confidentialité et l'intégrité des données ainsi que la disponibilité du système.

La menace la plus importante de cette vulnérabilité concerne :

* La confidentialité 
* L'intégrité des données
* La disponibilité du système.

Les scores de la faille :

* une faille modérée par RedHat avec une moyenne de 6.4

  * Vecteur            = Local
  * Complexité         = Faible
  * Authentification   = Aucune

* une faille modérée par NVD avec une moyenne de 6.7

  * Vecteur           = Local
  * Complexité        = Élevée 
  * Authentification  = Aucune
  
*********************************************************************************  
                                                   
    *** Diffèrent outils et prérequis importants a mettre en place pour exploiter cette faille ***
        
*********************************************************************************  
 
 1) Installation qemu-kvm et libvirt :

Avant tout il est nécessaire de vitrifier la compatibilité de notre système d'exploitation il suffit de passer cette commande:

     grep -E -c "vmx|svm" /proc/cpuinfo

Si la commande répond ok vous pouvez procéder a l'installation :

    sudo apt-get -y install qemu-kvm libvirt-bin virt-top outils-libguestfs virtinst bridge-utils
    
2) Installation vagrant :

Pour installer vagrant il suffit de passer cette commande :

    sudo apt -y install vagrant
    
Une fois que vous avez installé Vagrant et KVM, vous devriez être prêt à installer un plugin libvirt pour pouvoir commencer à gérer les machines virtuelles KVM à l'aide de Vagrant.

    vagrant plugin install vagrant-libvirt
    
vous pouvez confirmer que le plugin a été installé

    vagrant plugin list
    
3) Boite vagrant (box vagrant) :

Il est possible d’utiliser un modèle prêt directement par vagrant dans notre cas on utilisera une image ubuntu 20.04.

Pour ajouter notre image à la boite vagrant il suffit de passer cette commande :

    vagrant box add generic / ubuntu1804 --provider = libvirt
    
Pour Consulter la liste des boîtes présente localement :

    vagrant box list
    
4) Débogage
 
Deux possibilités de Débogage 

* GDB, Si l'outil n'est pas disponible dans votre système d'exploitation passer cette commande :

      sudo apt-get install gdb

* Valgrind, Si l'outil n'est pas disponible dans votre système d'exploitation passer cette commande :

      sudo apt-get install valgrind
    
*********************************************************************************  

    *** Exécution du code ***

********************************************************************************* 

Lancer une vm via vagrant :

    vagrant up
  
Avant tout installer la bibliothèque :

    sudo apt-get install -y libvirt-dev
    
Compilation :

    gcc -g -Wall info1.c -o info1 -lvirt
    
Exécution du code : 

    ./info1 qemu:///system vagrant-vms_ubuntu-01
    
Exécution avec débogage  :
 
    valgrind --leak-check=full --show-leak-kinds=all --track-origins=yes --verbose --log-file=valgrind-out.txt ./info1 qemu:///system vagrant-vms_ubuntu-01
    

*********************************************************************************  

    *** Activer la faille ***

********************************************************************************* 

Avant d'activer la faille savoir le fonctionnement de la focntion qui pose probléme dans libvirt est primordial

Suppons que un attaquant peut provoquer l'utilisation d'une zone mémoire libérée via qemuAgentGetInterfaces () de libvirt, précisément dans la zone de mémoire de la variable ifname afin de mener un déni de service, et éventuellement d'exécuter du code. 
* Cette fonction traite une liste des interfaces d'un domaine en cours d'exécution avec leur adresses  IP et MAC.
* Ensuite renvoie le nombre d'interfaces en cas de succès, sinon  -1 en cas d'erreur.

Le moment attendu est arrivé 

Une fois le fichier vagrant est lancer, il faut lancer le code info1.c dans une machine virtuelle elle-même lancée par Qemu/KVM. Donc faire des VMs dans une VM c’est à dire exécuter le code dans la VM crée par vagrant.


*********************************************************************************  

    *** Correction de cette faille ***

*********************************************************************************  

Il suffit de passer la variable ifname à null dans la focntion qemuAgentGetInterfaces () de libvirt, C’est à dire la viable ifname doit être libérée pour chaque interface.


*********************************************************************************  

    *** Démonstration ***

*********************************************************************************  
 
Vous trouverez une démonstration simple de problème ( double free ) dans le fichier PowerPoint.

 
*********************************************************************************  

    *** Important ***

*********************************************************************************  
 
 
 Le projet n’est pas abouti jusqu'à la fin pour des raisons de complexité de la faille et de matériel ainsi le manque du temps. 
 
 








 




 


 
 
File Snapshot

[4.0K] /data/pocs/e314d456c8be3833ff329233d1ddca58700554e2 ├── [4.0K] Bibliographie │   └── [ 798] README.md ├── [4.0K] Code │   ├── [2.7K] info1.c │   └── [ 516] vagrant ├── [4.0K] Docs │   ├── [1005K] Veille_Presentation_BRAHMI_AYYACH.pdf │   └── [ 14M] Veille_Presentation_BRAHMI_AYYACH.pptx ├── [1.0K] LICENSE └── [6.2K] README.md 3 directories, 7 files
Shenlong Bot has cached this for you
Remarks
    1. It is advised to access via the original source first.
    2. If the original source is unavailable, please email f.jinxu#gmail.com for a local snapshot (replace # with @).
    3. Shenlong has snapshotted the POC code for you. To support long-term maintenance, please consider donating. Thank you for your support.