Skip to content

Commit cd4f6f5

Browse files
David HallDavid Hall
authored andcommitted
pscanrules: Set AlertRef property on MissingCSP alerts
Signed-off-by: David Hall <[email protected]>
1 parent 0530c81 commit cd4f6f5

File tree

3 files changed

+24
-24
lines changed

3 files changed

+24
-24
lines changed

addOns/pscanrules/CHANGELOG.md

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
1313
- Maintenance changes.
1414
- The HeartBleed scan rule alert now includes a CVE tag.
1515

16+
### Fixed
17+
- The CSP Missing scan rule now alerts when the Content-Security-Policy header is missing, and when the obsolete X-Content-Security-Policy or X-WebKit-CSP are found (Issue 7653).
18+
1619
## [45] - 2023-01-03
1720
### Changed
1821
- The Private Address Disclosure and Session ID in URL Rewrite scan rules now include example alert functionality for documentation generation purposes (Issue 6119 and 7100).
@@ -23,7 +26,6 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
2326

2427
### Fixed
2528
- The Modern App Detection scan rule now ignores non-HTML files (Issue 7617).
26-
- The CSP Missing scan rule now alerts when the Content-Security-Policy header is missing, and when the obsolete X-Content-Security-Policy or X-WebKit-CSP are found (Issue 7653).
2729

2830
## [44] - 2022-10-27
2931
### Added

addOns/pscanrules/src/main/java/org/zaproxy/zap/extension/pscanrules/ContentSecurityPolicyMissingScanRule.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -122,35 +122,31 @@ private static boolean hasCspReportOnlyHeader(HttpMessage msg) {
122122
.isEmpty();
123123
}
124124

125-
private AlertBuilder buildAlert(int risk) {
125+
private AlertBuilder buildAlert(int risk, int alertnum) {
126126
return newAlert()
127127
.setRisk(risk)
128128
.setConfidence(Alert.CONFIDENCE_HIGH)
129129
.setCweId(693) // CWE-693: Protection Mechanism Failure
130-
.setWascId(15); // WASC-15: Application Misconfiguration
130+
.setWascId(15) // WASC-15: Application Misconfiguration
131+
.setSolution(getAlertAttribute("soln"))
132+
.setReference(getAlertAttribute("refs"))
133+
.setAlertRef(PLUGIN_ID + "-" + alertnum);
131134
}
132135

133136
private AlertBuilder alertMissingCspHeader() {
134-
return buildAlert(Alert.RISK_MEDIUM)
135-
.setName(getAlertAttribute("name"))
136-
.setDescription(getAlertAttribute("desc"))
137-
.setSolution(getAlertAttribute("soln"))
138-
.setReference(getAlertAttribute("refs"));
137+
return buildAlert(Alert.RISK_MEDIUM, 1).setDescription(getAlertAttribute("desc"));
139138
}
140139

141140
private AlertBuilder alertObsoleteCspHeader() {
142-
return buildAlert(Alert.RISK_INFO)
141+
return buildAlert(Alert.RISK_INFO, 2)
143142
.setName(getAlertAttribute("obs.name"))
144-
.setDescription(getAlertAttribute("obs.desc"))
145-
.setSolution(getAlertAttribute("soln"))
146-
.setReference(getAlertAttribute("refs"));
143+
.setDescription(getAlertAttribute("obs.desc"));
147144
}
148145

149146
private AlertBuilder alertCspReportOnlyHeader() {
150-
return buildAlert(Alert.RISK_INFO)
147+
return buildAlert(Alert.RISK_INFO, 3)
151148
.setName(getAlertAttribute("ro.name"))
152149
.setDescription(getAlertAttribute("ro.desc"))
153-
.setSolution(getAlertAttribute("soln"))
154150
.setReference(getAlertAttribute("ro.refs"));
155151
}
156152
}

addOns/pscanrules/src/test/java/org/zaproxy/zap/extension/pscanrules/ContentSecurityPolicyMissingScanRuleUnitTest.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ void givenWebKitThenTwoAlertsRaised() throws Exception {
131131

132132
// Then
133133
assertThat(alertsRaised.size(), is(2));
134-
assertCSPAlertAttributes(alertsRaised.get(0), "", Alert.RISK_MEDIUM);
135-
assertCSPAlertAttributes(alertsRaised.get(1), "obs.", Alert.RISK_INFO);
134+
assertCSPAlertAttributes(alertsRaised.get(0), "", Alert.RISK_MEDIUM, "10038-1");
135+
assertCSPAlertAttributes(alertsRaised.get(1), "obs.", Alert.RISK_INFO, "10038-2");
136136
}
137137

