Spring4Shell: Spring Framework Remote Code Execution Vulnerability

31 maart 2022

Update 31-03-2022

  • 14:00. Spring Framework-versies 5.3.18 en 5.2.20, die de kwetsbaarheid aanpakken, zijn nu beschikbaar. Het releaseproces voor Spring Boot is in volle gang.
  • 14:10. Dit zijn de vereisten voor het specifieke scenario uit het rapport:
    • JDK 9 of hoger
    • Apache Tomcat als de Servlet-container
    • Verpakt als WAR
    • De aard van de kwetsbaarheid is echter algemener en er kunnen andere manieren zijn om deze te misbruiken die nog niet zijn gemeld.
  • 14:33. Hoofdstuk “Meer informatie” toegevoegd

Update 01-04-2022

  • 07:21. Er zijn aanvullende details verstrekt, waaronder vaste versies, de CVE-identificatie, aanvullende details over de vereisten die nodig zijn om de kwetsbaarheid uit te buiten, evenals details over Tenable-productdekking.

Access42 volgt de updates met betrekking tot Spring4Shell op de voet. Naarmate er meer informatie beschikbaar komt, zullen we deze blog bijwerken met aanvullende details over de kwetsbaarheid, inclusief eventuele detectie mogelijkheden.

Spring4Shell is de bijnaam van een zero-day kwetsbaarheid in het Spring Core Framework. Het Spring Core Framework is een set van Java libraries waarmee op gestructureerde wijze applicaties kunnen worden ontwikkeld die vervolgens zowel standalone kunnen draaien of in webapplicatie-omgevingen als Tomcat.

bronnen: Access42, Tenable, Lunasec, NCSC, Preatorian

TL;DR

Er bestaan twee RCE’s en er worden online drie vectoren besproken (waarvan er één niet bekend staat als exploiteerbaar op afstand).

  • Bevestigd: “Spring4Shell” in Spring Core (CVE-2022-22965), bevestigd door verschillende bronnen, maakt gebruik van klasse-injectie (zeer ernstig),
  • Bevestigd: CVE-2022-22963 in Spring Cloud Function (minder ernstig),
  • Onbevestigd: Een derde zwakte die aanvankelijk werd besproken als een zwakte die RCE via deserialisatie mogelijk maakt, maar die niet kan worden uitgebuit (momenteel niet ernstig).

 Er zijn updates beschikbaar voor Spring4Shell in Spring versions 5.3.18 and 5.2.20 en een officiële CVE is gepubliceerd als CVE-2022-22965.

Mitigatie (voor zover bekend)

Spring Framework-versies 5.3.18 en 5.2.20, die de kwetsbaarheid aanpakken, zijn al beschikbaar op Maven Central. Als u kunt upgraden, hebt u de onderstaande tijdelijke oplossingen niet nodig.

Als je Spring Core gebruikt, is dit momenteel de enige bekende remedie voor het patchen van deze aanval. Er is ten tijde van het publiceren van deze blog geen patch beschikbaar (vanaf 3-31-2022 @ 9:30am).

Volgens de Praetorian post die de aanwezigheid van een RCE in Spring Core bevestigt, is momenteel de aanbevolen aanpak om DataBinder te patchen een blacklist toe te voegen van kwetsbare veldpatronen die nodig zijn voor exploitatie.

In Spring Framework heeft DataBinder functionaliteit om bepaalde patronen te weigeren. Als tijdelijke oplossing voor deze kwetsbaarheid raden wij aan om een ControllerAdvice component te maken (een Spring component die gedeeld wordt door Controllers) en gevaarlijke patronen aan de denylist toe te voegen. Een voorbeeld snippet is hieronder te zien:

import org.springframework.core.Ordered;

import org.springframework.core.annotation.Order;

import org.springframework.web.bind.WebDataBinder;

import org.springframework.web.bind.annotation.ControllerAdvice;

import org.springframework.web.bind.annotation.InitBinder;




@ControllerAdvice

@Order(10000)

public class BinderControllerAdvice {

    @InitBinder

    public void setAllowedFields(WebDataBinder dataBinder) {

         String[] denylist = new String[]{"class.*", "Class.*", "*.class.*", "*.Class.*"};

         dataBinder.setDisallowedFields(denylist);

    }

}

Frequently Asked Questions rondom Spring4Shell

Is er een CVE bekend voor deze kwetsbaarheid?

Op het moment dat dit blogbericht werd gepubliceerd, was er nog geen CVE-ID bekend voor deze kwetsbaarheid.

Is Spring4Shell verwant aan Log4Shell?

Hoewel de naam zelf is geïnspireerd door Log4Shell (CVE-2021-44228), zijn de twee niet verwant.

Is er een patch beschikbaar voor Spring4Shell?

Op het moment dat deze blog post werd gepubliceerd, was er nog geen patch beschikbaar voor deze kwetsbaarheid. Vanaf 31 maart zijn Spring Framework versies 5.3.18 en 5.2.20 vrijgegeven. Volgens de kwetsbaarheidsmelding van Spring, zijn Spring Boot versie 2.6.6 en 2.5.12 (beide afhankelijk van Spring Framework 5.3.18) vrijgegeven.

Hoe ernstig is Spring4Shell?

