aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJacek <jacek.poreda@sonarsource.com>2021-02-08 12:47:41 +0100
committersonartech <sonartech@sonarsource.com>2021-02-17 20:07:15 +0000
commitaee919a2c4faecf025e8daa506eb4d4adddcd195 (patch)
treed9f9c72dade47ee0e8a64ac63855fe6df82941d2
parent122edd4683e3019c8035c40c53c8813e855372f0 (diff)
downloadsonarqube-aee919a2c4faecf025e8daa506eb4d4adddcd195.tar.gz
sonarqube-aee919a2c4faecf025e8daa506eb4d4adddcd195.zip
SONAR-14442 add cweTop25 value param to 'api/security_report'
- map ES results to WS results
-rw-r--r--server/sonar-server-common/src/main/java/org/sonar/server/security/SecurityStandards.java28
-rw-r--r--server/sonar-server-common/src/test/java/org/sonar/server/security/SecurityStandardsTest.java8
-rw-r--r--server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java11
-rw-r--r--sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java1
4 files changed, 48 insertions, 0 deletions
diff --git a/server/sonar-server-common/src/main/java/org/sonar/server/security/SecurityStandards.java b/server/sonar-server-common/src/main/java/org/sonar/server/security/SecurityStandards.java
index ab12ec4783c..b0709224372 100644
--- a/server/sonar-server-common/src/main/java/org/sonar/server/security/SecurityStandards.java
+++ b/server/sonar-server-common/src/main/java/org/sonar/server/security/SecurityStandards.java
@@ -64,6 +64,22 @@ public final class SecurityStandards {
SANS_TOP_25_RISKY_RESOURCE, RISKY_CWE,
SANS_TOP_25_POROUS_DEFENSES, POROUS_CWE);
+ // https://cwe.mitre.org/top25/archive/2019/2019_cwe_top25.html
+ private static final Set<String> CWE_TOP25_2019 = new HashSet<>(
+ asList("119", "79", "20", "200", "125", "89", "416", "190", "352",
+ "22", "78", "787", "287", "476", "732", "434", "611", "94",
+ "798", "400", "772", "426", "502", "269", "295"));
+
+ // https://cwe.mitre.org/top25/archive/2020/2020_cwe_top25.html
+ private static final Set<String> CWE_TOP25_2020 = new HashSet<>(
+ asList("79", "787", "20", "125", "119", "89", "200", "416", "352",
+ "78", "190", "22", "476", "287", "434", "732", "94", "522",
+ "611", "798", "502", "269", "400", "306", "862"));
+
+ public static final Map<String, Set<String>> CWES_BY_CWE_TOP_25 = ImmutableMap.of(
+ "2019", CWE_TOP25_2019,
+ "2020", CWE_TOP25_2020);
+
public enum VulnerabilityProbability {
HIGH(3),
MEDIUM(2),
@@ -187,6 +203,10 @@ public final class SecurityStandards {
return toSansTop25(cwe);
}
+ public Set<String> getCweTop25() {
+ return toCweTop25(cwe);
+ }
+
public SQCategory getSqCategory() {
return sqCategory;
}
@@ -225,6 +245,14 @@ public final class SecurityStandards {
return result.isEmpty() ? singleton(UNKNOWN_STANDARD) : result;
}
+ private static Set<String> toCweTop25(Set<String> cwe) {
+ return CWES_BY_CWE_TOP_25
+ .keySet()
+ .stream()
+ .filter(k -> cwe.stream().anyMatch(CWES_BY_CWE_TOP_25.get(k)::contains))
+ .collect(toSet());
+ }
+
private static Set<String> toSansTop25(Collection<String> cwe) {
return CWES_BY_SANS_TOP_25
.keySet()
diff --git a/server/sonar-server-common/src/test/java/org/sonar/server/security/SecurityStandardsTest.java b/server/sonar-server-common/src/test/java/org/sonar/server/security/SecurityStandardsTest.java
index afd7ec08f06..7a9566412fb 100644
--- a/server/sonar-server-common/src/test/java/org/sonar/server/security/SecurityStandardsTest.java
+++ b/server/sonar-server-common/src/test/java/org/sonar/server/security/SecurityStandardsTest.java
@@ -68,6 +68,14 @@ public class SecurityStandardsTest {
}
@Test
+ public void fromSecurityStandards_from_empty_set_has_no_CweTop25_standard() {
+ SecurityStandards securityStandards = fromSecurityStandards(emptySet());
+
+ assertThat(securityStandards.getStandards()).isEmpty();
+ assertThat(securityStandards.getCweTop25()).isEmpty();
+ }
+
+ @Test
public void fromSecurityStandards_finds_SQCategory_from_any_if_the_mapped_CWE_standard() {
CWES_BY_SQ_CATEGORY.forEach((sqCategory, cwes) -> {
cwes.forEach(cwe -> {
diff --git a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java
index 6ffa2356051..db6acdf5945 100644
--- a/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java
+++ b/server/sonar-webserver-es/src/main/java/org/sonar/server/issue/index/IssueIndex.java
@@ -1016,6 +1016,17 @@ public class IssueIndex {
return processSecurityReportSearchResults(request, includeCwe);
}
+ public List<SecurityStandardCategoryStatistics> getCweTop25Reports(String uuid, boolean isViewOrApp) {
+ // TODO:: Mock data - SONAR-14447 elasticsearch query
+ return Arrays.asList(
+ new SecurityStandardCategoryStatistics("2019", 1, OptionalInt.empty(), 10, 5, 10,
+ SecurityStandards.CWES_BY_CWE_TOP_25.get("2019").stream().map(cwe -> new SecurityStandardCategoryStatistics(cwe, 1, OptionalInt.empty(), 1, 3, 2, null))
+ .collect(toList())),
+ new SecurityStandardCategoryStatistics("2020", 0, OptionalInt.empty(), 9, 5, 10,
+ SecurityStandards.CWES_BY_CWE_TOP_25.get("2020").stream().map(cwe -> new SecurityStandardCategoryStatistics(cwe, 1, OptionalInt.empty(), 1, 3, 4, null))
+ .collect(toList())));
+ }
+
public List<SecurityStandardCategoryStatistics> getSonarSourceReport(String projectUuid, boolean isViewOrApp, boolean includeCwe) {
SearchSourceBuilder request = prepareNonClosedVulnerabilitiesAndHotspotSearch(projectUuid, isViewOrApp);
Arrays.stream(SQCategory.values())
diff --git a/sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java b/sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java
index 9e5e4bfa76a..39da2370148 100644
--- a/sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java
+++ b/sonar-ws/src/main/java/org/sonarqube/ws/client/issue/IssuesWsParameters.java
@@ -85,6 +85,7 @@ public class IssuesWsParameters {
public static final String PARAM_TYPES = "types";
public static final String PARAM_OWASP_TOP_10 = "owaspTop10";
public static final String PARAM_SANS_TOP_25 = "sansTop25";
+ public static final String PARAM_CWE_TOP_25 = "cweTop25";
public static final String PARAM_SONARSOURCE_SECURITY = "sonarsourceSecurity";
public static final String PARAM_CWE = "cwe";
public static final String PARAM_ASSIGNED = "assigned";