Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2021-28476 — Preuve de concept pour CVE-2021-28476, un déréférencement de pointeur arbitraire dans Hyper-V vmswitch.sys permettant un déni de service de l'invité vers l'hôte et une potentielle exécution de code à distance (RCE). | Kitploit
Outils/GitHubGitHub/australeo/cve-2021-28476
Analyse des VulnérabilitésExploitationRétro-ingénierieTests d'IntrusionAnalyse de Binaires
GitHubaustraleo/cve-2021-28476

CVE-2021-28476

Preuve de concept pour CVE-2021-28476, un déréférencement de pointeur arbitraire dans Hyper-V vmswitch.sys permettant un déni de service de l'invité vers l'hôte et une potentielle exécution de code à distance (RCE).

Voir le dépôt
5il y a 4 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2021-28476 : Déréférencement de pointeur arbitraire dans vmswitch.sys de Hyper-V depuis une machine virtuelle invitée

Résumé :

Une machine virtuelle invitée Hyper-V peut déclencher une condition de déni de service (DoS) sur son hôte sous-jacent en raison d'une analyse non sécurisée des entrées par la fonction VmsIfrInfoParams_OID_SWITCH_NIC_REQUEST dans vmswitch.sys. Le crash est causé par la fonction qui tente de déréférencer une valeur contrôlée par l'invité comme s'il s'agissait d'une adresse virtuelle de l'hôte. Ce bug peut être utilisé pour obtenir une exécution de code à distance (RCE) dans certaines conditions, notamment lorsque la requête est transmise à un périphérique matériel sous-jacent avec un pointeur vers des données contrôlées par l'attaquant. Cependant, je n'ai pas connaissance que cette technique ait été démontrée publiquement.

Date de divulgation :

Date du correctif :

11 mai 2021

Avis :

https://msrc.microsoft.com/update-guide/vulnerability/CVE-2021-28476

Vulnérabilité

Classe de bug :

Déréférencement arbitraire

Découverte :

Ingénierie inverse / Audit de code

Ce bug a été trouvé lors de ma reconnaissance initiale du pilote vmswitch. En examinant la documentation sur MSDN, il a été noté que la structure NDIS_SWITCH_NIC_OID_REQUEST contenait un pointeur, et je me suis souvenu avoir vu une référence au nom de la structure dans un nom de fonction. Une certaine ingénierie inverse a été effectuée pour essayer de comprendre comment la fonction pourrait fonctionner, étant donné qu'un invité ne devrait avoir aucune connaissance de l'adresse virtuelle de l'hôte, mais aucune vérification de sécurité réelle n'était présente. Un pilote Linux Hyper-V modifié a ensuite été utilisé pour envoyer une fausse requête à l'hôte, déclenchant immédiatement un crash.

Détails de la vulnérabilité :

Le pilote vmswitch.sys contient un certain nombre de fonctions pour gérer les requêtes OID RNDIS, y compris certaines spécifiquement destinées à journaliser les messages entrants. L'une d'elles, VmsIfrInfoParams_OID_SWITCH_NIC_REQUEST, gère les requêtes de type OID_SWITCH_NIC_REQUEST. Selon la documentation MSDN, cette requête est conçue pour permettre le transfert des requêtes OID d'une machine invitée vers un adaptateur réseau physique sous-jacent via l'adaptateur réseau externe du commutateur extensible Hyper-V.

Les requêtes OID utilisent une structure de message générique bien définie pour leur couche externe, qui comprend un « InformationBuffer » conçu pour contenir des données spécifiques à un type de message OID. Dans le cas de OID_SWITCH_NIC_REQUEST, l'InformationBuffer a la définition suivante (notez qu'elle diffère légèrement de la structure documentée, mais correspond à ce qui était fonctionnellement présent dans le code) :

root@kitploit:~
typedef struct _NDIS_SWITCH_NIC_OID_REQUEST {
	NDIS_OBJECT_HEADER		Header; 				//struct de taille u32
	u32 					Flags;
	NDIS_SWITCH_PORT_ID		SourcePortId; 			//type u32
	NDIS_SWITCH_PORT_NIC	SourceNicIndex; 		//type u32
	NDIS_SWITCH_PORT_ID		DestinationPortId; 		//type u32
	NDIS_SWITCH_PORT_NIC	DestinationNicIndex; 	//type u32
	PNDIS_OID_REQUEST		OidRequest;				//**devrait** être un pointeur vers une structure NDIS_OID_REQUEST transférée
} NDIS_SWITCH_NIC_OID_REQUEST, *PNDIS_SWITCH_NIC_OID_REQUEST;

Dans le cadre de l'analyse initiale de cet objet, VmsIfrInfoParams_OID_SWITCH_NIC_REQUEST tentera de désenvelopper la requête NDIS_OID_REQUEST transférée depuis la structure encapsulante _NDIS_SWITCH_NIC_OID_REQUEST. Cependant, si un invité Hyper-V fournit un emplacement mémoire invalide comme valeur OidRequest, le déréférencement provoquera une lecture hors limites et fera planter le noyau de la partition racine.

Le pseudo-code de la fonction affectée est le suivant :

root@kitploit:~
void VmsIfrInfoParams_OID_SWITCH_NIC_REQUEST(void* unknown1, u64 unknown2, _NDIS_SWITCH_NIC_OID_REQUEST* request, u32 buffer_size) {
	NDIS_OID_REQUEST* forwarded_request;

	if((unknown1 != 0) && (buffer_size != 0)) {
		if(buffer_size > 0x20) {
			forwarded_request = (NDIS_OID_REQUEST*)request->OidRequest; //le déréférencement et le crash se produisent ici
		}

	}

	...

	//tronqué
	...

	return;
}
Télécharger l’outil