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
NachoVPN — Un serveur SSL-VPN délicieux, mais malveillant 🌮 | Kitploit
Outils/GitHubGitHub/amberwolfcyber/nachovpn
Escalade de PrivilègesAnalyse des VulnérabilitésExploitationSécurité RéseauTests d'IntrusionRed TeamingDéveloppement de Charges UtilesAttaque Adversariale
GitHubamberwolfcyber/nachovpn

NachoVPN

Un serveur SSL-VPN délicieux, mais malveillant 🌮

Voir le dépôt
26731il y a 5 moisVérifié par Kitploit

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

NachoVPN 🌮🔒

NachoVPN est une preuve de concept qui démontre l'exploitation de clients SSL-VPN, à l'aide d'un serveur VPN malveillant.

Il utilise une architecture basée sur des plugins afin que la prise en charge de produits SSL-VPN supplémentaires puisse être apportée par la communauté. Il prend actuellement en charge plusieurs produits VPN d'entreprise populaires, tels que Cisco AnyConnect, SonicWall NetExtender, Palo Alto GlobalProtect et Ivanti Connect Secure.

Pour plus de détails, consultez notre article de blog, ainsi que la présentation HackFest Hollywood 2024 [diapositives|vidéo].

Installation

Prérequis

  • Python 3.9 ou version ultérieure
  • Docker (facultatif)
  • osslsigncode (Linux uniquement)
  • msitools (Linux uniquement)
  • python3-netfilter (Linux uniquement)
  • git

Configuration Linux

NachoVPN est développé et testé sur Ubuntu 22.04.

  • Installez python3-nftables et nftables

  • Utilisez éventuellement setcap pour éviter d'avoir besoin de sudo :

    root@kitploit:~
    sudo setcap 'cap_net_raw,cap_net_bind_service,cap_net_admin=eip' /usr/bin/python3.10
    
  • Activez le transfert IP :

    root@kitploit:~
    sudo sysctl -w net.ipv4.ip_forward=1
    

Installation à partir des sources

NachoVPN peut être installé depuis GitHub avec pip. Notez que cela nécessite l'installation de git.

Tout d'abord, créez un environnement virtuel.

Sur Linux, assurez-vous que l'environnement virtuel a accès aux site-packages du système, afin que nftables fonctionne :

root@kitploit:~
python3 -m venv env --system-site-packages
source env/bin/activate

Sur Windows, nftables (et donc le transfert de paquets) est désactivé, utilisez donc :

root@kitploit:~
python -m venv env
.\env\Scripts\activate

Ensuite, installez NachoVPN :

root@kitploit:~
pip install git+https://github.com/AmberWolfCyber/NachoVPN.git

Si vous préférez utiliser Docker, vous pouvez récupérer le conteneur depuis le GitHub Container Registry :

root@kitploit:~
docker pull ghcr.io/AmberWolfCyber/nachovpn:release

Construction pour la distribution

Construction d'un fichier wheel

Tout d'abord, clonez ce dépôt, puis installez setuptools et wheel avec pip. Vous pouvez ensuite exécuter le script setup.py :

root@kitploit:~
git clone https://github.com/AmberWolfCyber/NachoVPN
pip install -U setuptools wheel
python setup.py bdist_wheel

Cela générera un fichier wheel dans le répertoire dist, qui peut être installé avec pip :

root@kitploit:~
pip install dist/nachovpn-1.0.0-py3-none-any.whl

Construction pour le développement local

Alternativement, pour le développement local, vous pouvez installer le paquet en mode éditable en utilisant :

root@kitploit:~
pip install -e .

Construction d'une image conteneur

Vous pouvez construire l'image conteneur avec la commande suivante :

root@kitploit:~
docker build -t nachovpn:latest .

Exécution

Pour exécuter le serveur de manière autonome, utilisez :

root@kitploit:~
python -m nachovpn.server

Alternativement, vous pouvez exécuter le serveur avec Docker :

root@kitploit:~
docker run -e SERVER_FQDN=connect.nachovpn.local -e EXTERNAL_IP=1.2.3.4 -v ./certs:/app/certs -p 80:80 -p 443:443 --rm -it nachovpn

Cela générera un certificat pour le SERVER_FQDN à l'aide de certbot, et l'enregistrera dans le répertoire certs, que nous avons monté dans le conteneur.

Alternativement, à des fins de test, vous pouvez ignorer la génération du certificat en définissant la variable d'environnement SKIP_CERTBOT.

Cela générera plutôt un certificat auto-signé.

root@kitploit:~
docker run -e SERVER_FQDN=connect.nachovpn.local -e SKIP_CERTBOT=1 -e EXTERNAL_IP=1.2.3.4 -p 443:443 --rm -it nachovpn

Un fichier docker-compose d'exemple est également fourni pour plus de commodité.

Débogage

Vous pouvez exécuter nachovpn avec les arguments de ligne de commande -d ou --debug afin d'augmenter la verbosité des journaux, ce qui peut faciliter le débogage.

