diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 3aa94e479..b3094af00 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -4,6 +4,7 @@ + \ No newline at end of file diff --git a/tools/log4shell/Makefile b/tools/log4shell/Makefile index 289ce715e..e5c820476 100644 --- a/tools/log4shell/Makefile +++ b/tools/log4shell/Makefile @@ -9,7 +9,7 @@ payload: cli: touch ${LIBRARY_HASHES} - go build -o ${BINARY_NAME} . + CGO_ENABLED=0 GOOS=linux go build -o ${BINARY_NAME} . library-hashes: cli ./log4shell analyze --output ${LIBRARY_HASHES} test/vulnerable-log4j2-versions/apache test/vulnerable-log4j2-versions/target/dependency diff --git a/tools/log4shell/analyze/analyze.go b/tools/log4shell/analyze/analyze.go index 68afa27a9..48690414c 100644 --- a/tools/log4shell/analyze/analyze.go +++ b/tools/log4shell/analyze/analyze.go @@ -15,6 +15,7 @@ package analyze import ( + "archive/zip" "github.com/blang/semver/v4" "github.com/lunasec-io/lunasec/tools/log4shell/constants" "github.com/lunasec-io/lunasec/tools/log4shell/types" @@ -96,7 +97,35 @@ func fileNameToSemver(fileNameNoExt string) string { return semverVersion } -func ProcessArchiveFile(reader io.Reader, filePath, fileName string) (finding *types.Finding) { +func GetJndiLookupHash(zipReader *zip.Reader, filePath string) (fileHash string) { + reader, err := zipReader.Open(constants.JndiLookupClasspath) + if err != nil { + log.Debug(). + Str("fieName", constants.JndiLookupClasspath). + Str("path", filePath). + Err(err). + Msg("cannot find file in zip") + return + } + defer reader.Close() + + fileHash, err = util.HexEncodedSha256FromReader(reader) + if err != nil { + log.Debug(). + Str("fieName", constants.JndiLookupClasspath). + Str("path", filePath). + Err(err). + Msg("unable to hash JndiLookup.class file") + return + } + return +} + +func ProcessArchiveFile(zipReader *zip.Reader, reader io.Reader, filePath, fileName string) (finding *types.Finding) { + var ( + jndiLookupFileHash string + ) + _, file := path.Split(filePath) fileNameNoExt := strings.TrimSuffix(file, path.Ext(file)) @@ -128,26 +157,35 @@ func ProcessArchiveFile(reader io.Reader, filePath, fileName string) (finding *t return } - log.Log(). - Str("path", filePath). - Str("fileName", fileName). - Str("fileHash", fileHash). - Msg("identified library version") - if versionCve == "" { log.Debug(). Str("hash", fileHash). Str("version", semverVersion). Msg("Skipping version as it is not vulnerable to any known CVE") - return nil + return } + if versionIsInRange(fileNameNoExt, semverVersion, constants.JndiLookupPatchFileVersions) { + jndiLookupFileHash = GetJndiLookupHash(zipReader, filePath) + } + + log.Log(). + Str("path", filePath). + Str("fileName", fileName). + Str("fileHash", fileHash). + Str("jndiLookupFileName", constants.JndiLookupClasspath). + Str("jndiLookupFileHash", jndiLookupFileHash). + Msg("identified library version") + finding = &types.Finding{ Path: filePath, FileName: fileName, Hash: fileHash, + JndiLookupFileName: constants.JndiLookupClasspath, + JndiLookupHash: jndiLookupFileHash, Version: semverVersion, CVE: versionCve, + Severity: constants.CveSeverityLookup[versionCve], } return } diff --git a/tools/log4shell/commands/patch.go b/tools/log4shell/commands/patch.go new file mode 100644 index 000000000..f3d78e519 --- /dev/null +++ b/tools/log4shell/commands/patch.go @@ -0,0 +1,489 @@ +// Copyright 2021 by LunaSec (owned by Refinery Labs, Inc) +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +package commands + +import ( + "archive/zip" + "encoding/json" + "fmt" + "github.com/lunasec-io/lunasec/tools/log4shell/scan" + "github.com/lunasec-io/lunasec/tools/log4shell/types" + "github.com/lunasec-io/lunasec/tools/log4shell/util" + "github.com/rs/zerolog/log" + "github.com/urfave/cli/v2" + "io" + "io/ioutil" + "os" + "strings" +) + +func scanForFindings( + log4jLibraryHashes []byte, + searchDirs []string, + excludeDirs []string, + noFollowSymlinks bool, +) (findings []types.Finding, err error) { + var ( + hashLookup types.VulnerableHashLookup + ) + + hashLookup, err = loadHashLookup(log4jLibraryHashes, "", false) + if err != nil { + return + } + + processArchiveFile := scan.IdentifyPotentiallyVulnerableFiles(false, hashLookup) + + scanner := scan.NewLog4jDirectoryScanner( + excludeDirs, false, noFollowSymlinks, processArchiveFile) + + findings = scanner.Scan(searchDirs) + return +} + +func loadOrScanForFindings( + c *cli.Context, + log4jLibraryHashes []byte, +) (findings []types.Finding, err error) { + findingsFile := c.String("findings") + if findingsFile != "" { + var ( + findingsContent []byte + findingsOutput types.FindingsOutput + ) + + findingsContent, err = ioutil.ReadFile(findingsFile) + if err != nil { + log.Error(). + Err(err). + Str("findings", findingsFile). + Msg("Unable to open and read findings file") + return + } + + err = json.Unmarshal(findingsContent, &findingsOutput) + if err != nil { + log.Error(). + Err(err). + Str("findings", findingsFile). + Msg("Unable to unmarshal findings file") + return + } + findings = findingsOutput.VulnerableLibraries + return + } + + searchDirs := c.Args().Slice() + + excludeDirs := c.StringSlice("exclude") + noFollowSymlinks := c.Bool("no-follow-symlinks") + + log.Info(). + Strs("searchDirs", searchDirs). + Strs("excludeDirs", excludeDirs). + Msg("Scanning directories for vulnerable Log4j libraries.") + + return scanForFindings(log4jLibraryHashes, searchDirs, excludeDirs, noFollowSymlinks) +} + +func askIfShouldSkipPatch(msg string) (shouldSkip, forcePatch bool) { + var ( + patchPromptResp string + ) + + for { + fmt.Printf("Are you sure you want to patch: %s? (y)es/(n)o/(a)ll: ", msg) + _, err := fmt.Scan(&patchPromptResp) + if err != nil { + log.Error(). + Err(err). + Msg("Unable to process response.") + return true, false + } + fmt.Println() + + switch patchPromptResp { + case "y": + shouldSkip = false + case "n": + shouldSkip = true + case "a": + forcePatch = true + default: + fmt.Printf("Option %s is not valid, please enter 'y', 'n', or 'a'.\n", patchPromptResp) + continue + } + break + } + return +} + +func getHashOfZipMember(member *zip.File) (hash string) { + memberReader, err := member.Open() + if err != nil { + log.Warn(). + Err(err). + Str("name", member.Name). + Msg("Unable to open zip member") + return + } + defer memberReader.Close() + + hash, err = util.HexEncodedSha256FromReader(memberReader) + if err != nil { + log.Warn(). + Err(err). + Str("name", member.Name). + Msg("Unable to hash zip member") + return + } + return +} + +func getNestedZipReader(zipReader *zip.Reader, zipPath string) (nestedZipReader *zip.Reader, err error) { + if zipPath == "" { + nestedZipReader = zipReader + return + } + + nestedZip, err := zipReader.Open(zipPath) + if err != nil { + log.Error().Err(err).Str("zipPath", zipPath).Msg("Unable to open nested zip path") + return + } + defer nestedZip.Close() + + info, err := nestedZip.Stat() + if err != nil { + log.Error().Err(err).Str("zipPath", zipPath).Msg("Unable to stat nested zip") + return + } + + nestedZipReader, err = util.NewZipFromReader(nestedZip, info.Size()) + if err != nil { + log.Error().Err(err).Str("zipPath", zipPath).Msg("Unable to create new zip reader") + return + } + return +} + +func head(s []string) string { + if len(s) > 0 { + return s[0] + } + return "" +} + +func tail(s []string) []string { + if len(s) > 1 { + return s[1:] + } + return []string{} +} + +func addFileToZip(zipWriter *zip.Writer, existingHeader zip.FileHeader, filename string) (err error) { + defer zipWriter.Flush() + + fileToZip, err := os.Open(filename) + if err != nil { + log.Error(). + Err(err). + Str("filename", filename). + Msg("Unable to open file") + return + } + defer fileToZip.Close() + + // Get the file information + info, err := fileToZip.Stat() + if err != nil { + log.Error(). + Err(err). + Str("filename", filename). + Msg("Unable to stat file") + return + } + + existingHeader.UncompressedSize64 = uint64(info.Size()) + + writer, err := zipWriter.CreateHeader(&existingHeader) + if err != nil { + log.Error(). + Err(err). + Str("filename", filename). + Msg("Unable to create zip header") + return + } + + _, err = io.Copy(writer, fileToZip) + if err != nil { + log.Error(). + Err(err). + Str("filename", filename). + Msg("Unable to copy file contents to zip writer") + return + } + return +} + +func filterOutJndiLookupFromZip( + finding types.Finding, + zipReader *zip.Reader, + nestedPaths []string, + zipWriter *zip.Writer, + existingHeader zip.FileHeader, +) (filename string, err error) { + validOutputFile := false + + outZip, err := ioutil.TempFile(os.TempDir(), "*.zip") + if err != nil { + log.Error(). + Str("tmpDir", os.TempDir()). + Err(err). + Msg("Unable to create temporary libraryFile") + return + } + defer func() { + outZip.Close() + if !validOutputFile { + os.Remove(outZip.Name()) + } + }() + + nestedZipWriter := zip.NewWriter(outZip) + defer nestedZipWriter.Close() + + err = copyAndFilterFilesFromZip(finding, zipReader, nestedZipWriter, nestedPaths) + if err != nil { + return + } + + if zipWriter == nil { + filename = outZip.Name() + validOutputFile = true + return + } + + nestedZipWriter.Close() + outZip.Close() + + err = addFileToZip(zipWriter, existingHeader, outZip.Name()) + if err != nil { + return + } + return +} + +func copyAndFilterFilesFromZip( + finding types.Finding, + zipReader *zip.Reader, + writer *zip.Writer, + nestedPaths []string, +) (err error) { + defer writer.Flush() + + nestedPath := head(nestedPaths) + for _, member := range zipReader.File { + if member.Name == nestedPath { + var nestedZipReader *zip.Reader + + nestedZipReader, err = getNestedZipReader(zipReader, nestedPath) + if err != nil { + return + } + + _, err = filterOutJndiLookupFromZip(finding, nestedZipReader, tail(nestedPaths), writer, member.FileHeader) + if err != nil { + return + } + continue + } + + if len(nestedPaths) == 0 && member.Name == finding.JndiLookupFileName { + shouldSkip := false + + log.Debug(). + Str("path", finding.Path). + Str("zipFilePath", finding.JndiLookupFileName). + Msg("Found file to remove in order to patch log4j library.") + + hash := getHashOfZipMember(member) + if hash != finding.JndiLookupHash { + shouldSkip, _ = askIfShouldSkipPatch( + fmt.Sprintf( + "located JndiLookup.class file hash does not match expected finding hash: \"%s\" != \"%s\" . Patching might result in unintended side effects.", + hash, finding.JndiLookupHash, + ), + ) + } + + if !shouldSkip { + continue + } + + log.Info(). + Str("findingPath", finding.Path). + Msg("Skipping library for patching") + } + + if member.FileInfo().IsDir() { + _, err = writer.Create(member.Name) + if err != nil { + log.Error(). + Err(err). + Str("memberName", member.Name). + Str("member", fmt.Sprintf("%+v", member.FileHeader)). + Msg("Error while copying zip dir.") + return + } + continue + } + + err = writer.Copy(member) + if err != nil { + log.Error(). + Err(err). + Str("memberName", member.Name). + Str("member", fmt.Sprintf("%+v", member.FileHeader)). + Msg("Error while copying zip file.") + return + } + } + return +} + +func patchJavaArchive(finding types.Finding, dryRun bool) (err error) { + var ( + libraryFile *os.File + zipReader *zip.Reader + ) + + zipPaths := strings.Split(finding.Path, "::") + + fsFile := head(zipPaths) + + libraryFile, err = os.Open(fsFile) + if err != nil { + log.Error(). + Str("path", finding.Path). + Err(err). + Msg("Unable to open findings archive") + return + } + defer libraryFile.Close() + + info, err := os.Stat(fsFile) + if err != nil { + log.Error(). + Str("path", finding.Path). + Err(err). + Msg("Cannot stat file.") + return + } + + zipReader, err = zip.NewReader(libraryFile, info.Size()) + if err != nil { + log.Error(). + Str("path", finding.Path). + Err(err). + Msg("Cannot create new zip reader for file.") + return + } + + filteredLibrary, err := filterOutJndiLookupFromZip(finding, zipReader, tail(zipPaths), nil, zip.FileHeader{}) + if err != nil { + return + } + + if dryRun { + log.Info(). + Str("libraryFileName", fsFile). + Str("fullPathToLibrary", finding.Path). + Msg("[Dry Run] Not completing patch process of overwriting existing library.") + return + } + + _, err = util.CopyFile(filteredLibrary, fsFile) + if err != nil { + log.Error(). + Str("outZipName", filteredLibrary). + Str("libraryFileName", fsFile). + Str("fullPathToLibrary", finding.Path). + Err(err). + Msg("Unable to replace library file with patched library file.") + return + } + return +} + +func JavaArchivePatchCommand( + c *cli.Context, + globalBoolFlags map[string]bool, + log4jLibraryHashes []byte, +) error { + enableGlobalFlags(c, globalBoolFlags) + + findings, err := loadOrScanForFindings(c, log4jLibraryHashes) + if err != nil { + return err + } + + log.Info(). + Int("findingsCount", len(findings)). + Msg("Patching found vulnerable Log4j libraries.") + + forcePatch := c.Bool("force-patch") + dryRun := c.Bool("dry-run") + + var patchedLibraries []string + + for _, finding := range findings { + var ( + shouldSkip bool + ) + + if finding.JndiLookupFileName == "" { + log.Warn(). + Str("path", finding.Path). + Err(err). + Msg("Finding does not have JndiLookup.class file to patch") + continue + } + + if !forcePatch { + shouldSkip, forcePatch = askIfShouldSkipPatch(finding.Path) + if !forcePatch && shouldSkip { + log.Info(). + Str("findingPath", finding.Path). + Msg("Skipping library for patching") + continue + } + } + + err = patchJavaArchive(finding, dryRun) + if err != nil { + log.Error(). + Str("path", finding.Path). + Msg("Unable to patch library successfully.") + continue + } + patchedLibraries = append(patchedLibraries, finding.Path) + } + + log.Info(). + Strs("patchedLibraries", patchedLibraries). + Msg("Completed patched libraries.") + return nil +} diff --git a/tools/log4shell/commands/scan.go b/tools/log4shell/commands/scan.go index 71ea3e881..9fc54a18c 100644 --- a/tools/log4shell/commands/scan.go +++ b/tools/log4shell/commands/scan.go @@ -51,10 +51,11 @@ func loadHashLookup( return } -func ScanCommand(c *cli.Context, globalBoolFlags map[string]bool, log4jLibraryHashes []byte) (err error) { - enableGlobalFlags(c, globalBoolFlags) - - searchDirs := c.Args().Slice() +func scanDirectoriesForVulnerableLibraries( + c *cli.Context, + searchDirs []string, + log4jLibraryHashes []byte, +) (scannerFindings []types.Finding, err error) { log.Debug(). Strs("directories", searchDirs). Msg("scanning directories") @@ -67,7 +68,7 @@ func ScanCommand(c *cli.Context, globalBoolFlags map[string]bool, log4jLibraryHa hashLookup, err := loadHashLookup(log4jLibraryHashes, versionHashes, onlyScanArchives) if err != nil { - return err + return } processArchiveFile := scan.IdentifyPotentiallyVulnerableFiles(scanLog4j1, hashLookup) @@ -75,7 +76,23 @@ func ScanCommand(c *cli.Context, globalBoolFlags map[string]bool, log4jLibraryHa scanner := scan.NewLog4jDirectoryScanner( excludeDirs, onlyScanArchives, noFollowSymlinks, processArchiveFile) - scannerFindings := scanner.Scan(searchDirs) + log.Info(). + Strs("searchDirs", searchDirs). + Strs("excludeDirs", excludeDirs). + Msg("Scanning directories for vulnerable Log4j libraries.") + + scannerFindings = scanner.Scan(searchDirs) + return +} + +func ScanCommand(c *cli.Context, globalBoolFlags map[string]bool, log4jLibraryHashes []byte) (err error) { + enableGlobalFlags(c, globalBoolFlags) + + searchDirs := c.Args().Slice() + scannerFindings, err := scanDirectoriesForVulnerableLibraries(c, searchDirs, log4jLibraryHashes) + if err != nil { + return + } output := c.String("output") if output != "" { diff --git a/tools/log4shell/constants/version.go b/tools/log4shell/constants/version.go index 4d07c2f07..307ab23a9 100644 --- a/tools/log4shell/constants/version.go +++ b/tools/log4shell/constants/version.go @@ -14,4 +14,4 @@ // package constants -const Version = "1.4.1" +const Version = "1.5.0" diff --git a/tools/log4shell/constants/vulnerablehashes.go b/tools/log4shell/constants/vulnerablehashes.go index 80aff5891..6cc418a59 100644 --- a/tools/log4shell/constants/vulnerablehashes.go +++ b/tools/log4shell/constants/vulnerablehashes.go @@ -23,6 +23,7 @@ import ( const ( Log4ShellCve = "CVE-2021-44228" CtxCve = "CVE-2021-45046" + RecursiveDosCve = "CVE-2021-45105" Log4j1RceCve = "CVE-2019-17571" ) @@ -30,9 +31,14 @@ var ( CveSeverityLookup = map[string]string { Log4ShellCve: "10.0", CtxCve: "9.0", + RecursiveDosCve: "7.5", Log4j1RceCve: "9.8", } + JndiLookupPatchFileVersions = semver.MustParseRange(">=2.0.0") + + JndiLookupClasspath = "org/apache/logging/log4j/core/lookup/JndiLookup.class" + FileVersionChecks = []types.LibraryFileVersionCheck{ { Cve: Log4ShellCve, @@ -41,12 +47,17 @@ var ( }, { Cve: Log4ShellCve, - SemverRange: semver.MustParseRange(">=2.1.0 <=2.14.1"), + SemverRange: semver.MustParseRange(">=2.1.0 <2.15.0"), LibraryFile: "JndiManager.class", }, { Cve: CtxCve, - SemverRange: semver.MustParseRange("=2.15.0"), + SemverRange: semver.MustParseRange(">=2.15.0 <2.16.0"), + LibraryFile: "JndiManager.class", + }, + { + Cve: RecursiveDosCve, + SemverRange: semver.MustParseRange(">=2.16.0 <2.17.0"), LibraryFile: "JndiManager.class", }, { diff --git a/tools/log4shell/findings.json b/tools/log4shell/findings.json index 346b5875b..0f4df5fc1 100644 --- a/tools/log4shell/findings.json +++ b/tools/log4shell/findings.json @@ -1,708 +1,14 @@ { "vulnerable_libraries": [ { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-1.2.15/log4j-1.2.15.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "7b996623c05f1a25a57fb5b43c519c2ec02ec2e647c2b97b3407965af928c9a4", - "version": "1.2.15", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-1.2.16/log4j-1.2.16.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "688a3dadfb1c0a08fb2a2885a356200eb74e7f0f26a197d358d74f2faf6e8f46", - "version": "1.2.16", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-1.2.17/log4j-1.2.17.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "8ef0ebdfbf28ec14b2267e6004a8eea947b4411d3c30d228a7b48fae36431d74", - "version": "1.2.17", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-beta9-bin/log4j-core-2.0-beta9.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", - "version": "2.0.0-beta9, 2.0.0-rc1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-beta9-osgi-bin/log4j-core-osgi-reduced-2.0-beta9.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", - "version": "2.0.0-beta9, 2.0.0-rc1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-bin/log4j-core-2.0.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "fd6c63c11f7a6b52eff04be1de3477c9ddbbc925022f7216320e6db93f1b7d29", - "version": "2.0.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-rc1-bin/log4j-core-2.0-rc1.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", - "version": "2.0.0-beta9, 2.0.0-rc1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-rc1-osgi-bin/log4j-core-osgi-reduced-2.0-rc1.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", - "version": "2.0.0-beta9, 2.0.0-rc1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-rc2-bin/log4j-core-2.0-rc2.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "a03e538ed25eff6c4fe48aabc5514e5ee687542f29f2206256840e74ed59bcd2", - "version": "2.0.0-rc2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0.1-bin/log4j-core-2.0.1.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "964fa0bf8c045097247fa0c973e0c167df08720409fd9e44546e0ceda3925f3e", - "version": "2.0.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0.2-bin/log4j-core-2.0.2.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "9626798cce6abd0f2ffef89f1a3d0092a60d34a837a02bbe571dbe00236a2c8c", - "version": "2.0.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.1-bin/log4j-core-2.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", - "version": "2.1.0, 2.2.0, 2.3.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.10.0-bin/log4j-core-2.10.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.11.0-bin/log4j-core-2.11.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.11.1-bin/log4j-core-2.11.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.11.2-bin/log4j-core-2.11.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.12.0-bin/log4j-core-2.12.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1fa92c00fa0b305b6bbe6e2ee4b012b588a906a20a05e135cbe64c9d77d676de", - "version": "2.12.0, 2.12.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.12.1-bin/log4j-core-2.12.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1fa92c00fa0b305b6bbe6e2ee4b012b588a906a20a05e135cbe64c9d77d676de", - "version": "2.12.0, 2.12.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.12.2-bin/log4j-core-2.12.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "b1960d63a3946f9e16e1920624f37c152b58b98932ed04df99ed5d9486732afb", - "version": "2.12.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.13.0-bin/log4j-core-2.13.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", - "version": "2.13.0, 2.13.1, 2.13.2, 2.13.3", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.13.1-bin/log4j-core-2.13.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", - "version": "2.13.0, 2.13.1, 2.13.2, 2.13.3", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.13.2-bin/log4j-core-2.13.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", - "version": "2.13.0, 2.13.1, 2.13.2, 2.13.3", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.13.3-bin/log4j-core-2.13.3.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", - "version": "2.13.0, 2.13.1, 2.13.2, 2.13.3", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.14.0-bin/log4j-core-2.14.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "77323460255818f4cbfe180141d6001bfb575b429e00a07cbceabd59adf334d6", - "version": "2.14.0, 2.14.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.14.1-bin/log4j-core-2.14.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "77323460255818f4cbfe180141d6001bfb575b429e00a07cbceabd59adf334d6", - "version": "2.14.0, 2.14.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.15.0-bin/log4j-core-2.15.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "db07ef1ea174e000b379732681bd835cfede648a7971bf4e9a0d31981582d69e", - "version": "2.15.0", - "cve": "CVE-2021-45046", - "severity": "3.7" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.2-bin/log4j-core-2.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", - "version": "2.1.0, 2.2.0, 2.3.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.3-bin/log4j-core-2.3.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", - "version": "2.1.0, 2.2.0, 2.3.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.4-bin/log4j-core-2.4.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", - "version": "2.4.0, 2.4.1, 2.5.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.4.1-bin/log4j-core-2.4.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", - "version": "2.4.0, 2.4.1, 2.5.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.5-bin/log4j-core-2.5.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", - "version": "2.4.0, 2.4.1, 2.5.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.6-bin/log4j-core-2.6.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", - "version": "2.6.0, 2.6.1, 2.6.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.6.1-bin/log4j-core-2.6.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", - "version": "2.6.0, 2.6.1, 2.6.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.6.2-bin/log4j-core-2.6.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", - "version": "2.6.0, 2.6.1, 2.6.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.7-bin/log4j-core-2.7.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", - "version": "2.7.0, 2.8.0, 2.8.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.8-bin/log4j-core-2.8.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", - "version": "2.7.0, 2.8.0, 2.8.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.8.1-bin/log4j-core-2.8.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", - "version": "2.7.0, 2.8.0, 2.8.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.8.2-bin/log4j-core-2.8.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "764b06686dbe06e3d5f6d15891250ab04073a0d1c357d114b7365c70fa8a7407", - "version": "2.8.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.9.0-bin/log4j-core-2.9.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.9.1-bin/log4j-core-2.9.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.1/dist/lib/log4j-1.2.1.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "6adb3617902180bdf9cbcfc08b5a11f3fac2b44ef1828131296ac41397435e3d", - "version": "1.2.1, 1.2.2, 1.2.3, 1.2.4", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.2/dist/lib/log4j-1.2.2.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "6adb3617902180bdf9cbcfc08b5a11f3fac2b44ef1828131296ac41397435e3d", - "version": "1.2.1, 1.2.2, 1.2.3, 1.2.4", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.3/dist/lib/log4j-1.2.3.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "6adb3617902180bdf9cbcfc08b5a11f3fac2b44ef1828131296ac41397435e3d", - "version": "1.2.1, 1.2.2, 1.2.3, 1.2.4", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.4/dist/lib/log4j-1.2.4.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "6adb3617902180bdf9cbcfc08b5a11f3fac2b44ef1828131296ac41397435e3d", - "version": "1.2.1, 1.2.2, 1.2.3, 1.2.4", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.5/dist/lib/log4j-1.2.5.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "ed5d53deb29f737808521dd6284c2d7a873a59140e702295a80bd0f26988f53a", - "version": "1.2.5", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.6/dist/lib/log4j-1.2.6.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "3ef93e9cb937295175b75182e42ba9a0aa94f9f8e295236c9eef914348efeef0", - "version": "1.2.6, 1.2.7, 1.2.9", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.7/dist/lib/log4j-1.2.7.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "3ef93e9cb937295175b75182e42ba9a0aa94f9f8e295236c9eef914348efeef0", - "version": "1.2.6, 1.2.7, 1.2.9", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.8/dist/lib/log4j-1.2.8.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "bee4a5a70843a981e47207b476f1e705c21fc90cb70e95c3b40d04a2191f33e9", - "version": "1.2.8", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.11/dist/lib/log4j-1.2.11.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "d778227b779f8f3a2850987e3cfe6020ca26c299037fdfa7e0ac8f81385963e6", - "version": "1.2.11", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.12/dist/lib/log4j-1.2.12.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "f3b815a2b3c74851ff1b94e414c36f576fbcdf52b82b805b2e18322b3f5fc27c", - "version": "1.2.12", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.13/dist/lib/log4j-1.2.13.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "fbda3cfc5853ab4744b853398f2b3580505f5a7d67bfb200716ef6ae5be3c8b7", - "version": "1.2.13, 1.2.14", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.14/dist/lib/log4j-1.2.14.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "fbda3cfc5853ab4744b853398f2b3580505f5a7d67bfb200716ef6ae5be3c8b7", - "version": "1.2.13, 1.2.14", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.9/dist/lib/log4j-1.2.9.jar", - "file_name": "org/apache/log4j/net/SocketNode.class", - "hash": "3ef93e9cb937295175b75182e42ba9a0aa94f9f8e295236c9eef914348efeef0", - "version": "1.2.6, 1.2.7, 1.2.9", - "cve": "CVE-2019-17571", - "severity": "9.8" - }, - { - "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0.1-bin/log4j-core-2.0.1.jar", + "path": "/home/breadchris/projects/lunasec-monorepo/tools/log4shell/test/vulnerable-log4j2-versions/apache/apache-log4j-2.0.1-bin/log4j-core-2.0.1.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "964fa0bf8c045097247fa0c973e0c167df08720409fd9e44546e0ceda3925f3e", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "964fa0bf8c045097247fa0c973e0c167df08720409fd9e44546e0ceda3925f3e", "version": "2.0.1", "cve": "CVE-2021-44228", "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0-rc1.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", - "version": "2.0.0-beta9, 2.0.0-rc1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0-rc2.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "a03e538ed25eff6c4fe48aabc5514e5ee687542f29f2206256840e74ed59bcd2", - "version": "2.0.0-rc2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0.1.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "964fa0bf8c045097247fa0c973e0c167df08720409fd9e44546e0ceda3925f3e", - "version": "2.0.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0.2.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "9626798cce6abd0f2ffef89f1a3d0092a60d34a837a02bbe571dbe00236a2c8c", - "version": "2.0.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0.jar", - "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", - "hash": "fd6c63c11f7a6b52eff04be1de3477c9ddbbc925022f7216320e6db93f1b7d29", - "version": "2.0.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", - "version": "2.1.0, 2.2.0, 2.3.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.10.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.11.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.11.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.11.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.12.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1fa92c00fa0b305b6bbe6e2ee4b012b588a906a20a05e135cbe64c9d77d676de", - "version": "2.12.0, 2.12.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.12.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1fa92c00fa0b305b6bbe6e2ee4b012b588a906a20a05e135cbe64c9d77d676de", - "version": "2.12.0, 2.12.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.12.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "b1960d63a3946f9e16e1920624f37c152b58b98932ed04df99ed5d9486732afb", - "version": "2.12.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.13.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", - "version": "2.13.0, 2.13.1, 2.13.2, 2.13.3", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.13.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", - "version": "2.13.0, 2.13.1, 2.13.2, 2.13.3", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.13.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", - "version": "2.13.0, 2.13.1, 2.13.2, 2.13.3", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.13.3.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", - "version": "2.13.0, 2.13.1, 2.13.2, 2.13.3", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.14.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "77323460255818f4cbfe180141d6001bfb575b429e00a07cbceabd59adf334d6", - "version": "2.14.0, 2.14.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.14.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "77323460255818f4cbfe180141d6001bfb575b429e00a07cbceabd59adf334d6", - "version": "2.14.0, 2.14.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.15.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "db07ef1ea174e000b379732681bd835cfede648a7971bf4e9a0d31981582d69e", - "version": "2.15.0", - "cve": "CVE-2021-45046", - "severity": "3.7" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", - "version": "2.1.0, 2.2.0, 2.3.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.3.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", - "version": "2.1.0, 2.2.0, 2.3.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.4.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", - "version": "2.4.0, 2.4.1, 2.5.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.4.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", - "version": "2.4.0, 2.4.1, 2.5.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.5.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", - "version": "2.4.0, 2.4.1, 2.5.0", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.6.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", - "version": "2.6.0, 2.6.1, 2.6.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.6.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", - "version": "2.6.0, 2.6.1, 2.6.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.6.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", - "version": "2.6.0, 2.6.1, 2.6.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.7.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", - "version": "2.7.0, 2.8.0, 2.8.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.8.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", - "version": "2.7.0, 2.8.0, 2.8.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.8.2.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "764b06686dbe06e3d5f6d15891250ab04073a0d1c357d114b7365c70fa8a7407", - "version": "2.8.2", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.8.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", - "version": "2.7.0, 2.8.0, 2.8.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.9.0.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" - }, - { - "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.9.1.jar", - "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", - "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", - "version": "2.10.0, 2.11.0, 2.11.1, 2.11.2, 2.9.0, 2.9.1", - "cve": "CVE-2021-44228", - "severity": "10.0" } ] } \ No newline at end of file diff --git a/tools/log4shell/log4j-library-hashes.json b/tools/log4shell/log4j-library-hashes.json index bfc6d6ec9..311b00ed1 100644 --- a/tools/log4shell/log4j-library-hashes.json +++ b/tools/log4shell/log4j-library-hashes.json @@ -4,610 +4,891 @@ "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-1.2.15/log4j-1.2.15.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "7b996623c05f1a25a57fb5b43c519c2ec02ec2e647c2b97b3407965af928c9a4", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.15", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-1.2.16/log4j-1.2.16.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "688a3dadfb1c0a08fb2a2885a356200eb74e7f0f26a197d358d74f2faf6e8f46", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.16", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-1.2.17/log4j-1.2.17.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "8ef0ebdfbf28ec14b2267e6004a8eea947b4411d3c30d228a7b48fae36431d74", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.17", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-beta9-bin/log4j-core-2.0-beta9.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "2.0.0-beta9", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-beta9-osgi-bin/log4j-core-osgi-reduced-2.0-beta9.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "2.0.0-beta9", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-bin/log4j-core-2.0.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "fd6c63c11f7a6b52eff04be1de3477c9ddbbc925022f7216320e6db93f1b7d29", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "fd6c63c11f7a6b52eff04be1de3477c9ddbbc925022f7216320e6db93f1b7d29", "version": "2.0.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-rc1-bin/log4j-core-2.0-rc1.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "2.0.0-rc1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-rc1-osgi-bin/log4j-core-osgi-reduced-2.0-rc1.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "2.0.0-rc1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0-rc2-bin/log4j-core-2.0-rc2.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "a03e538ed25eff6c4fe48aabc5514e5ee687542f29f2206256840e74ed59bcd2", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "2.0.0-rc2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0.1-bin/log4j-core-2.0.1.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "964fa0bf8c045097247fa0c973e0c167df08720409fd9e44546e0ceda3925f3e", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "964fa0bf8c045097247fa0c973e0c167df08720409fd9e44546e0ceda3925f3e", "version": "2.0.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.0.2-bin/log4j-core-2.0.2.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "9626798cce6abd0f2ffef89f1a3d0092a60d34a837a02bbe571dbe00236a2c8c", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "9626798cce6abd0f2ffef89f1a3d0092a60d34a837a02bbe571dbe00236a2c8c", "version": "2.0.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.1-bin/log4j-core-2.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a768e5383990b512f9d4f97217eda94031c2fa4aea122585f5a475ab99dc7307", "version": "2.1.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.10.0-bin/log4j-core-2.10.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.10.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.11.0-bin/log4j-core-2.11.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.11.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.11.1-bin/log4j-core-2.11.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.11.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.11.2-bin/log4j-core-2.11.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.11.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.12.0-bin/log4j-core-2.12.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1fa92c00fa0b305b6bbe6e2ee4b012b588a906a20a05e135cbe64c9d77d676de", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "5c104d16ff9831b456e4d7eaf66bcf531f086767782d08eece3fb37e40467279", "version": "2.12.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.12.1-bin/log4j-core-2.12.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1fa92c00fa0b305b6bbe6e2ee4b012b588a906a20a05e135cbe64c9d77d676de", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "5c104d16ff9831b456e4d7eaf66bcf531f086767782d08eece3fb37e40467279", "version": "2.12.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.12.2-bin/log4j-core-2.12.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "b1960d63a3946f9e16e1920624f37c152b58b98932ed04df99ed5d9486732afb", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "febbc7867784d0f06934fec59df55ee45f6b24c55b17fff71cc4fca80bf22ebb", "version": "2.12.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.13.0-bin/log4j-core-2.13.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "2b32bfc0556ea59307b9b2fde75b6dfbb5bf4f1d008d1402bc9a2357d8a8c61f", "version": "2.13.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.13.1-bin/log4j-core-2.13.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "2b32bfc0556ea59307b9b2fde75b6dfbb5bf4f1d008d1402bc9a2357d8a8c61f", "version": "2.13.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.13.2-bin/log4j-core-2.13.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "2b32bfc0556ea59307b9b2fde75b6dfbb5bf4f1d008d1402bc9a2357d8a8c61f", "version": "2.13.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.13.3-bin/log4j-core-2.13.3.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "2b32bfc0556ea59307b9b2fde75b6dfbb5bf4f1d008d1402bc9a2357d8a8c61f", "version": "2.13.3", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.14.0-bin/log4j-core-2.14.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "77323460255818f4cbfe180141d6001bfb575b429e00a07cbceabd59adf334d6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "84057480ba7da6fb6d9ea50c53a00848315833c1f34bf8f4a47f11a14499ae3f", "version": "2.14.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.14.1-bin/log4j-core-2.14.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "77323460255818f4cbfe180141d6001bfb575b429e00a07cbceabd59adf334d6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "84057480ba7da6fb6d9ea50c53a00848315833c1f34bf8f4a47f11a14499ae3f", "version": "2.14.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.15.0-bin/log4j-core-2.15.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "db07ef1ea174e000b379732681bd835cfede648a7971bf4e9a0d31981582d69e", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "84057480ba7da6fb6d9ea50c53a00848315833c1f34bf8f4a47f11a14499ae3f", "version": "2.15.0", - "cve": "CVE-2021-45046" + "cve": "CVE-2021-45046", + "severity": "9.0" + }, + { + "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.16.0-bin/log4j-core-2.16.0.jar", + "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", + "hash": "5210e6aae7dd8a61cd16c56937c5f2ed43941487830f46e99d0d3f45bfa6f953", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "84057480ba7da6fb6d9ea50c53a00848315833c1f34bf8f4a47f11a14499ae3f", + "version": "2.16.0", + "cve": "CVE-2021-45105", + "severity": "7.5" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.2-bin/log4j-core-2.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a768e5383990b512f9d4f97217eda94031c2fa4aea122585f5a475ab99dc7307", "version": "2.2.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.3-bin/log4j-core-2.3.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a768e5383990b512f9d4f97217eda94031c2fa4aea122585f5a475ab99dc7307", "version": "2.3.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.4-bin/log4j-core-2.4.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a534961bbfce93966496f86c9314f46939fd082bb89986b48b7430c3bea903f7", "version": "2.4.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.4.1-bin/log4j-core-2.4.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a534961bbfce93966496f86c9314f46939fd082bb89986b48b7430c3bea903f7", "version": "2.4.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.5-bin/log4j-core-2.5.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a534961bbfce93966496f86c9314f46939fd082bb89986b48b7430c3bea903f7", "version": "2.5.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.6-bin/log4j-core-2.6.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "e8ffed196e04f81b015f847d4ec61f22f6731c11b5a21b1cfc45ccbc58b8ea45", "version": "2.6.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.6.1-bin/log4j-core-2.6.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "e8ffed196e04f81b015f847d4ec61f22f6731c11b5a21b1cfc45ccbc58b8ea45", "version": "2.6.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.6.2-bin/log4j-core-2.6.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "e8ffed196e04f81b015f847d4ec61f22f6731c11b5a21b1cfc45ccbc58b8ea45", "version": "2.6.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.7-bin/log4j-core-2.7.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "cee2305065bb61d434cdb45cfdaa46e7da148e5c6a7678d56f3e3dc8d7073eae", "version": "2.7.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.8-bin/log4j-core-2.8.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "66c89e2d5ae674641138858b571e65824df6873abb1677f7b2ef5c0dd4dbc442", "version": "2.8.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.8.1-bin/log4j-core-2.8.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "66c89e2d5ae674641138858b571e65824df6873abb1677f7b2ef5c0dd4dbc442", "version": "2.8.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.8.2-bin/log4j-core-2.8.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "764b06686dbe06e3d5f6d15891250ab04073a0d1c357d114b7365c70fa8a7407", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "d4ec57440cd6db6eaf6bcb6b197f1cbaf5a3e26253d59578d51db307357cbf15", "version": "2.8.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.9.0-bin/log4j-core-2.9.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.9.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/apache-log4j-2.9.1-bin/log4j-core-2.9.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.9.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.1/dist/lib/log4j-1.2.1.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "6adb3617902180bdf9cbcfc08b5a11f3fac2b44ef1828131296ac41397435e3d", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.1", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.2/dist/lib/log4j-1.2.2.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "6adb3617902180bdf9cbcfc08b5a11f3fac2b44ef1828131296ac41397435e3d", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.2", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.3/dist/lib/log4j-1.2.3.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "6adb3617902180bdf9cbcfc08b5a11f3fac2b44ef1828131296ac41397435e3d", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.3", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.4/dist/lib/log4j-1.2.4.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "6adb3617902180bdf9cbcfc08b5a11f3fac2b44ef1828131296ac41397435e3d", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.4", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.5/dist/lib/log4j-1.2.5.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "ed5d53deb29f737808521dd6284c2d7a873a59140e702295a80bd0f26988f53a", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.5", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.6/dist/lib/log4j-1.2.6.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "3ef93e9cb937295175b75182e42ba9a0aa94f9f8e295236c9eef914348efeef0", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.6", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.7/dist/lib/log4j-1.2.7.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "3ef93e9cb937295175b75182e42ba9a0aa94f9f8e295236c9eef914348efeef0", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.7", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/jakarta-log4j-1.2.8/dist/lib/log4j-1.2.8.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "bee4a5a70843a981e47207b476f1e705c21fc90cb70e95c3b40d04a2191f33e9", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.8", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.11/dist/lib/log4j-1.2.11.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "d778227b779f8f3a2850987e3cfe6020ca26c299037fdfa7e0ac8f81385963e6", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.11", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.12/dist/lib/log4j-1.2.12.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "f3b815a2b3c74851ff1b94e414c36f576fbcdf52b82b805b2e18322b3f5fc27c", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.12", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.13/dist/lib/log4j-1.2.13.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "fbda3cfc5853ab4744b853398f2b3580505f5a7d67bfb200716ef6ae5be3c8b7", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.13", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.14/dist/lib/log4j-1.2.14.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "fbda3cfc5853ab4744b853398f2b3580505f5a7d67bfb200716ef6ae5be3c8b7", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.14", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/apache/logging-log4j-1.2.9/dist/lib/log4j-1.2.9.jar", "file_name": "org/apache/log4j/net/SocketNode.class", "hash": "3ef93e9cb937295175b75182e42ba9a0aa94f9f8e295236c9eef914348efeef0", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "1.2.9", - "cve": "CVE-2019-17571" + "cve": "CVE-2019-17571", + "severity": "9.8" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0-rc1.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "39a495034d37c7934b64a9aa686ea06b61df21aa222044cc50a47d6903ba1ca8", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "2.0.0-rc1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0-rc2.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "a03e538ed25eff6c4fe48aabc5514e5ee687542f29f2206256840e74ed59bcd2", + "jndi_lookup_file_name": "", + "jndi_lookup_hash": "", "version": "2.0.0-rc2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0.1.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "964fa0bf8c045097247fa0c973e0c167df08720409fd9e44546e0ceda3925f3e", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "964fa0bf8c045097247fa0c973e0c167df08720409fd9e44546e0ceda3925f3e", "version": "2.0.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0.2.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "9626798cce6abd0f2ffef89f1a3d0092a60d34a837a02bbe571dbe00236a2c8c", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "9626798cce6abd0f2ffef89f1a3d0092a60d34a837a02bbe571dbe00236a2c8c", "version": "2.0.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.0.jar", "file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", "hash": "fd6c63c11f7a6b52eff04be1de3477c9ddbbc925022f7216320e6db93f1b7d29", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "fd6c63c11f7a6b52eff04be1de3477c9ddbbc925022f7216320e6db93f1b7d29", "version": "2.0.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a768e5383990b512f9d4f97217eda94031c2fa4aea122585f5a475ab99dc7307", "version": "2.1.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.10.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.10.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.11.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.11.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.11.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.11.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.11.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.11.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.12.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1fa92c00fa0b305b6bbe6e2ee4b012b588a906a20a05e135cbe64c9d77d676de", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "5c104d16ff9831b456e4d7eaf66bcf531f086767782d08eece3fb37e40467279", "version": "2.12.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.12.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1fa92c00fa0b305b6bbe6e2ee4b012b588a906a20a05e135cbe64c9d77d676de", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "5c104d16ff9831b456e4d7eaf66bcf531f086767782d08eece3fb37e40467279", "version": "2.12.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.12.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "b1960d63a3946f9e16e1920624f37c152b58b98932ed04df99ed5d9486732afb", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "febbc7867784d0f06934fec59df55ee45f6b24c55b17fff71cc4fca80bf22ebb", "version": "2.12.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.13.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "2b32bfc0556ea59307b9b2fde75b6dfbb5bf4f1d008d1402bc9a2357d8a8c61f", "version": "2.13.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.13.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "2b32bfc0556ea59307b9b2fde75b6dfbb5bf4f1d008d1402bc9a2357d8a8c61f", "version": "2.13.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.13.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "2b32bfc0556ea59307b9b2fde75b6dfbb5bf4f1d008d1402bc9a2357d8a8c61f", "version": "2.13.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.13.3.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "c3e95da6542945c1a096b308bf65bbd7fcb96e3d201e5a2257d85d4dedc6a078", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "2b32bfc0556ea59307b9b2fde75b6dfbb5bf4f1d008d1402bc9a2357d8a8c61f", "version": "2.13.3", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.14.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "77323460255818f4cbfe180141d6001bfb575b429e00a07cbceabd59adf334d6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "84057480ba7da6fb6d9ea50c53a00848315833c1f34bf8f4a47f11a14499ae3f", "version": "2.14.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.14.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "77323460255818f4cbfe180141d6001bfb575b429e00a07cbceabd59adf334d6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "84057480ba7da6fb6d9ea50c53a00848315833c1f34bf8f4a47f11a14499ae3f", "version": "2.14.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.15.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "db07ef1ea174e000b379732681bd835cfede648a7971bf4e9a0d31981582d69e", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "84057480ba7da6fb6d9ea50c53a00848315833c1f34bf8f4a47f11a14499ae3f", "version": "2.15.0", - "cve": "CVE-2021-45046" + "cve": "CVE-2021-45046", + "severity": "9.0" + }, + { + "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.16.0.jar", + "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", + "hash": "5210e6aae7dd8a61cd16c56937c5f2ed43941487830f46e99d0d3f45bfa6f953", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "84057480ba7da6fb6d9ea50c53a00848315833c1f34bf8f4a47f11a14499ae3f", + "version": "2.16.0", + "cve": "CVE-2021-45105", + "severity": "7.5" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a768e5383990b512f9d4f97217eda94031c2fa4aea122585f5a475ab99dc7307", "version": "2.2.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.3.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "ae950f9435c0ef3373d4030e7eff175ee11044e584b7f205b7a9804bbe795f9c", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a768e5383990b512f9d4f97217eda94031c2fa4aea122585f5a475ab99dc7307", "version": "2.3.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.4.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a534961bbfce93966496f86c9314f46939fd082bb89986b48b7430c3bea903f7", "version": "2.4.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.4.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a534961bbfce93966496f86c9314f46939fd082bb89986b48b7430c3bea903f7", "version": "2.4.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.5.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "3bff6b3011112c0b5139a5c3aa5e698ab1531a2f130e86f9e4262dd6018916d7", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "a534961bbfce93966496f86c9314f46939fd082bb89986b48b7430c3bea903f7", "version": "2.5.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.6.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "e8ffed196e04f81b015f847d4ec61f22f6731c11b5a21b1cfc45ccbc58b8ea45", "version": "2.6.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.6.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "e8ffed196e04f81b015f847d4ec61f22f6731c11b5a21b1cfc45ccbc58b8ea45", "version": "2.6.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.6.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "6540d5695ddac8b0a343c2e91d58316cfdbfdc5b99c6f3f91bc381bc6f748246", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "e8ffed196e04f81b015f847d4ec61f22f6731c11b5a21b1cfc45ccbc58b8ea45", "version": "2.6.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.7.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "cee2305065bb61d434cdb45cfdaa46e7da148e5c6a7678d56f3e3dc8d7073eae", "version": "2.7.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.8.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "66c89e2d5ae674641138858b571e65824df6873abb1677f7b2ef5c0dd4dbc442", "version": "2.8.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.8.2.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "764b06686dbe06e3d5f6d15891250ab04073a0d1c357d114b7365c70fa8a7407", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "d4ec57440cd6db6eaf6bcb6b197f1cbaf5a3e26253d59578d51db307357cbf15", "version": "2.8.2", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.8.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "1584b839cfceb33a372bb9e6f704dcea9701fa810a9ba1ad3961615a5b998c32", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "66c89e2d5ae674641138858b571e65824df6873abb1677f7b2ef5c0dd4dbc442", "version": "2.8.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.9.0.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.9.0", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" }, { "path": "test/vulnerable-log4j2-versions/target/dependency/log4j-core-2.9.1.jar", "file_name": "org/apache/logging/log4j/core/net/JndiManager.class", "hash": "293d7e83d4197f0496855f40a7745cfcdd10026dc057dfc1816de57295be88a6", + "jndi_lookup_file_name": "org/apache/logging/log4j/core/lookup/JndiLookup.class", + "jndi_lookup_hash": "0f038a1e0aa0aff76d66d1440c88a2b35a3d023ad8b2e3bac8e25a3208499f7e", "version": "2.9.1", - "cve": "CVE-2021-44228" + "cve": "CVE-2021-44228", + "severity": "10.0" } ] } \ No newline at end of file diff --git a/tools/log4shell/main.go b/tools/log4shell/main.go index f26031856..a626ac734 100644 --- a/tools/log4shell/main.go +++ b/tools/log4shell/main.go @@ -23,6 +23,26 @@ import ( "os" ) +func enableGlobalFlags(c *cli.Context) { + verbose := c.Bool("verbose") + debug := c.Bool("debug") + + if verbose || debug { + zerolog.SetGlobalLevel(zerolog.DebugLevel) + } + + if debug { + // include file and line number when logging + log.Logger = log.With().Caller().Logger() + } + + jsonFlag := c.Bool("json") + if !jsonFlag { + // pretty print output to the console if we are not interested in parsable output + log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) + } +} + func main() { zerolog.TimeFieldFormat = zerolog.TimeFormatUnix @@ -72,9 +92,10 @@ func main() { }, Commands: []*cli.Command{ { - Name: "analyze", - Usage: "Scan known vulnerable Log4j dependencies and create a mapping of JndiLookup.class hash to version.", - Before: setGlobalBoolFlags, + Name: "analyze", + Aliases: []string{"a"}, + Usage: "Note: This command is not used for scanning for vulnerable libraries, use the `scan` command. Analyze known vulnerable Log4j dependencies and create a mapping of JndiLookup.class hash to version.", + Before: setGlobalBoolFlags, Flags: []cli.Flag{ &cli.StringFlag{ Name: "output", @@ -139,7 +160,7 @@ func main() { }, { Name: "livepatch", - Aliases: []string{"s"}, + Aliases: []string{"l"}, Usage: "Perform a live patch of a system by exploiting the log4shell vulnerability for immediate mitigation. The payload executed patches the running process to prevent further payloads from being able to be executed.", Before: setGlobalBoolFlags, Flags: []cli.Flag{ @@ -160,6 +181,45 @@ func main() { return commands.LivePatchCommand(c, globalBoolFlags, hotpatchFiles) }, }, + { + Name: "patch", + Aliases: []string{"p"}, + Usage: "Patches findings of libraries vulnerable toLog4Shell by removing the JndiLookup.class file from each.", + Before: setGlobalBoolFlags, + Flags: []cli.Flag{ + &cli.StringSliceFlag{ + Name: "exclude", + Usage: "Exclude subdirectories from scanning. This can be helpful if there are directories which your user does not have access to when starting a scan from `/`.", + }, + &cli.BoolFlag{ + Name: "no-follow-symlinks", + Usage: "Disable the resolution of symlinks while scanning. Note: symlinks might resolve to files outside of the included directories and so this option might be useful if you strictly want to search in said directories.", + }, + &cli.BoolFlag{ + Name: "force-patch", + Usage: "Force patch all libraries reported in findings or scanned at runtime. Do not prompt each time a library is about to be patched.", + }, + &cli.BoolFlag{ + Name: "dry-run", + Usage: "Perform a dry run of the patching process by only logging out actions which would be performed.", + }, + &cli.StringFlag{ + Name: "findings", + Usage: "Patches all vulnerable Java archives which have been identified.", + }, + &cli.BoolFlag{ + Name: "json", + Usage: "Display findings in json format.", + }, + &cli.BoolFlag{ + Name: "debug", + Usage: "Display helpful information while debugging the CLI.", + }, + }, + Action: func(c *cli.Context) error { + return commands.JavaArchivePatchCommand(c, globalBoolFlags, log4jLibraryHashes) + }, + }, }, } err := app.Run(os.Args) diff --git a/tools/log4shell/patch/archivepatch.go b/tools/log4shell/patch/archivepatch.go new file mode 100644 index 000000000..3e85df338 --- /dev/null +++ b/tools/log4shell/patch/archivepatch.go @@ -0,0 +1,15 @@ +// Copyright 2021 by LunaSec (owned by Refinery Labs, Inc) +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +package patch diff --git a/tools/log4shell/scan/loadversions.go b/tools/log4shell/scan/loadversions.go index 296c5be47..67f16bc35 100644 --- a/tools/log4shell/scan/loadversions.go +++ b/tools/log4shell/scan/loadversions.go @@ -80,16 +80,26 @@ func LoadVersionHashesFromBytes(versionHashesContent []byte) (hashLookup types.V newVersion += ", " + vulnerableLibrary.Version } + existingLookup.VulnerableFileHashLookup[vulnerableLibrary.JndiLookupHash] = types.VulnerableFile{ + FileName: vulnerableLibrary.JndiLookupFileName, + } + hashLookup[vulnerableLibrary.Hash] = types.VulnerableHash{ Name: vulnerableLibrary.Path + "::" + vulnerableLibrary.FileName, Version: newVersion, CVE: vulnerableLibrary.CVE, + VulnerableFileHashLookup: existingLookup.VulnerableFileHashLookup, } } else { hashLookup[vulnerableLibrary.Hash] = types.VulnerableHash{ Name: vulnerableLibrary.Path + "::" + vulnerableLibrary.FileName, Version: vulnerableLibrary.Version, CVE: vulnerableLibrary.CVE, + VulnerableFileHashLookup: map[string]types.VulnerableFile{ + vulnerableLibrary.Hash: { + vulnerableLibrary.JndiLookupFileName, + }, + }, } } } diff --git a/tools/log4shell/scan/scan.go b/tools/log4shell/scan/scan.go index 1e3d6399e..c738956ad 100644 --- a/tools/log4shell/scan/scan.go +++ b/tools/log4shell/scan/scan.go @@ -126,7 +126,7 @@ func (s *Log4jDirectoryScanner) scanLocatedArchive( defer file.Close() if s.onlyScanArchives { - finding := identifyPotentiallyVulnerableFile(file, path, file.Name(), constants.KnownVulnerableArchiveFileHashes) + finding := identifyPotentiallyVulnerableFile(nil, file, path, file.Name(), constants.KnownVulnerableArchiveFileHashes) if finding != nil { return []types.Finding{*finding} } @@ -154,13 +154,14 @@ func (s *Log4jDirectoryScanner) scanArchiveForVulnerableFiles( // Str("path", path). // Str("file", zipFile.Name). // Msg("scanning nested archive") - locatedFindings := s.scanFile(path, zipFile) + locatedFindings := s.scanFile(zipReader, path, zipFile) findings = append(findings, locatedFindings...) } return } func (s *Log4jDirectoryScanner) scanFile( + zipReader *zip.Reader, path string, file *zip.File, ) (findings []types.Finding) { @@ -171,14 +172,14 @@ func (s *Log4jDirectoryScanner) scanFile( return } - finding := s.scanArchiveFile(path, file) + finding := s.scanArchiveFile(zipReader, path, file) if finding != nil { findings = []types.Finding{*finding} } return case constants.JarFileExt, constants.WarFileExt, constants.ZipFileExt, constants.EarFileExt: if s.onlyScanArchives { - finding := s.scanArchiveFile(path, file) + finding := s.scanArchiveFile(zipReader, path, file) if finding != nil { findings = []types.Finding{*finding} } @@ -191,6 +192,7 @@ func (s *Log4jDirectoryScanner) scanFile( func (s *Log4jDirectoryScanner) scanArchiveFile( + zipReader *zip.Reader, path string, file *zip.File, ) (finding *types.Finding) { @@ -203,7 +205,9 @@ func (s *Log4jDirectoryScanner) scanArchiveFile( Msg("unable to open class file") return } - return s.processArchiveFile(reader, path, file.Name) + defer reader.Close() + + return s.processArchiveFile(zipReader, reader, path, file.Name) } func (s *Log4jDirectoryScanner) scanEmbeddedArchive( diff --git a/tools/log4shell/scan/scanfile.go b/tools/log4shell/scan/scanfile.go index 0843736f9..a66723188 100644 --- a/tools/log4shell/scan/scanfile.go +++ b/tools/log4shell/scan/scanfile.go @@ -15,23 +15,46 @@ package scan import ( + "archive/zip" + "github.com/blang/semver/v4" + "github.com/lunasec-io/lunasec/tools/log4shell/analyze" "github.com/lunasec-io/lunasec/tools/log4shell/constants" "github.com/lunasec-io/lunasec/tools/log4shell/types" "github.com/lunasec-io/lunasec/tools/log4shell/util" "github.com/rs/zerolog/log" "io" + "path/filepath" "strings" ) func IdentifyPotentiallyVulnerableFiles(scanLog4j1 bool, archiveHashLookup types.VulnerableHashLookup) types.ProcessArchiveFile { hashLookup := FilterVulnerableHashLookup(archiveHashLookup, scanLog4j1) - return func(reader io.Reader, path, fileName string) (finding *types.Finding) { - return identifyPotentiallyVulnerableFile(reader, path, fileName, hashLookup) + return func(zipReader *zip.Reader, reader io.Reader, path, fileName string) (finding *types.Finding) { + return identifyPotentiallyVulnerableFile(zipReader, reader, path, fileName, hashLookup) } } -func identifyPotentiallyVulnerableFile(reader io.Reader, path, fileName string, hashLookup types.VulnerableHashLookup) (finding *types.Finding) { +func isVulnerableIfContainsJndiLookup(versions []string) bool { + for _, version := range versions { + semverVersion, err := semver.Parse(version) + if err != nil { + continue + } + + if constants.JndiLookupPatchFileVersions(semverVersion) { + return true + } + } + return false +} + +func identifyPotentiallyVulnerableFile( + zipReader *zip.Reader, + reader io.Reader, + path, fileName string, + hashLookup types.VulnerableHashLookup, +) (finding *types.Finding) { fileHash, err := util.HexEncodedSha256FromReader(reader) if err != nil { log.Warn(). @@ -42,7 +65,7 @@ func identifyPotentiallyVulnerableFile(reader io.Reader, path, fileName string, return } - if strings.Contains(fileName, "JndiLookup.class") { + if strings.HasSuffix(fileName, "JndiLookup.class") { log.Debug(). Str("fileName", fileName). Str("fileHash", fileHash). @@ -57,19 +80,55 @@ func identifyPotentiallyVulnerableFile(reader io.Reader, path, fileName string, Msg("No severity provided for CVE") } + versions := strings.Split(vulnerableFile.Version, ", ") + patchableVersion := isVulnerableIfContainsJndiLookup(versions) + + jndiLookupFileHash := analyze.GetJndiLookupHash(zipReader, path) + if jndiLookupFileHash != "" { + if _, ok := vulnerableFile.VulnerableFileHashLookup[jndiLookupFileHash]; !ok { + log.Warn(). + Str("path", path). + Str("jndiLookupFileName", constants.JndiLookupClasspath). + Str("jndiLookupHash", jndiLookupFileHash). + Msg("Discovered JndiLookup.class file is not a known vulnerable file. Patching this file out might have some unintended side effects.") + } + } else { + if patchableVersion { + log.Warn(). + Str("path", path). + Str("jndiLookupFileName", constants.JndiLookupClasspath). + Str("jndiLookupHash", jndiLookupFileHash). + Msg("Library has been patched of the Log4Shell vulnerability.") + return + } + } + log.Log(). Str("severity", severity). Str("path", path). - Str("fileName", fileName). - Str("hash", fileHash). + Str("versionIndicatorFileName", fileName). + Str("versionIndicatorHash", fileHash). + Str("jndiLookupFileName", constants.JndiLookupClasspath). + Str("jndiLookupHash", jndiLookupFileHash). Str("versionInfo", vulnerableFile.Version). Str("cve", vulnerableFile.CVE). Msg("Identified vulnerable path") + absolutePath, err := filepath.Abs(path) + if err != nil { + log.Warn(). + Str("fileName", fileName). + Str("path", path). + Err(err). + Msg("Unable to resolve absolute path to file") + } + finding = &types.Finding{ - Path: path, + Path: absolutePath, FileName: fileName, Hash: fileHash, + JndiLookupFileName: constants.JndiLookupClasspath, + JndiLookupHash: jndiLookupFileHash, Version: vulnerableFile.Version, CVE: vulnerableFile.CVE, Severity: severity, diff --git a/tools/log4shell/test/vulnerable-apps/patched.jar.REMOVED.git-id b/tools/log4shell/test/vulnerable-apps/patched.jar.REMOVED.git-id new file mode 100644 index 000000000..313638f6a --- /dev/null +++ b/tools/log4shell/test/vulnerable-apps/patched.jar.REMOVED.git-id @@ -0,0 +1 @@ +172a1004a051c61f3a8abe3ea3ee002e290f15a2 \ No newline at end of file diff --git a/tools/log4shell/test/vulnerable-apps/vulnerable.jar.REMOVED.git-id b/tools/log4shell/test/vulnerable-apps/vulnerable.jar.REMOVED.git-id new file mode 100644 index 000000000..a346a2f42 --- /dev/null +++ b/tools/log4shell/test/vulnerable-apps/vulnerable.jar.REMOVED.git-id @@ -0,0 +1 @@ +0578ffb72bc2ade6a743bc18d4d2e03123a1ea64 \ No newline at end of file diff --git a/tools/log4shell/test/vulnerable-log4j2-versions/.gitignore b/tools/log4shell/test/vulnerable-log4j2-versions/.gitignore index 782fd9af3..d52b170dd 100644 --- a/tools/log4shell/test/vulnerable-log4j2-versions/.gitignore +++ b/tools/log4shell/test/vulnerable-log4j2-versions/.gitignore @@ -1,3 +1,4 @@ target/ pom.xml apache/ +apache-patch/ diff --git a/tools/log4shell/test/vulnerable-log4j2-versions/main.go b/tools/log4shell/test/vulnerable-log4j2-versions/main.go index 895b83fa6..e42bac9f9 100644 --- a/tools/log4shell/test/vulnerable-log4j2-versions/main.go +++ b/tools/log4shell/test/vulnerable-log4j2-versions/main.go @@ -30,7 +30,7 @@ import ( ) var ( - versions = []string{"2.16.0","2.15.0","2.14.1","2.14.0","2.13.3","2.13.2","2.13.1","2.13.0","2.12.2","2.12.1","2.12.0","2.11.2","2.11.1","2.11.0","2.10.0","2.9.1","2.9.0","2.8.2","2.8.1","2.8","2.7","2.6.2","2.6.1","2.6","2.5","2.4.1","2.4","2.3","2.2","2.1","2.0.2","2.0.1","2.0","2.0-rc2","2.0-rc1"} + versions = []string{"2.17.0","2.16.0","2.15.0","2.14.1","2.14.0","2.13.3","2.13.2","2.13.1","2.13.0","2.12.2", "2.12.1","2.12.0","2.11.2","2.11.1","2.11.0","2.10.0","2.9.1","2.9.0","2.8.2","2.8.1","2.8","2.7","2.6.2","2.6.1","2.6","2.5","2.4.1","2.4","2.3","2.2","2.1","2.0.2","2.0.1","2.0","2.0-rc2","2.0-rc1"} ) type ArtifactId struct { diff --git a/tools/log4shell/types/findings.go b/tools/log4shell/types/findings.go index 82e9ccbe3..1df78a321 100644 --- a/tools/log4shell/types/findings.go +++ b/tools/log4shell/types/findings.go @@ -14,14 +14,19 @@ // package types -import "io" +import ( + "archive/zip" + "io" +) -type ProcessArchiveFile func(reader io.Reader, path, fileName string) (finding *Finding) +type ProcessArchiveFile func(zipReader *zip.Reader, reader io.Reader, path, fileName string) (finding *Finding) type Finding struct { Path string `json:"path"` FileName string `json:"file_name"` Hash string `json:"hash"` + JndiLookupFileName string `json:"jndi_lookup_file_name"` + JndiLookupHash string `json:"jndi_lookup_hash"` Version string `json:"version"` CVE string `json:"cve"` Severity string `json:"severity"` diff --git a/tools/log4shell/types/vulnerablehashes.go b/tools/log4shell/types/vulnerablehashes.go index 3f17d9a64..e4f00b3b6 100644 --- a/tools/log4shell/types/vulnerablehashes.go +++ b/tools/log4shell/types/vulnerablehashes.go @@ -16,10 +16,15 @@ package types import "github.com/blang/semver/v4" +type VulnerableFile struct { + FileName string `json:"file_name"` +} + type VulnerableHash struct { Name string `json:"name"` Version string `json:"version"` CVE string `json:"cve"` + VulnerableFileHashLookup map[string]VulnerableFile } type VulnerableHashLookup map[string]VulnerableHash diff --git a/tools/log4shell/util/fs.go b/tools/log4shell/util/fs.go index 1bb2d9fe7..050c6a3f4 100644 --- a/tools/log4shell/util/fs.go +++ b/tools/log4shell/util/fs.go @@ -15,7 +15,11 @@ package util import ( + "archive/zip" + "bytes" "github.com/rs/zerolog/log" + "io" + "io/ioutil" "os" "path/filepath" "strings" @@ -74,3 +78,36 @@ func ResolveSymlinkFilePathAndInfo(symlinkPath string) (path string, info os.Fil } return } + +// NewZipFromReader ... +func NewZipFromReader(file io.ReadCloser, size int64) (*zip.Reader, error) { + in := file.(io.Reader) + + if _, ok := in.(io.ReaderAt); ok != true { + buffer, err := ioutil.ReadAll(in) + + if err != nil { + return nil, err + } + + in = bytes.NewReader(buffer) + size = int64(len(buffer)) + } + + reader, err := zip.NewReader(in.(io.ReaderAt), size) + if err != nil { + return nil, err + } + + return reader, nil +} + +func CopyFile(in, out string) (int64, error) { + i, e := os.Open(in) + if e != nil { return 0, e } + defer i.Close() + o, e := os.Create(out) + if e != nil { return 0, e } + defer o.Close() + return io.Copy(o, i) +} \ No newline at end of file