CVE-2022-24481-POC
En résumé
Ce PoC est rétroconçu à partir d'un exp (SHA1:fec933b0c46366a1fb272bfaf82a8262597a8d75) et de nombreux moteurs AV l'ont détecté comme CVE-2022-24521. Après analyse, j'ai découvert qu'il s'agit peut-être de l'exp pour CVE-2022-24481, car CVE-2022-24521 n'est pas une vulnérabilité de confusion de type.
Le bogue est causé par une manipulation incorrecte du pointeur CLFS_CONTAINER_CONTEXT.pContainer, qui est appelé dans la fonction CClfsContainer::Close. Donc, s'il est modifié auparavant, il exécutera du code arbitraire. Mais comment modifier ce pointeur ?
La RCA de l'exp (fec933b0c46366a1fb272bfaf82a8262597a8d75) est la suivante :
- L'exp modifie CLFS_BASE_RECORD_HEADER.rgClients pour pointer vers le décalage de CLFS_CONTAINER_CONTEXT.
- Dans la fonction CClfsLogFcbPhysical::Initialize, il lit une certaine valeur en mémoire depuis CLFS_BASE_RECORD_HEADER.rgClients (le décalage de CLFS_CONTAINER_CONTEXT).
- CClfsBaseFilePersisted::LoadContainerQ génère le pointeur de la classe Container et le remplit dans CLFS_CONTAINER_CONTEXT.pContainer.
- Dans la fonction CClfsRequest::Cleanup, il écrit la valeur de l'étape 2 dans le contexte client qui est le même que le contexte du conteneur en mémoire.
- Dans la fonction CClfsRequest::Close, il analyse CLFS_CONTAINER_CONTEXT et appelle pContainer (déclencheur).