Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2022-22965 — Скрипты обнаружения и рекомендации для уязвимости CVE-2022-22965 (Spring4Shell) в Spring Framework, включая сканеры PowerShell и Bash для уязвимых JAR/WAR-файлов и проверки версии JDK. | Kitploit
Инструменты/GitHubGitHub/helsecert/cve-2022-22965
Статический анализСканеры уязвимостейАнализ уязвимостейАнализ КодаВеб-безопасностьОбучение и ОбразованиеПодобранные Ресурсы
GitHubhelsecert/cve-2022-22965

CVE-2022-22965

Скрипты обнаружения и рекомендации для уязвимости CVE-2022-22965 (Spring4Shell) в Spring Framework, включая сканеры PowerShell и Bash для уязвимых JAR/WAR-файлов и проверки версии JDK.

Репозиторий
124 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Уязвимости в Spring Framework - CVE-2022-22965

Список программного обеспечения, которое является / не является уязвимым

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

Поиск уязвимого кода

Предпосылки для уязвимости CVE-2022-22965:

1) Использование Spring Framework

См. скрипты PowerShell и bash ниже.

2) Версии Spring Framework должны быть уязвимыми, это касается в основном всех версий ранее 5.3.18 и 5.2.20.

Хилко Бенген опубликовал сканер, который ищет уязвимые версии CachedIntrospectionResults.class на основе версий здесь: https://github.com/hillu/local-spring-vuln-scanner

3) Использование JDK9 или новее, а также запуск JRE 9 или новее.

Это можно узнать, выполнив:

root@kitploit:~
java -version

на соответствующих системах.

Обратите внимание, что Java-приложения могут запускаться различными способами, и у вас может быть установлено несколько версий одновременно. Чтобы точно определить, какая версия Java запущена, можно сначала определить, откуда запускается бинарный файл java, а затем посмотреть, какая у него версия.

В Linux это можно сделать, выполнив:

root@kitploit:~
ps aux | grep java

где, например, можно найти /usr/lib/jvm/java-11-openjdk-amd64/bin/java, и затем выполнить следующую команду, используя абсолютный путь:

root@kitploit:~
$ /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)

Аналогично в Windows можно найти абсолютный путь для запущенных Java-процессов с помощью WMI или PowerShell:

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

4) Код, использующий Spring Framework, также должен использовать определённые методы с определёнными параметрами, чтобы злоумышленник мог воспользоваться уязвимостью.

JFrog опубликовал Python-код, который идентифицирует использование таких методов, и его можно применять непосредственно к скомпилированным Java-программам, без необходимости распаковывать .jar/.war-файлы: https://github.com/jfrog/jfrog-spring-tools

Что касается идентификации Spring Framework в системе, это зависит от используемой операционной системы:

Windows

Следующие скрипты PowerShell для поиска потенциально уязвимых приложений, т.е. приложений, использующих или основанных на Spring Framework. Обратите внимание, что эти скрипты не будут различать обновлённые и необновлённые версии, но они определят системы, которые, вероятно, могут быть уязвимы в данный момент (см. п. 1 выше).

Поиск spring-beans*.jar и cachedintrospectionresults.class в *.war-файлах в системе:

root@kitploit:~
$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](https://github.com/helsecert/cve-2022-22965/blob/main/%5BSystem.IO.Compression.ZipFile%5D%3A%3AOpenRead%28%24war))).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" }

Кроме того, полезно искать cachedintrospectionresults.class во всех .jar-файлах, так как мы знаем, что не всегда spring-beans*.jar содержит этот класс.

root@kitploit:~
$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](https://github.com/helsecert/cve-2022-22965/blob/main/%5BSystem.IO.Compression.ZipFile%5D%3A%3AOpenRead%28%24war))).Entries
            foreach ($entry in $entries){
                if ($entry.Name -like $search1) {
                    "$($war)\$($entry.FullName)"
                    $hits = $hits +1
                    }
                }
            
        }
    
    }
    
}
If ($hits){ "Vulnerable" }
Else { "Compliant" }

Linux

Для поиска в Linux можно искать класс cachedintrospectionresults.class во всех .jar и .war файлах на диске, а также искать spring-beans*.jar в *.war-файлах:

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

а также искать то же имя класса в .jar-файлах, находящихся внутри .war-файлов:

root@kitploit:~
#!/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

Ресурсы

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/

Скачать инструмент