Skip to content
KitploitKITPLOIT
ToolsBlog
Einreichen
ToolsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

··Feeds·Kontakt·Datenschutz·© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
netty-resolver-dns-check — Offline-Statikprüfer, der gepackte Java-JARs auf anfällige Versionen von netty-resolver-dns untersucht und erkennt, ob Spring WebClient tatsächlich den DNS-Resolver von Netty verwendet. | Kitploit
Tools/GitHubGitHub/xiaoqimikko/netty-resolver-dns-check
DefensivwerkzeugeStatische AnalyseSchwachstellenscannerSchwachstellenanalyseKonfigurationsprüfungWebsicherheitLieferkettensicherheitDNS-Analyse

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
GitHub
xiaoqimikko/netty-resolver-dns-check

netty-resolver-dns-check

Offline-Statikprüfer, der gepackte Java-JARs auf anfällige Versionen von netty-resolver-dns untersucht und erkennt, ob Spring WebClient tatsächlich den DNS-Resolver von Netty verwendet.

Repository anzeigen
vor 4 TagenNoch nicht geprüft
Teilen

netty-resolver-dns-check

Offline-Prüfwerkzeug für drei DNS-Cache-Poisoning-CVEs in io.netty:netty-resolver-dns — CVE-2026-45674, CVE-2026-47691 und CVE-2026-45673 — und für die Frage, die die Versionsnummer nicht beantworten kann: verwendet Ihre Anwendung diesen Resolver tatsächlich?

Wenn Sie Spring WebClient verwenden, ist die Antwort sehr wahrscheinlich ja, obwohl netty-resolver-dns nirgends in Ihrer pom.xml steht und nichts in Ihrem Code es aufruft.

root@kitploit:~
java -jar netty-resolver-dns-check-0.1.0.jar path/to/your-app.jar

Warum es das gibt

1. Sie haben es nie deklariert. WebClient verwendet es standardmäßig.

netty-resolver-dns kommt vier Ebenen tief:

root@kitploit:~
spring-boot-starter-webflux
 └ spring-boot-starter-reactor-netty
    └ reactor-netty-http
       └ reactor-netty-core
          └ netty-resolver-dns        (jede Verbindung: compile scope)

Und es ist nicht nur im Classpath. Reactor Netty's HttpClient — der Connector, den Spring Boot für WebClient wählt, wann immer Reactor Netty vorhanden ist — löst Hostnamen mit Netty's eigenem DnsAddressResolverGroup auf, nicht mit dem JDK-Resolver:

  • HttpClientConfig.defaultAddressResolverGroup() → HttpResources.getOrCreateDefaultResolver()
  • TcpResources.getOrCreateDefaultResolver() → NameResolverProvider.newNameResolverGroup(...)
  • NameResolverProvider.newNameResolverGroup → new DnsNameResolverBuilder() → new DnsAddressResolverGroup(builder)

(Gleiches in reactor-netty 1.1.x, 1.2.x, 1.3.x und main.) Die Connector-Erkennungsreihenfolge von Spring Boot ist reactor > jetty > httpComponents > jdk, also gewinnt Reactor Netty, wann immer es vorhanden ist.

Wir haben nicht beim Lesen des Quellcodes haltgemacht. Im unten beschriebenen kontrollierten Experiment sendete eine Standard-Spring-Boot-3.5.14-App, die eine einzige WebClient-Anfrage stellte, eine echte DNS-Abfrage über Netty's Resolver (WRITE: UDP ... DefaultDnsQuestion(example.com.)).

Die Advisories für CVE-2026-45674 und CVE-2026-47691 sagen es unverblümt: "Jede Anwendung, die Netty's DNS-Resolver verwendet, ist betroffen."

2. Welche Spring-Boot-Versionen einen betroffenen Standard ausliefern

Alle drei CVEs teilen denselben Fix: 4.1.135.Final (4.1-Zweig) / 4.2.15.Final (4.2-Zweig). Gelesen aus jeder spring-boot-dependencies-<v>.pom (<netty.version>), 2026-09-11:

Spring BootStandard-Netty
3.4.0 – 3.4.134.1.115 – 4.1.130betroffen — kein 3.4.x-Release liefert den Fix aus
3.5.0 – 3.5.144.1.121 – 4.1.132betroffen
3.5.15 +4.1.135behoben
4.0.0 – 4.0.64.2.7 – 4.2.12betroffen
4.0.7 +4.2.15 +behoben

Die behobenen Versionen sind alle auf Maven Central. Ein Upgrade funktioniert; dieses Werkzeug behauptet nichts anderes.

3. Was statisches Scannen Ihnen sagen kann und was nicht

Eine Versionsnummer ist eine Zeile aus mvn dependency:tree. Die schwierigere Frage ist, ob der Resolver wirklich verwendet wird. Also haben wir vier echte Spring-Boot-3.5.14-Fat-Jars gebaut und eines auf 3.5.16, und die Ground Truth gemessen — DNS-Abfragen, die tatsächlich von Netty gesendet werden — gegen das, was dieses Werkzeug allein aus dem Jar ableitet:

AppWas sie tutNetty-DNS-Abfragen (Laufzeit)Dieses Werkzeug (statisch)
AStandard WebClient.builder()1in Verwendung
B.resolver(DefaultAddressResolverGroup.INSTANCE)0Override gefunden → manuell prüfen
Cspring.http.reactiveclient.connector=jdk0Override gefunden → manuell prüfen
Dzwei WebClients, nur einer überschrieben1Override gefunden → manuell prüfen
EStandard, Spring Boot 3.5.161 (auf dem behobenen 4.1.135)nicht betroffen

