# 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 # Check if mTLS is *really* required (it frequently is not!) openssl s_client -connect :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 `` poruku: ```xml ``` ### 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 `` 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 ]> &xxe; ``` Kada je parser pogrešno konfiguran (`XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES=true`), sadržaj datoteke se vraća unutar `` 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..nic.`). 2. Iskoristite jednu od gornjih slabosti da dobijete kredencijale na nivou registra (XXE → SSRF do IMDSv1, eksfiltracija kredencijala, ili TLS-bypass). 3. Izdajte `` zahteve da promenite `hostObj` zapise domena na servere imenom napadača. 4. (Opcionalno) Podnesite `` 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 `` ili `` 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}}