Alternativement, si les journaux sont trop verbeux, vous pouvez utiliser l'argument de ligne de commande q ou --quiet à la place.

Plugins

NachoVPN prend en charge les plugins et fonctionnalités suivants :

Gestionnaires d'URI

  • Le gestionnaire d'URI Ivanti Connect Secure (Pulse Secure) peut être déclenché en visitant l'URL /pulse sur le serveur NachoVPN.
  • Le gestionnaire d'URI SonicWall NetExtender peut être déclenché en visitant l'URL /sonicwall sur le serveur NachoVPN. Cela nécessite que SonicWall Connect Agent soit installé sur la machine cliente.
  • Le gestionnaire d'URI Delinea peut être déclenché en visitant l'URL /delinea sur le serveur NachoVPN.

Notes d'exploitation

  • Il est recommandé d'utiliser un certificat TLS signé par une autorité de certification de confiance. Le conteneur Docker automatise ce processus pour vous, à l'aide de certbot. Si vous n'utilisez pas de certificat de confiance, NachoVPN générera à la place un certificat auto-signé, ce qui, dans la plupart des cas, entraînera soit un avertissement de certificat au client, soit un refus de connexion à moins que vous ne modifiiez les paramètres du client pour accepter les certificats auto-signés. Pour le plugin Palo Alto GlobalProtect, cela entraînera également l'échec de l'installateur MSI.
  • Afin de simuler un certificat de signature de code valide pour le plugin SonicWall, NachoVPN signera la charge utile NACAgent.exe avec un certificat auto-signé. À des fins de test, vous pouvez télécharger et installer ce certificat d'autorité de certification depuis /sonicwall/ca.crt avant de déclencher l'exploit. Pour les cas d'utilisation en production, vous devrez obtenir un certificat de signature de code valide auprès d'une autorité de certification publique, signer votre charge utile NACAgent.exe, puis la placer dans le répertoire payloads (ou la monter en volume dans /app/payloads, si vous utilisez Docker).
  • Pour plus de commodité, une charge utile NACAgent.exe par défaut est générée pour le plugin SonicWall et écrite dans le répertoire payloads. Elle lance simplement un nouveau processus cmd.exe sur le bureau de l'utilisateur actuel, s'exécutant en tant que SYSTEM.

Désactivation d'un plugin

Pour désactiver un plugin, ajoutez-le à la variable d'environnement DISABLED_PLUGINS. Par exemple :

root@kitploit:~
DISABLED_PLUGINS=CiscoPlugin,SonicWallPlugin

Variables d'environnement

NachoVPN est configuré à l'aide de variables d'environnement. Cela le rend facilement compatible avec les déploiements conteneurisés.

Variables d'environnement globales :

Variables d'environnement spécifiques aux plugins :

Mesures d'atténuation

Nous recommandons les mesures d'atténuation suivantes :

  • Assurez-vous que les clients SSL-VPN sont mis à jour vers la dernière version disponible auprès du fournisseur.
  • La plupart des clients VPN prennent en charge le verrouillage du profil VPN sur un point de terminaison spécifique, ou l'utilisation d'un mode VPN toujours actif. Cela devrait être activé lorsque c'est possible.
  • Malheureusement, dans certains cas, ce verrouillage peut être supprimé par un utilisateur local malveillant. Il est donc également recommandé d'utiliser des règles de pare-feu basées sur l'hôte pour restreindre les adresses IP avec lesquelles le client VPN peut communiquer.
  • Envisagez d'utiliser une politique de contrôle des applications, telle que WDAC, ou une solution EDR pour garantir que seuls les exécutables et scripts approuvés peuvent être exécutés par le client VPN.
  • Détectez et alertez sur les clients VPN exécutant des processus enfants non standard.

Références

  • AmberWolf Blog: NachoVPN
  • HackFest Hollywood 2024: Very Pwnable Networks: Exploiting the Top Corporate VPN Clients for Remote Root and SYSTEM Shells, Rich Warren & David Cash [video]
  • BlackHat 2008: Leveraging the Edge: Abusing SSL VPNs, Mike Zusman
  • BlackHat 2019: Infiltrating Corporate Intranet Like NSA, Orange Tsai & Meh Chang
  • NCC Group: Making New Connections: Leveraging Cisco AnyConnect Client to Drop and Run Payloads, David Cash & Julian Storr
  • The OpenConnect Project

Contribuer

Nous accueillons volontiers les contributions ! Veuillez ouvrir une issue ou soumettre une Pull Request.

Si vous êtes intéressé par le développement d'un nouveau plugin, vous pouvez consulter l'ExamplePlugin pour commencer.

Licence

NachoVPN est sous licence MIT. Consultez le fichier LICENSE pour plus de détails.

