CVE-2022-3786 challenge

Comment utiliser

  • Il faut générer le certificat racine et le certificat du serveur, c’est pour permettre de connaitre le certificat CA. Dans la réalité on suppose que l’attaquant aurait accès au CA ou du moins aurait un moyen de faire signer son certificat malveillant.
$ ./gencerts
  • Construire l’image docker, qui va copier les certificats générés pour les utiliser avec le serveur web qui écoute sur le port 443.
$ docker build -t challenge .
  • Lancer un conteneur utilisant l’image challenge, en redirigeant le serveur web sur le port local 10000.
$ docker run -p 10000:443 challenge
  • Il faut générer et signer un certificat dont le champ emailAddress du sujet est trop long. Un exemple de commandes est donné dans le fichier genclientcrt.

  • Lorsque le certificat client malicieux et sa clé privée sont générés. l’exploit peut être tenté avec le fichier exploit.

$ ./exploit
  • Une fois l’exploit effectué et si il a fonctionné, le serveur devrait avoir crash et une nouvelle tentative de connexion devrait échouer.

Files

  • Dockerfile contains the instruction to generate the challenge image
  • libcrypto.so.3 is the OpenSSL 3.0.5 vulnerable library
  • nginx.conf is the config file for the web server used
  • srv.ext is used to generate a web server certificate for localhost domain

Scripts

  • cleancrt removes the certs directory
  • exploit tries to connect to the web server using the client cert as authentication
  • gencerts generates the CA and signed web server cert
  • genclientcrt generates and sign the malicious client cert