
Un servidor SSL-VPN delicioso, pero malicioso 🌮
NachoVPN es una Prueba de Concepto que demuestra la explotación de clientes SSL-VPN, utilizando un servidor VPN malicioso.
Utiliza una arquitectura basada en plugins para que la comunidad pueda contribuir con soporte para productos SSL-VPN adicionales. Actualmente admite varios productos VPN corporativos populares, como Cisco AnyConnect, SonicWall NetExtender, Palo Alto GlobalProtect e Ivanti Connect Secure.
Para obtener más detalles, consulta nuestra entrada de blog y la presentación en HackFest Hollywood 2024 [diapositivas|vídeo].
NachoVPN está construido y probado en Ubuntu 22.04.
Instala python3-nftables y nftables
Opcionalmente, utiliza setcap para evitar el requisito de sudo:
sudo setcap 'cap_net_raw,cap_net_bind_service,cap_net_admin=eip' /usr/bin/python3.10
Habilita el reenvío de IP:
sudo sysctl -w net.ipv4.ip_forward=1
NachoVPN puede instalarse desde GitHub utilizando pip. Ten en cuenta que esto requiere que git esté instalado.
Primero, crea un entorno virtual.
En Linux, asegúrate de que el entorno virtual tenga acceso a los site-packages del sistema, para que nftables funcione:
python3 -m venv env --system-site-packages
source env/bin/activate
En Windows, nftables (y por lo tanto el reenvío de paquetes) está deshabilitado, así que utiliza:
python -m venv env
.\env\Scripts\activate
A continuación, instala NachoVPN:
pip install git+https://github.com/AmberWolfCyber/NachoVPN.git
Si prefieres usar Docker, puedes descargar el contenedor desde el Registro de Contenedores de GitHub:
docker pull ghcr.io/AmberWolfCyber/nachovpn:release
Primero, clona este repositorio e instala setuptools y wheel mediante pip. A continuación, puedes ejecutar el script setup.py:
git clone https://github.com/AmberWolfCyber/NachoVPN
pip install -U setuptools wheel
python setup.py bdist_wheel
Esto generará un archivo wheel en el directorio dist, que se puede instalar con pip:
pip install dist/nachovpn-1.0.0-py3-none-any.whl
Alternativamente, para el desarrollo local puedes instalar el paquete en modo editable utilizando:
pip install -e .
Puedes construir la imagen del contenedor con el siguiente comando:
docker build -t nachovpn:latest .
Para ejecutar el servidor de forma independiente, utiliza:
python -m nachovpn.server
Alternativamente, puedes ejecutar el servidor utilizando Docker:
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
Esto generará un certificado para SERVER_FQDN utilizando certbot y lo guardará en el directorio certs, que hemos montado en el contenedor.
Alternativamente, con fines de prueba, puedes omitir la generación del certificado estableciendo la variable de entorno SKIP_CERTBOT.
En su lugar, se generará un certificado autofirmado.
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
También se proporciona un archivo docker-compose de ejemplo para mayor comodidad.
Puedes ejecutar nachovpn con los argumentos de línea de comandos -d o --debug para aumentar la verbosidad del registro, lo que puede ayudar en la depuración.
Alternativamente, si el registro es demasiado ruidoso, puedes usar el argumento de línea de comandos q o --quiet.
NachoVPN admite los siguientes plugins y capacidades:
| Plugin | Producto | CVE | RCE en Windows | RCE en macOS | Privilegios | Manejador de URI | Captura de paquetes | Demo |
|---|---|---|---|---|---|---|---|---|
| Cisco | Cisco AnyConnect | N/A | ✅ | ✅ | ❌ | ❌ | ✅ | Windows / macOS |
| SonicWall | SonicWall NetExtender | CVE-2024-29014 | ✅ | ❌ | ✅ | ✅ | ❌ | Windows |
| PaloAlto | Palo Alto GlobalProtect | CVE-2024-5921 (corrección parcial) | ✅ | ✅ | ✅ | ❌ | ✅ | Windows / macOS / iOS |
| PulseSecure | Ivanti Connect Secure | CVE-2020-8241 (evadido) | ✅ | ✅ | ✅ | ✅ (solo Windows - deshabilitado por defecto en 22.8R1) | ✅ | Windows |
| Netskope | Netskope | CVE-2025-0309 | ✅ | ❌ | ✅ | ❌ | ❌ | Windows |
| Delinea | Manejador de protocolo | CVE-2026-???? | ✅ | ✅ | ❌ | ✅ | ❌ | Windows |
/pulse en el servidor NachoVPN./sonicwall en el servidor NachoVPN. Esto requiere que el agente de conexión de SonicWall esté instalado en el equipo cliente./delinea en el servidor NachoVPN.