Skip to content

helsecert/CVE-2022-22965

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

Sårbarheter i Spring Framework - CVE-2022-22965

Liste over programvare som er / ikke er sårbar

https://github.com/NCSC-NL/spring4shell/blob/main/software/README.md

Finne sårbar kode

Forutsetninger for å være sårbar for CVE-2022-22965:

1) Bruk av Spring Framework

Se Powershell- og bash-scripts lenger ned.

2) Versjonene av Spring Framework må være sårbare, dette gjelder i utgangspunktet alle versjoner tidligere enn 5.3.18 og 5.2.20.

Hilko Bengen har publisert en scanner som søker etter sårbare versjoner av CachedIntrospectionResults.class med utgangspunkt i versjoner her: https://github.com/hillu/local-spring-vuln-scanner

3) Bruk av JDK9 eller nyere, og at man kjører JRE 9 eller nyere.

Dette kan man finne ut ved å kjøre:

java -version

på aktuelle systemer.

Merk at java-applikasjoner kan kjøres på en rekke ulike måter, og man kan ha en rekke ulike versjoner installert samtidig. For å være sikker på hva slags java-versjon som kjører, kan man først identifisere hvor java-binærfilen kjøres fra, og deretter se hvilken versjon den aktuelle java-binærfilen er.

I Linux kan dette gjøres ved å kjøre:

ps aux | grep java

hvor man f.eks. finner /usr/lib/jvm/java-11-openjdk-amd64/bin/java, og man kan da kjøre følgende kommando ved bruk av absolutt filsti:

$ /usr/lib/jvm/java-11-openjdk-amd64/bin/java -version
openjdk version "11.0.14.1" 2022-02-08
OpenJDK Runtime Environment (build 11.0.14.1+1-Ubuntu-0ubuntu1.18.04)
OpenJDK 64-Bit Server VM (build 11.0.14.1+1-Ubuntu-0ubuntu1.18.04, mixed mode, sharing)

Tilsvarende i Windows kan man finne absolutt filsti for kjørende java-prosesser enten ved bruk av WMI eller Powershell:

WMI: C:\> wmic process where "name='java.exe'" get ExecutablePath
PowerShell: PS C:\> Get-Process java | Select-Object Path

4) Koden som benytter Spring Framework må også benytte seg av bestemte metoder med bestemte parametere for at en angriper skal kunne utnytte sårbarheten.

JFrog har publisert Python-kode som identifiserer bruk av dette, og dette kan brukes direkte på kompilerte Javaprogrammer slik at man ikke trenger å pakke ut .jar/.war-filer: https://github.com/jfrog/jfrog-spring-tools

Når det gjelder identifikasjon av Spring Framework på systemet, så er det avhengig av hvilket operativsystem som kjøres:

Windows

Følgende Powershell-scripts for å finne potensielt sårbare applikasjoner, dvs applikasjoner som benytter seg av, eller er basert på Spring Framework. Merk at disse scriptene ikke vil skille på oppdaterte versjoner eller ikke, men de vil identifisere systemer det er sannsynlig at kan ha sårbarheten p.t. ref pkt 1 over.

Søk etter spring-beans*.jar og cachedintrospectionresults.class i *.war-filer`på systemet:

$SearchName = "*.war"
$Drives = Get-WmiObject Win32_LogicalDisk -Filter 'DriveType=3' | Select -ExpandProperty DeviceID
#$Drives = Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3' | Select-Object -ExpandProperty DeviceID 
#powershell version 6

$Vulnerable = $false
$entries = @()
$hits = @()
$search1 = "spring-beans*.jar"
$search2 = "cachedintrospectionresults.class"
Foreach ($drive in $drives) {
    $SearchDir = "$drive\"
    $wars= (&cmd /c pushd $searchDir `& robocopy /l "$searchDir" null "$searchName" /ns /njh /njs /np /nc /ndl /xjd /mt /s)  -replace '^\s+|\s+$'
        
    Foreach ($war in $wars){
        If($war) {
            #$war
            Add-Type -AssemblyName System.IO.Compression
            Add-Type -AssemblyName System.IO.Compression.FileSystem
            $entries = ([System.IO.Compression.ZipArchive]([System.IO.Compression.ZipFile]::OpenRead($war))).Entries
            foreach ($entry in $entries){
                if ($entry.Name -like $search1) {
                    "$($war)\$($entry.FullName)"
                    $hits = $hits +1
                    }
                if ($entry.Name -like $search2) {
                    "$($war)\$($entry.FullName)"
                    $hits = $hits +1
                    }
                }
            
        }
    
    }
    
}
If ($hits){ "Vulnerable" }
Else { "Compliant" }

Videre er søk etter cachedintrospectionresults.class på tvers av alt av .jar-filer nyttig, og vi kjenner til at det ikke alltid er spring-beans*.jar som inneholder denne klassen.

$SearchName = "*.jar"
$Drives = Get-WmiObject Win32_LogicalDisk -Filter 'DriveType=3' | Select -ExpandProperty DeviceID
#$Drives = Get-CimInstance Win32_LogicalDisk -Filter 'DriveType=3' | Select-Object -ExpandProperty DeviceID 
#powershell version 6

$Vulnerable = $false
$entries = @()
$hits = @()
$search1 = "cachedintrospectionresults.class"
Foreach ($drive in $drives) {
    $SearchDir = "$drive\"
    $wars= (&cmd /c pushd $searchDir `& robocopy /l "$searchDir" null "$searchName" /ns /njh /njs /np /nc /ndl /xjd /mt /s)  -replace '^\s+|\s+$'
        
    Foreach ($war in $wars){
        If($war) {
            #$war
            Add-Type -AssemblyName System.IO.Compression
            Add-Type -AssemblyName System.IO.Compression.FileSystem
            $entries = ([System.IO.Compression.ZipArchive]([System.IO.Compression.ZipFile]::OpenRead($war))).Entries
            foreach ($entry in $entries){
                if ($entry.Name -like $search1) {
                    "$($war)\$($entry.FullName)"
                    $hits = $hits +1
                    }
                }
            
        }
    
    }
    
}
If ($hits){ "Vulnerable" }
Else { "Compliant" }

Linux

For søk på Linux kan man se etter klassen cachedintrospectionresults.class i alle .jar og .war filer på disk, samt se etter spring-beans*.jar i *.war-filer:

find / -name '*.jar' -exec grep -Fi 'cachedintrospectionresults.class' {} \;
find / -name '*.war' -exec grep -Ei 'cachedintrospectionresults\.class|spring-beans.*\.jar' {} \;

samt se etter samme klassenavn i .jar filer som ligger inni .war filer:

#!/bin/bash

find / -name '*.war' -print0 2>/dev/null -print0 | while read -d $'\0' spring; do
        echo -en "${spring}: "$(unzip -p "${spring}" '*.jar' | strings | grep -Fi 'cachedintrospectionresults.class' | awk '{ print $NF }')"\n"
done
exit 0

Ressurser

https://spring.io/blog/2022/03/31/spring-framework-rce-early-announcement

https://www.praetorian.com/blog/spring-core-jdk9-rce/

https://bugalert.org/content/notices/2022-03-30-spring.html

https://www.rapid7.com/blog/post/2022/03/30/spring4shell-zero-day-vulnerability-in-spring-framework/

https://www.lunasec.io/docs/blog/spring-rce-vulnerabilities/

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published