关联漏洞
标题:
Spring Framework 代码注入漏洞
(CVE-2022-22965)
描述:Spring Framework是美国Spring团队的一套开源的Java、JavaEE应用程序框架。该框架可帮助开发人员构建高质量的应用。 Spring Framework 存在代码注入漏洞,该漏洞源于 JDK 9+ 上的数据绑定的 RCE。以下产品和版本受到影响:5.3.0 至 5.3.17、5.2.0 至 5.2.19、较旧的和不受支持的版本也会受到影响。
介绍
# 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:
```powershell
$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.
```powershell
$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:
```bash
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:
```bash
#!/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/
文件快照
[4.0K] /data/pocs/6e06bb1b7e8dc277f758b520ca8324641575c7c7
└── [6.7K] README.md
0 directories, 1 file
备注
1. 建议优先通过来源进行访问。
2. 如果因为来源失效或无法访问,请发送邮箱到 f.jinxu#gmail.com 索取本地快照(把 # 换成 @)。
3. 神龙已为您对POC代码进行快照,为了长期维护,请考虑为本地POC付费,感谢您的支持。