
Um servidor SSL-VPN delicioso, mas malicioso 🌮
O NachoVPN é uma Prova de Conceito que demonstra a exploração de clientes SSL-VPN usando um servidor VPN malicioso.
Ele usa uma arquitetura baseada em plugins, permitindo que a comunidade contribua com suporte para produtos SSL-VPN adicionais. Atualmente, ele suporta vários produtos VPN corporativos populares, como Cisco AnyConnect, SonicWall NetExtender, Palo Alto GlobalProtect e Ivanti Connect Secure.
Para mais detalhes, consulte nossa publicação no blog e a apresentação no HackFest Hollywood 2024 [slides|vídeo].
O NachoVPN é compilado e testado no Ubuntu 22.04.
Instale python3-nftables e nftables
Opcionalmente, use setcap para evitar a necessidade de sudo:
sudo setcap 'cap_net_raw,cap_net_bind_service,cap_net_admin=eip' /usr/bin/python3.10
Ative o encaminhamento de IP:
sudo sysctl -w net.ipv4.ip_forward=1
O NachoVPN pode ser instalado a partir do GitHub usando pip. Observe que isso requer que o git esteja instalado.
Primeiro, crie um ambiente virtual.
No Linux, certifique-se de que o ambiente virtual tenha acesso aos site-packages do sistema, para que o nftables funcione:
python3 -m venv env --system-site-packages
source env/bin/activate
No Windows, o nftables (e, portanto, o encaminhamento de pacotes) está desabilitado, então use:
python -m venv env
.\env\Scripts\activate
Em seguida, instale o NachoVPN:
pip install git+https://github.com/AmberWolfCyber/NachoVPN.git
Se preferir usar Docker, você pode baixar o contêiner do GitHub Container Registry:
docker pull ghcr.io/AmberWolfCyber/nachovpn:release
Primeiro, clone este repositório e instale setuptools e wheel via pip. Em seguida, você pode executar o script setup.py:
git clone https://github.com/AmberWolfCyber/NachoVPN
pip install -U setuptools wheel
python setup.py bdist_wheel
Isso gerará um arquivo wheel no diretório dist, que pode ser instalado com pip:
pip install dist/nachovpn-1.0.0-py3-none-any.whl
Alternativamente, para desenvolvimento local, você pode instalar o pacote em modo editável usando:
pip install -e .
Você pode construir a imagem do contêiner com o seguinte comando:
docker build -t nachovpn:latest .
Para executar o servidor de forma autônoma, use:
python -m nachovpn.server
Alternativamente, você pode executar o servidor usando 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
Isso gerará um certificado para o SERVER_FQDN usando certbot e o salvará no diretório certs, que montamos no contêiner.
Alternativamente, para fins de teste, você pode pular a geração do certificado definindo a variável de ambiente SKIP_CERTBOT.
Isso gerará um certificado autoassinado em vez disso.
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
Um arquivo docker-compose de exemplo também é fornecido para conveniência.
Você pode executar nachovpn com os argumentos de linha de comando -d ou --debug para aumentar a verbosidade do log, o que pode ajudar na depuração.
Alternativamente, se o log estiver excessivamente verboso, você pode usar o argumento de linha de comando q ou --quiet.
O NachoVPN suporta os seguintes plugins e recursos:
| Plugin | Produto | CVE | RCE no Windows | RCE no macOS | Privilegiado | Manipulador de URI | Captura de Pacotes | Demonstração |
|---|---|---|---|---|---|---|---|---|
| Cisco | Cisco AnyConnect | N/A | ✅ | ✅ | ❌ | ❌ | ✅ | Windows / macOS |
| SonicWall | SonicWall NetExtender | CVE-2024-29014 | ✅ | ❌ | ✅ | ✅ | ❌ | Windows |
| PaloAlto | Palo Alto GlobalProtect | CVE-2024-5921 (correção parcial) | ✅ | ✅ | ✅ | ❌ | ✅ | Windows / macOS / iOS |
| PulseSecure | Ivanti Connect Secure | CVE-2020-8241 (contornado) | ✅ | ✅ | ✅ | ✅ (somente Windows - desabilitado por padrão na 22.8R1) | ✅ | Windows |
| Netskope | Netskope | CVE-2025-0309 | ✅ | ❌ | ✅ | ❌ | ❌ | Windows |
| Delinea | Protocol Handler | CVE-2026-???? | ✅ | ✅ | ❌ | ✅ | ❌ | Windows |
/pulse no servidor NachoVPN./sonicwall no servidor NachoVPN. Isso requer que o SonicWall Connect Agent esteja instalado na máquina cliente./delinea no servidor NachoVPN.