Das ehrliche Ergebnis: Das Werkzeug sagt zuverlässig "in Verwendung", wenn kein Override vorhanden ist, und es findet Override-Spuren in Ihrem Code und Ihrer Konfiguration (3 von 3, kein Fehlalarm bei A). Es kann B (alles überschrieben) nicht von D (ein Client noch auf dem Standard) unterscheiden — ihre Bytecode-Evidenz ist identisch. Ein Override führt also nie dazu, dass es "nicht betroffen" sagt; es sagt "manuell prüfen" und gibt Ihnen die Ein-Minuten-Prüfung unten.

Die Ein-Minuten-Selbstprüfung

  1. Starten Sie Ihre App mit --logging.level.io.netty.resolver.dns=DEBUG
  2. Sorgen Sie dafür, dass sie eine ausgehende Anfrage über jeden WebClient sendet, den Sie haben
  3. Suchen Sie nach WRITE: UDP im Log — vorhanden: Netty's Resolver wird verwendet; nicht vorhanden: diese Anfrage hat ihn nicht verwendet

Urteilen Sie nicht danach, ob "wurde DnsNameResolver geladen?". App B ersetzte den Resolver und lud diese Klasse trotzdem, weil die Standard-Resolver-Gruppe eifrig aufgebaut wird. Nur die Abfragezeilen sind Beweis.

Verwendung

root@kitploit:~
java -jar netty-resolver-dns-check-0.1.0.jar <directory | jar | war>
java -jar netty-resolver-dns-check-0.1.0.jar --version-of 4.1.132.Final

Es liest, was tatsächlich gepackt ist (Fat-Jar BOOT-INF/lib, War WEB-INF/lib, verschachtelte Jars), nicht pom.xml — die Abhängigkeit ist transitiv, die Pom würde Ihnen also sagen, dass sie nicht da ist. Das Vorhandensein wird durch die Klasse io/netty/resolver/dns/DnsNameResolver.class entschieden, nicht durch Versions- Manifeste. Override-Spuren werden nur in Ihren eigenen Klassen und application*.properties/yml gesucht (Bibliotheks-Jars referenzieren diese Klassen selbst).

Die Ausgabe ist auf Chinesisch; die Verdict-Zeilen und CVE-IDs sind das, worauf Skripte sich stützen sollten.

Was es Ihnen nicht sagt

  • Ob ein Angreifer Sie erreichen kann. CVE-2026-47691, aus dem Advisory: Ein Angreifer, der einen autoritativen Namensserver für eine Subdomain kontrolliert, kann den Cache für übergeordnete Domains vergiften — Ihre App muss also einen Namen auflösen, den der Angreifer kontrolliert (zum Beispiel das Abrufen benutzerseitig gelieferter URLs). CVE-2026-45673 ist medium (6.8) und benötigt gefälschte Antworten, um Ihren Resolver zu erreichen. Schweregrad laut Advisory: zwei hoch (8.7), einer medium.
  • Overrides, die über Umgebungsvariablen oder innerhalb eines Bibliotheks-Jars gesetzt werden, sind für einen statischen Scan unsichtbar. Das Werkzeug neigt in diesen Fällen zu "in Verwendung".
  • Bibliotheken, die Reactor Netty's HttpClient direkt verwenden (zum Beispiel ein Gateway), werden nicht separat analysiert — wenn Reactor Netty vorhanden ist, wird der Standardpfad angenommen.
  • Versionen außerhalb der 4.1- und 4.2-Zweige werden als "kann nicht beurteilen" gemeldet, nicht geraten.

Woher die Regeln stammen

GitHub-Advisory-API, gelesen 2026-09-11:

CVEGHSASchweregradBetroffen → behoben
CVE-2026-45674GHSA-676x-f7gg-47vchoch 8.7<= 4.1.134.Final → 4.1.135.Final · 4.2.0–4.2.14 → 4.2.15.Final
CVE-2026-47691GHSA-5pvg-856g-cp85hoch 8.7gleich
CVE-2026-45673GHSA-xmv7-r254-6q78medium 6.8gleich

Die Spring-Boot-Tabelle steht in BootTable.java; ein Unit-Test leitet die drei Aussagen in Abschnitt 2 daraus erneut ab, sodass Tabelle und Behauptungen nicht stillschweigend auseinanderdriften können.

Das kontrollierte Experiment

evidence/ enthält die fünf Apps (A–E) und runtime.sh, das WRITE: UDP-Zeilen pro App zählt. tools/e2e_real_jars.py führt dieses Werkzeug gegen dieselben fünf Jars aus und prüft jedes Verdict. Das Bauen der Apps erfordert Maven 3.6.3 oder neuer.

Exit-Codes

CodeBedeutung
0keine der drei CVEs trifft zu (behobene Version)
1betroffene Version gefunden — auch wenn Override-Spuren gefunden wurden
2kann nicht beurteilen (kein netty-resolver-dns gefunden, unbekannte Version, ungültige Argumente)
4eine Datei konnte nicht gelesen werden — "Ich konnte es nicht lesen" darf nie wie ein Bestehen aussehen

Lizenz

Apache License 2.0

Tool herunterladen