Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
NachoVPN — Un servidor SSL-VPN delicioso, pero malicioso 🌮 | Kitploit
Herramientas/GitHubGitHub/amberwolfcyber/nachovpn
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónSeguridad de RedesPruebas de PenetraciónRed TeamingDesarrollo de PayloadsAtaque Adversario
GitHubamberwolfcyber/nachovpn

NachoVPN

Un servidor SSL-VPN delicioso, pero malicioso 🌮

Ver Repositorio
267314hace 6 mesesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

NachoVPN 🌮🔒

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].

Instalación

Requisitos previos

  • Python 3.9 o posterior
  • Docker (opcional)
  • osslsigncode (solo Linux)
  • msitools (solo Linux)
  • python3-netfilter (solo Linux)
  • git

Configuración en Linux

NachoVPN está construido y probado en Ubuntu 22.04.

  • Instala python3-nftables y nftables

  • Opcionalmente, utiliza setcap para evitar el requisito de sudo:

    root@kitploit:~
    sudo setcap 'cap_net_raw,cap_net_bind_service,cap_net_admin=eip' /usr/bin/python3.10
    
  • Habilita el reenvío de IP:

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

Instalación desde el código fuente

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:

root@kitploit:~
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:

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

A continuación, instala NachoVPN:

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

Si prefieres usar Docker, puedes descargar el contenedor desde el Registro de Contenedores de GitHub:

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

Construcción para distribución

Construcción de un archivo wheel

Primero, clona este repositorio e instala setuptools y wheel mediante pip. A continuación, puedes ejecutar el script setup.py:

root@kitploit:~
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:

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

Construcción para desarrollo local

Alternativamente, para el desarrollo local puedes instalar el paquete en modo editable utilizando:

root@kitploit:~
pip install -e .

Construcción de una imagen de contenedor

Puedes construir la imagen del contenedor con el siguiente comando:

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

Ejecución

Para ejecutar el servidor de forma independiente, utiliza:

root@kitploit:~
python -m nachovpn.server

Alternativamente, puedes ejecutar el servidor utilizando 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

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.

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

También se proporciona un archivo docker-compose de ejemplo para mayor comodidad.

Depuración

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.

Plugins

NachoVPN admite los siguientes plugins y capacidades:

Manejadores de URI

  • El manejador de URI de Ivanti Connect Secure (Pulse Secure) se puede activar visitando la URL /pulse en el servidor NachoVPN.
  • El manejador de URI de SonicWall NetExtender se puede activar visitando la URL /sonicwall en el servidor NachoVPN. Esto requiere que el agente de conexión de SonicWall esté instalado en el equipo cliente.
  • El manejador de URI de Delinea se puede activar visitando la URL /delinea en el servidor NachoVPN.

Notas de funcionamiento

  • Se recomienda utilizar un certificado TLS firmado por una Autoridad de Certificación de confianza. El contenedor docker automatiza este proceso por ti, utilizando certbot. Si no utilizas un certificado de confianza, NachoVPN generará en su lugar un certificado autofirmado, lo que en la mayoría de los casos hará que el cliente muestre una advertencia de certificado, o que se niegue a conectarse a menos que modifiques la configuración del cliente para aceptar certificados autofirmados. Para el plugin de Palo Alto GlobalProtect, esto también hará que el instalador MSI falle.
  • Para simular un certificado de firma de código válido para el plugin de SonicWall, NachoVPN firmará el payload NACAgent.exe con un certificado autofirmado. Con fines de prueba, puedes descargar e instalar este certificado CA desde /sonicwall/ca.crt antes de activar el exploit. Para casos de uso en producción, necesitarás obtener un certificado de firma de código válido de una CA pública, firmar tu payload NACAgent.exe y colocarlo en el directorio payloads (o montarlo como volumen en /app/payloads, si usas docker).
  • Para mayor comodidad, se genera un payload NACAgent.exe predeterminado para el plugin de SonicWall y se escribe en el directorio payloads. Este simplemente inicia un nuevo proceso cmd.exe en el escritorio del usuario actual, ejecutándose como SYSTEM.

Deshabilitar un plugin

Para deshabilitar un plugin, agrégalo a la variable de entorno DISABLED_PLUGINS. Por ejemplo:

root@kitploit:~
DISABLED_PLUGINS=CiscoPlugin,SonicWallPlugin

Variables de entorno

NachoVPN se configura mediante variables de entorno. Esto lo hace fácilmente compatible con despliegues contenerizados.

Variables de entorno globales:

Variables de entorno específicas de los plugins:

Mitigaciones

Recomendamos las siguientes mitigaciones:

  • Asegúrate de que los clientes SSL-VPN estén actualizados a la última versión disponible del proveedor.
  • La mayoría de los clientes VPN admiten el concepto de restringir el perfil VPN a un endpoint específico, o de utilizar un modo VPN siempre activo (always-on). Esto debería habilitarse siempre que sea posible.
  • Desafortunadamente, en algunos casos esta restricción puede ser eliminada por un usuario local malintencionado, por lo que también se recomienda utilizar reglas de firewall basadas en el host para restringir las direcciones IP con las que el cliente VPN puede comunicarse.
  • Considera utilizar una política de Control de Aplicaciones, como WDAC, o una solución EDR para garantizar que el cliente VPN solo pueda ejecutar ejecutables y scripts aprobados.
  • Detecta y alerta sobre clientes VPN que ejecutan procesos hijo no estándar.

Referencias

  • 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 [vídeo]
  • 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

Contribuciones