138138
@Test
@@ -145,8 +145,8 @@ void givenXCspThenTwoAlertsRaised() throws Exception {
145145

146146
// Then
147147
assertThat(alertsRaised.size(), is(2));
148-
assertCSPAlertAttributes(alertsRaised.get(0), "", Alert.RISK_MEDIUM);
149-
assertCSPAlertAttributes(alertsRaised.get(1), "obs.", Alert.RISK_INFO);
148+
assertCSPAlertAttributes(alertsRaised.get(0), "", Alert.RISK_MEDIUM, "10038-1");
149+
assertCSPAlertAttributes(alertsRaised.get(1), "obs.", Alert.RISK_INFO, "10038-2");
150150
}
151151

152152
@Test
@@ -256,8 +256,8 @@ void givenReportOnlyCspThenInfoAlertRaised() throws Exception {
256256

257257
// Then
258258
assertThat(alertsRaised.size(), is(2));
259-
assertCSPAlertAttributes(alertsRaised.get(0), "", Alert.RISK_MEDIUM);
260-
assertCSPAlertAttributes(alertsRaised.get(1), "ro.", Alert.RISK_INFO);
259+
assertCSPAlertAttributes(alertsRaised.get(0), "", Alert.RISK_MEDIUM, "10038-1");
260+
assertCSPAlertAttributes(alertsRaised.get(1), "ro.", Alert.RISK_INFO, "10038-3");
261261
assertThat(alertsRaised.get(1).getReference(), is(getLocalisedString("ro.refs")));
262262
}
263263

@@ -272,7 +272,7 @@ void givenReportOnlyAndCspHeadersThenInfoAlertRaised() throws Exception {
272272

273273
// Then
274274
assertThat(alertsRaised.size(), is(1));
275-
assertCSPAlertAttributes(alertsRaised.get(0), "ro.", Alert.RISK_INFO);
275+
assertCSPAlertAttributes(alertsRaised.get(0), "ro.", Alert.RISK_INFO, "10038-3");
276276
assertThat(alertsRaised.get(0).getReference(), is(getLocalisedString("ro.refs")));
277277
}
278278

@@ -316,15 +316,16 @@ void shouldReturnExampleAlerts() {
316316

317317
private void assertContentSecurityPolicyAlertRaised() {
318318
assertThat(alertsRaised.size(), is(1));
319-
assertCSPAlertAttributes(alertsRaised.get(0), "", Alert.RISK_MEDIUM);
319+
assertCSPAlertAttributes(alertsRaised.get(0), "", Alert.RISK_MEDIUM, "10038-1");
320320
}
321321

322322
private void assertObsoleteSecurityPolicyAlertRaised() {
323323
assertThat(alertsRaised.size(), is(1));
324-
assertCSPAlertAttributes(alertsRaised.get(0), "obs.", Alert.RISK_INFO);
324+
assertCSPAlertAttributes(alertsRaised.get(0), "obs.", Alert.RISK_INFO, "10038-2");
325325
}
326326

327-
private static void assertCSPAlertAttributes(Alert alert, String key, int expectedRisk) {
327+
private static void assertCSPAlertAttributes(
328+
Alert alert, String key, int expectedRisk, String alertRef) {
328329
assertThat(alert.getRisk(), is(expectedRisk));
329330
assertThat(alert.getName(), is(getLocalisedString(key + "name")));
330331
assertThat(alert.getDescription(), is(getLocalisedString(key + "desc")));
@@ -333,6 +334,7 @@ private static void assertCSPAlertAttributes(Alert alert, String key, int expect
333334
assertThat(alert.getCweId(), is(693));
334335
assertThat(alert.getWascId(), is(15));
335336
assertThat(alert.getUri(), is(URI));
337+
assertThat(alert.getAlertRef(), is(alertRef));
336338
}
337339

338340
private static String getLocalisedString(String key) {

0 commit comments

Comments
 (0)