diff --git a/internal/services/custom_rules/custom_rule_test.go b/internal/services/custom_rules/custom_rule_test.go
index aee75e270..e5b526a0a 100644
--- a/internal/services/custom_rules/custom_rule_test.go
+++ b/internal/services/custom_rules/custom_rule_test.go
@@ -18,12 +18,11 @@ import (
"regexp"
"testing"
- "github.com/stretchr/testify/require"
-
"github.com/ZupIT/horusec-devkit/pkg/enums/confidence"
"github.com/ZupIT/horusec-devkit/pkg/enums/languages"
"github.com/ZupIT/horusec-devkit/pkg/enums/severities"
"github.com/ZupIT/horusec-engine/text"
+ "github.com/stretchr/testify/require"
)
func TestValidate(t *testing.T) {
@@ -325,7 +324,6 @@ func TestGetRuleType(t *testing.T) {
}
func TestGetExpressions(t *testing.T) {
-
exprs := []string{"testOne", "testTwo"}
exprOne, _ := regexp.Compile(exprs[0])
exprTwo, _ := regexp.Compile(exprs[1])
diff --git a/internal/services/engines/java/rule_manager.go b/internal/services/engines/java/rule_manager.go
index 6c95fcd4d..42293e233 100644
--- a/internal/services/engines/java/rule_manager.go
+++ b/internal/services/engines/java/rule_manager.go
@@ -143,6 +143,7 @@ func Rules() []engine.Rule {
// NewMessageDigest(),
NewOverlyPermissiveFilePermission(),
NewCipherGetInstanceInsecure(),
+ NewVulnerableRemoteCodeExecutionSpringFramework(),
// Regular rules
NewHiddenElements(),
diff --git a/internal/services/engines/java/rules.go b/internal/services/engines/java/rules.go
index 4814df5b2..e6659d027 100644
--- a/internal/services/engines/java/rules.go
+++ b/internal/services/engines/java/rules.go
@@ -2634,3 +2634,21 @@ func NewUncheckedClassInstatiation() *text.Rule {
},
}
}
+
+func NewVulnerableRemoteCodeExecutionSpringFramework() *text.Rule {
+ return &text.Rule{
+ Metadata: engine.Metadata{
+ ID: "HS-JAVA-152",
+ Name: "Spring Framework Remote Code Execution",
+ Description: "It has been identified that versions prior to < 5.3.18 or < 5.2.20 of the spring framework are vulnerable to remote code execution. Please upgrade to version >= 5.3.18 or >= 5.2.20. For more information checkout the CVE-2022-22965 (https://tanzu.vmware.com/security/cve-2022-22965) advisory.",
+ Severity: severities.Critical.ToString(),
+ Confidence: confidence.Medium.ToString(),
+ },
+ Type: text.OrMatch,
+ Expressions: []*regexp.Regexp{
+ regexp.MustCompile(``),
+ regexp.MustCompile(`compile.*"org\.springframework:spring-context.*((5\.[0-3]\.(1[0-7]|[0-9]\.|[0-9]"))|([0-4]\.[0-9]+\.[0-9]+).*"\))`),
+ regexp.MustCompile(`\s*org\.springframework\s*\s*.*\s*spring-context.*\s*\s*(\s*((5\.[0-3]\.(1[0-7]|[0-9]\.|[0-9]"))|([0-4]\.[0-9]+\.[0-9]+)).*)\s*`),
+ },
+ }
+}
diff --git a/internal/services/engines/java/rules_test.go b/internal/services/engines/java/rules_test.go
index afcc2f465..e8d5ad83e 100644
--- a/internal/services/engines/java/rules_test.go
+++ b/internal/services/engines/java/rules_test.go
@@ -723,6 +723,54 @@ func TestRulesVulnerableCode(t *testing.T) {
},
},
},
+ {
+ Name: "HS-JAVA-152",
+ Rule: NewVulnerableRemoteCodeExecutionSpringFramework(),
+ Src: Sample1IvyVulnerableHSJAVA152,
+ Filename: filepath.Join(tempDir, fmt.Sprintf("%s%s", "HS-JAVA-152.1", ".test")),
+ Findings: []engine.Finding{
+ {
+ CodeSample: "org.springframework",
+ SourceLocation: engine.Location{
+ Filename: filepath.Join(tempDir, fmt.Sprintf("%s%s", "HS-JAVA-152.3", ".test")),
+ Line: 4,
+ Column: 8,
+ },
+ },
+ },
+ },
}
testutil.TestVulnerableCode(t, testcases)
@@ -1007,6 +1055,24 @@ func TestRulesSafeCode(t *testing.T) {
Src: Sample5MavenSafeHSJAVA151,
Filename: filepath.Join(tempDir, fmt.Sprintf("%s%s", "HS-JAVA-151", ".test")),
},
+ {
+ Name: "HS-JAVA-152",
+ Rule: NewVulnerableRemoteCodeExecutionSpringFramework(),
+ Src: Sample1IvySafeHSJAVA152,
+ Filename: filepath.Join(tempDir, fmt.Sprintf("%s%s", "HS-JAVA-152", ".test")),
+ },
+ {
+ Name: "HS-JAVA-152",
+ Rule: NewVulnerableRemoteCodeExecutionSpringFramework(),
+ Src: Sample2GradleSafeHSJAVA152,
+ Filename: filepath.Join(tempDir, fmt.Sprintf("%s%s", "HS-JAVA-152", ".test")),
+ },
+ {
+ Name: "HS-JAVA-152",
+ Rule: NewVulnerableRemoteCodeExecutionSpringFramework(),
+ Src: Sample3MavenSafeHSJAVA152,
+ Filename: filepath.Join(tempDir, fmt.Sprintf("%s%s", "HS-JAVA-152", ".test")),
+ },
}
testutil.TestSafeCode(t, testcases)
}
diff --git a/internal/services/engines/java/sample_test.go b/internal/services/engines/java/sample_test.go
index 2b6005ab3..f373b5655 100644
--- a/internal/services/engines/java/sample_test.go
+++ b/internal/services/engines/java/sample_test.go
@@ -1444,5 +1444,51 @@ test {
+`
+
+ Sample1IvyVulnerableHSJAVA152 = `
+
+`
+
+ Sample1IvySafeHSJAVA152 = `
+
+`
+
+ Sample2GradleVulnerableHSJAVA152 = `
+dependencies {
+ compile("org.springframework:spring-context:5.3.17.RELEASE")
+ testCompile("org.springframework:spring-test:5.3.17.RELEASE")
+}
+`
+
+ Sample2GradleSafeHSJAVA152 = `
+dependencies {
+ compile("org.springframework:spring-context:5.3.18.RELEASE")
+ testCompile("org.springframework:spring-test:5.3.18.RELEASE")
+}
+`
+
+ Sample3MavenVulnerableHSJAVA152 = `
+
+
+ org.springframework
+ spring-context
+ 5.3.17.RELEASE
+ runtime
+
+
+`
+
+ Sample3MavenSafeHSJAVA152 = `
+
+
+ org.springframework
+ spring-context
+ 5.3.18.RELEASE
+ runtime
+
+
`
)