¡Agradecemos las contribuciones! Por favor, abre un issue o envía una Pull Request.

Si estás interesado en desarrollar un nuevo plugin, puedes echar un vistazo al ExamplePlugin para empezar.

Licencia

NachoVPN está licenciado bajo la licencia MIT. Consulta el archivo LICENSE para obtener más detalles.

Descargar herramienta
PluginProductoCVERCE en WindowsRCE en macOSPrivilegiosManejador de URICaptura de paquetesDemo
CiscoCisco AnyConnectN/A✅✅❌❌✅Windows / macOS
SonicWallSonicWall NetExtenderCVE-2024-29014✅❌✅✅❌Windows
PaloAltoPalo Alto GlobalProtectCVE-2024-5921 (corrección parcial)✅✅✅❌✅Windows / macOS / iOS
PulseSecureIvanti Connect SecureCVE-2020-8241 (evadido)✅✅✅✅ (solo Windows - deshabilitado por defecto en 22.8R1)✅Windows
NetskopeNetskopeCVE-2025-0309✅❌✅❌❌Windows
DelineaManejador de protocoloCVE-2026-????✅✅❌✅❌Windows
  • El plugin de Palo Alto GlobalProtect requiere que los instaladores MSI y el archivo msi_version.txt estén presentes en el directorio downloads. Puedes añadirlos manualmente o ejecutar el script msi_downloader.py para descargarlos.
  • Para realizar el ataque de downgrade de Palo Alto GlobalProtect, asegúrate de que GlobalProtect.msi.old y GlobalProtect64.msi.old estén presentes en la carpeta downloads. Estos archivos deben contener los instaladores MSI sin modificar de una versión anterior a la 6.2.6 (por ejemplo, 6.2.5).
  • VariableDescripciónPredeterminado
    SERVER_FQDNEl nombre de dominio completamente calificado del servidor.connect.nachovpn.local
    EXTERNAL_IPLa dirección IP externa del servidor.127.0.0.1
    WRITE_PCAPSi se deben escribir los archivos PCAP capturados en disco.false
    DISABLED_PLUGINSUna lista separada por comas de plugins a deshabilitar.
    USE_DYNAMIC_SERVER_THUMBPRINTSi se debe calcular dinámicamente la huella digital del certificado del servidor a partir del servidor (útil si se está detrás de un proxy).false
    SERVER_SHA1_THUMBPRINTPermite sobrescribir la huella digital SHA1 calculada para el certificado del servidor.
    SERVER_MD5_THUMBPRINTPermite sobrescribir la huella digital MD5 calculada para el certificado del servidor.
    SMB_ENABLEDHabilita el recurso compartido SMB, disponible a través del túnel en \\10.10.0.1\<SMB_SHARE_NAME>false
    SMB_SHARE_NAMEEl nombre que se utilizará para el recurso compartido SMBSHARE
    SMB_SHARE_PATHLa ruta al directorio que se utilizará para el recurso compartido SMBsmb
    TUNNEL_PRIVATECuando se establece en true, habilita la tunelización pero desactiva el reenvío de Internet para los clientes VPN. Los clientes solo pueden acceder al recurso compartido SMB.false
    TUNNEL_FULLCuando se establece en true, habilita la tunelización completa y permite que los clientes VPN accedan a Internet. También implica TUNNEL_PRIVATE=true.false
    VariableDescripciónPredeterminado
    VPN_NAMEEl nombre del perfil VPN, que se presenta al cliente para Cisco AnyConnect.NachoVPN
    PULSE_LOGON_SCRIPTLa ruta al script de inicio de sesión de Pulse Secure.C:\Windows\System32\calc.exe
    PULSE_LOGON_SCRIPT_MACOSLa ruta al script de inicio de sesión de Pulse Secure para macOS.
    PULSE_DNS_SUFFIXEl sufijo DNS que se utilizará para las conexiones de Pulse Secure.nachovpn.local
    PULSE_USERNAMEEl nombre de usuario que se precargará en el diálogo de inicio de sesión de Pulse Secure.
    PULSE_SAVE_CONNECTIONSi se debe guardar la conexión de Pulse Secure en el cliente del usuario.false
    PULSE_ANONYMOUS_AUTHSi se debe utilizar autenticación anónima para las conexiones de Pulse Secure. Si se establece en true, no se le pedirá al usuario un nombre de usuario o contraseña.false
    PULSE_HOST_CHECKER_RULES_FILEUn archivo JSON que contiene una lista de reglas de host-checker basadas en el registro para ICS. Consulta un ejemplo en src/nachovpn/plugins/pulse/test/example_rules.json
    PALO_ALTO_MSI_ADD_FILELa ruta a un archivo que se añadirá al MSI del instalador de Palo Alto.
    PALO_ALTO_MSI_COMMANDEl comando que ejecutará el MSI del instalador de Palo Alto.net user pwnd Passw0rd123! /add && net localgroup administrators pwnd /add
    PALO_ALTO_FORCE_PATCHSi se debe forzar el parcheo del instalador MSI si ya existe en el directorio de payloads.false
    PALO_ALTO_PKG_COMMANDEl comando que ejecutará el PKG del instalador de Palo Alto en macOS.touch /tmp/pwnd
    CISCO_COMMAND_WINEl comando que ejecutará el script OnConnect.vbs de Cisco AnyConnect en Windows.calc.exe
    CISCO_COMMAND_MACOSEl comando que ejecutará el script OnConnect.sh de Cisco AnyConnect en macOS.touch /tmp/pwnd