Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Outils/GitHubGitHub/helsecert/cve-2022-22965
Analyse StatiqueScanners de VulnérabilitésAnalyse des VulnérabilitésAnalyse de CodeSécurité WebApprentissage et ÉducationRessources Organisées
GitHubhelsecert/cve-2022-22965

CVE-2022-22965

Voir le dépôt
1il y a 4 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

Vulnérabilités dans Spring Framework - CVE-2022-22965

Liste des logiciels vulnérables / non vulnérables

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

Trouver du code vulnérable

Conditions préalables pour être vulnérable à CVE-2022-22965 :

1) Utilisation de Spring Framework

Voir les scripts PowerShell et bash plus bas.

2) Les versions de Spring Framework doivent être vulnérables, cela concerne en principe toutes les versions antérieures à 5.3.18 et 5.2.20.

Hilko Bengen a publié un scanner qui recherche les versions vulnérables de CachedIntrospectionResults.class à partir des versions ici : https://github.com/hillu/local-spring-vuln-scanner

3) Utilisation de JDK9 ou ultérieur, et exécution de JRE 9 ou ultérieur.

On peut le déterminer en exécutant :

root@kitploit:~
java -version

sur les systèmes concernés.

Notez que les applications Java peuvent être exécutées de différentes manières, et différentes versions peuvent être installées simultanément. Pour être sûr de la version Java utilisée, on peut d'abord identifier l'emplacement du binaire Java, puis vérifier la version de ce binaire.

Sous Linux, cela peut être fait en exécutant :

root@kitploit:~
ps aux | grep java

où l'on trouve par exemple /usr/lib/jvm/java-11-openjdk-amd64/bin/java, et on peut alors exécuter la commande suivante en utilisant le chemin absolu :

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)

Sous Windows, on peut trouver le chemin absolu des processus Java en cours d'exécution soit avec WMI, soit avec PowerShell :

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

4) Le code qui utilise Spring Framework doit également utiliser certaines méthodes avec certains paramètres pour qu'un attaquant puisse exploiter la vulnérabilité.

JFrog a publié du code Python qui identifie l'utilisation de ces méthodes, et il peut être utilisé directement sur des programmes Java compilés sans avoir besoin d'extraire les fichiers .jar/.war : https://github.com/jfrog/jfrog-spring-tools

En ce qui concerne l'identification de Spring Framework sur le système, cela dépend du système d'exploitation utilisé :

Windows

Scripts PowerShell suivants pour trouver les applications potentiellement vulnérables, c'est-à-dire les applications qui utilisent ou sont basées sur Spring Framework. Notez que ces scripts ne feront pas la distinction entre les versions mises à jour ou non, mais ils identifieront les systèmes susceptibles d'être vulnérables actuellement, cf. point 1 ci-dessus.

Recherche de spring-beans*.jar et cachedintrospectionresults.class dans les fichiers *.war sur le système :

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/HEAD/%5BSystem.IO.Compression.ZipFile%5D::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" }

De plus, la recherche de cachedintrospectionresults.class dans tous les fichiers .jar est utile, car cette classe n'est pas toujours contenue dans 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/HEAD/%5BSystem.IO.Compression.ZipFile%5D::OpenRead($war))).Entries
            foreach ($entry in $entries){
                if ($entry.Name -like $search1) {
                    "$($war)\$($entry.FullName)"
                    $hits = $hits +1
                    }
                }
            
        }
    
    }
    
}
If ($hits){ "Vulnerable" }
Else { "Compliant" }

Linux

Pour une recherche sous Linux, on peut chercher la classe cachedintrospectionresults.class dans tous les fichiers .jar et .war sur le disque, ainsi que spring-beans*.jar dans les fichiers .war :

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

ainsi que chercher le même nom de classe dans les fichiers .jar contenus dans les fichiers .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

Ressources

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/

Télécharger l’outil