Télécharger l’outil
PluginProduitCVERCE WindowsRCE macOSPrivilégiéGestionnaire d'URICapture de paquetsDémo
CiscoCisco AnyConnectN/A✅✅❌❌✅Windows / macOS
SonicWallSonicWall NetExtenderCVE-2024-29014✅❌✅✅❌Windows
PaloAltoPalo Alto GlobalProtectCVE-2024-5921 (correctif partiel)✅✅✅❌✅Windows / macOS / iOS
PulseSecureIvanti Connect SecureCVE-2020-8241 (contourné)✅✅✅✅ (Windows uniquement - désactivé par défaut dans 22.8R1)✅Windows
NetskopeNetskopeCVE-2025-0309✅❌✅❌❌Windows
DelineaProtocol HandlerCVE-2026-????✅✅❌✅❌Windows
  • Le plugin Palo Alto GlobalProtect nécessite que les installateurs MSI et le fichier msi_version.txt soient présents dans le répertoire downloads. Ajoutez-les manuellement ou exécutez le script msi_downloader.py pour les télécharger.
  • Pour effectuer l'attaque de rétrogradation de Palo Alto GlobalProtect, assurez-vous que GlobalProtect.msi.old et GlobalProtect64.msi.old sont présents dans le dossier downloads. Ces fichiers doivent contenir les installateurs MSI non modifiés d'une version antérieure à 6.2.6 (par exemple 6.2.5).
  • VariableDescriptionDéfaut
    SERVER_FQDNLe nom de domaine complet du serveur.connect.nachovpn.local
    EXTERNAL_IPL'adresse IP externe du serveur.127.0.0.1
    WRITE_PCAPIndique s'il faut écrire les fichiers PCAP capturés sur le disque.false
    DISABLED_PLUGINSUne liste de plugins à désactiver, séparés par des virgules.
    USE_DYNAMIC_SERVER_THUMBPRINTIndique s'il faut calculer dynamiquement l'empreinte du certificat serveur à partir du serveur (utile derrière un proxy).false
    SERVER_SHA1_THUMBPRINTPermet de remplacer l'empreinte SHA1 calculée pour le certificat serveur.
    SERVER_MD5_THUMBPRINTPermet de remplacer l'empreinte MD5 calculée pour le certificat serveur.
    SMB_ENABLEDActive le partage SMB, disponible via le tunnel à \\10.10.0.1\<SMB_SHARE_NAME>false
    SMB_SHARE_NAMELe nom à utiliser pour le partage SMBSHARE
    SMB_SHARE_PATHLe chemin du répertoire à utiliser pour le partage SMBsmb
    TUNNEL_PRIVATELorsqu'elle est définie sur true, active le tunneling mais désactive le transfert Internet pour les clients VPN. Les clients ne peuvent accéder qu'au partage SMB.false
    TUNNEL_FULLLorsqu'elle est définie sur true, active le tunneling complet et permet aux clients VPN d'accéder à Internet. Implique également TUNNEL_PRIVATE=true.false
    VariableDescriptionDéfaut
    VPN_NAMELe nom du profil VPN, qui est présenté au client pour Cisco AnyConnect.NachoVPN
    PULSE_LOGON_SCRIPTLe chemin du script de connexion Pulse Secure.C:\Windows\System32\calc.exe
    PULSE_LOGON_SCRIPT_MACOSLe chemin du script de connexion Pulse Secure pour macOS.
    PULSE_DNS_SUFFIXLe suffixe DNS à utiliser pour les connexions Pulse Secure.nachovpn.local
    PULSE_USERNAMELe nom d'utilisateur à pré-remplir dans la boîte de dialogue de connexion Pulse Secure.
    PULSE_SAVE_CONNECTIONIndique s'il faut enregistrer la connexion Pulse Secure dans le client de l'utilisateur.false
    PULSE_ANONYMOUS_AUTHIndique s'il faut utiliser l'authentification anonyme pour les connexions Pulse Secure. Si elle est définie sur true, l'utilisateur ne sera pas invité à saisir un nom d'utilisateur ou un mot de passe.false
    PULSE_HOST_CHECKER_RULES_FILEUn fichier JSON contenant une liste de règles host-checker basées sur le registre pour ICS. Voir l'exemple dans src/nachovpn/plugins/pulse/test/example_rules.json
    PALO_ALTO_MSI_ADD_FILELe chemin d'un fichier à ajouter à l'installateur MSI de Palo Alto.
    PALO_ALTO_MSI_COMMANDLa commande à exécuter par l'installateur MSI de Palo Alto.net user pwnd Passw0rd123! /add && net localgroup administrators pwnd /add
    PALO_ALTO_FORCE_PATCHIndique s'il faut forcer l'application du correctif sur l'installateur MSI s'il existe déjà dans le répertoire payloads.false
    PALO_ALTO_PKG_COMMANDLa commande à exécuter par l'installateur PKG de Palo Alto sur macOS.touch /tmp/pwnd
    CISCO_COMMAND_WINLa commande à exécuter par le script OnConnect.vbs de Cisco AnyConnect sur Windows.calc.exe
    CISCO_COMMAND_MACOSLa commande à exécuter par le script OnConnect.sh de Cisco AnyConnect sur macOS.touch /tmp/pwnd