Een aanvaller zou Spring4Shell kunnen misbruiken door een speciaal bewerkt verzoek naar een kwetsbare server te sturen. Uitbuiting van Spring4Shell vereist echter bepaalde vereisten, terwijl de oorspronkelijke Log4Shell-kwetsbaarheid alle versies van Log4j 2 trof met de standaardconfiguratie.

Volgens Spring zijn de volgende vereisten opgenomen in het kwetsbaarheidsrapport, maar het bericht waarschuwt dat er andere manieren kunnen zijn waarop dit kan worden uitgebuit, zodat dit op dit moment mogelijk geen volledige lijst van vereisten is:

  • Java Development Kit (JDK) 9 of hoger
  • Apache Tomcat als de Servlet container
  • Verpakt als een WAR
  • Spring-webmvc of Spring-webflux afhankelijkheid

Meerdere onderzoekers publiceren bevindingen in de vereisten voor exploitatie op Twitter:

Het is onduidelijk hoe “standaard” deze vereisten zijn en hoe vaak ze voorkomen. Aangezien deze noodzakelijk zijn voor exploitatie, verwachten wij dat de impact van Spring4Shell veel beperkter zal zijn dan die van Log4Shell.

Welke versies van het Spring Core Framework zijn kwetsbaar?

Vanaf 31 maart zijn Spring versies 5.3.18 en 5.2.20 uitgebracht om CVE-2022-22965 aan te pakken. Op het moment dat deze blog werd geüpdatet was nog niet expliciet vermeld welke versies zijn getroffen, maar we hopen snel meer duidelijkheid te hebben en zullen deze post bijwerken met aanvullende informatie.

Is mijn applicatie kwetsbaar als ik een JDK 9+ en Spring Framework gebruik?

Het gebruik van JDK 9+ en Spring Framework samen betekent niet noodzakelijkerwijs dat je kwetsbaar bent voor Spring4Shell, aangezien de applicatie zodanig geconfigureerd moet zijn dat een aanvaller het lek kan misbruiken. Spring heeft bijvoorbeeld aanbevolen dat ontwikkelaars de eigenschap allowedFields specificeren wanneer ze de DataBinder class gebruiken. Onderzoekers hebben bevestigd dat het niet specificeren van deze eigenschap een aanvaller in staat kan stellen Spring4Shell te gebruiken tegen een kwetsbare applicatie.

Wat heeft Spring4Shell te maken met CVE-2010-1622?

Onderzoekers van Praetorian hebben bevestigd dat Spring4Shell een patch bypass is van CVE-2010-1622, een code-injectie lek in het Spring Core Framework dat naar verluidt bijna 12 jaar geleden is opgelost. De onderzoekers zeggen echter dat de oplossing voor CVE-2010-1622 onvolledig was en dat er een nieuw pad is om dit oude lek uit te buiten.

Is Spring4Shell related to CVE-2022-22963?

Nee, dit zijn twee volledig ongerelateerde kwetsbaarheden. CVE-2022-22963 is een kwetsbaarheid in de Spring Cloud Function, een serverless framework voor het implementeren van business logica via functies. Een advisory voor CVE-2022-22963 werd gepubliceerd op 29 maart en patches voor Spring Cloud Function zijn beschikbaar.

Omdat er ten tijde van de openbaarmaking geen CVE voor Spring4Shell was toegewezen, werd Spring4Shell ten onrechte geassocieerd met CVE-2022-22963.

Is er Proof of Concept (PoC) code beschikbaar?

Ja, er zijn meerdere werkende proof-of-concept (PoC) exploits beschikbaar voor zowel Spring4Shell als CVE-2022-22963.

Identificeren van kwetsbare systemen

Een lijst van Tenable-plugins om deze kwetsbaarheid te identificeren, is hier te vinden.

Voor Nessus plugin ID 159374, “Spring Framework < 5.2.20 / 5.3.x < 5.3.18 Remote Code Execution (CVE-2022-22965),” moeten gebruikers de instelling “Show potential false alarms”, ook bekend als paranoïde modus, inschakelen in hun scanbeleid om deze plugin in een scan in te schakelen. Daarnaast moet ook de instelling “Peform thorough tests” zijn ingeschakeld.

Wij raden ook aan alleen deze specifieke plugin in een paranoïde scan in te schakelen. Scanbeleid dat is geconfigureerd om alle plugins in te schakelen zal een toename in het aantal triggers zien, omdat het alle paranoïde plugins tijdens de scan zal omvatten. Hieronder een overzicht van de instellingen voor Nessus en Tenable.io:

Enabling Paranoid and Thorough Tests Modes

To enable this setting for Nessus and Tenable.io users:

  1. Click Assessment > General > Accuracy
  2. Enable the “Show potential false alarms” option
  3. Enable the “Perform thorough tests (may disrupt your network or impact scan speed)” option

To enable this setting for Tenable.sc (formerly SecurityCenter) users:

  1. Click Assessment > Accuracy
  2. Click the drop-down box and select “Paranoid (more false alarms)”
  3. Click the drop-down box and select “Perform thorough tests (may disrupt your network or impact scan speed)”

Plugin ID 159374 is available in feed serial 202203311743.

For Web Application Scanning customers, we’ve updated our Backdoor Detection plugin to detect the tomcatwar.jsp shell file.

Meer informatie

Spring4Shell