Skip to content

Commit 70e75c7

Browse files
anaarochLucasBergholz
authored andcommitted
ascanrules: add example alerts to Spring Actuator
Signed-off-by: Ana Rocha <[email protected]> Co-authored-by: Lucas Bergholz <[email protected]>
1 parent 7518dbc commit 70e75c7

File tree

3 files changed

+38
-9
lines changed

3 files changed

+38
-9
lines changed

addOns/ascanrules/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
66
## Unreleased
77
### Changed
88
- Maintenance changes.
9+
- The Spring Actuator Scan Rule now includes example alert functionality for documentation generation purposes (Issue 6119).
910

1011
## [67] - 2024-07-22
1112

addOns/ascanrules/src/main/java/org/zaproxy/zap/extension/ascanrules/SpringActuatorScanRule.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
package org.zaproxy.zap.extension.ascanrules;
2121

2222
import java.io.IOException;
23+
import java.util.List;
2324
import java.util.Map;
2425
import java.util.regex.Pattern;
2526
import org.apache.commons.httpclient.URI;
@@ -140,7 +141,9 @@ public void scan() {
140141
CONTENT_TYPE.matcher(contentType).find()
141142
&& JSON_PAYLOAD.matcher(responseBody).find();
142143
if (matches) {
143-
raiseAlert(testMsg, Alert.CONFIDENCE_MEDIUM, getRisk());
144+
createAlert(testMsg.getResponseBody().toString())
145+
.setMessage(testMsg)
146+
.raise();
144147
break;
145148
}
146149
}
@@ -196,15 +199,17 @@ private HttpMessage sendActuatorRequest(String encodingType, String actuatorEndp
196199
return null;
197200
}
198201

199-
private void raiseAlert(HttpMessage msg, int confidence, int risk) {
200-
newAlert()
201-
.setRisk(risk)
202-
.setConfidence(confidence)
202+
private AlertBuilder createAlert(String evidence) {
203+
return newAlert()
204+
.setRisk(getRisk())
205+
.setConfidence(Alert.CONFIDENCE_MEDIUM)
203206
.setName(getAlertName())
204-
.setEvidence(msg.getResponseHeader().getPrimeHeader())
205207
.setReference(getReference())
206-
.setMessage(msg)
207-
.setEvidence(StringUtils.left(msg.getResponseBody().toString(), 100))
208-
.raise();
208+
.setEvidence(StringUtils.left(evidence, 100));
209+
}
210+
211+
@Override
212+
public List<Alert> getExampleAlerts() {
213+
return List.of(createAlert("{\"status\" : \"UP\"}").build());
209214
}
210215
}

addOns/ascanrules/src/test/java/org/zaproxy/zap/extension/ascanrules/SpringActuatorScanRuleUnitTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,14 @@
2222
import static fi.iki.elonen.NanoHTTPD.newFixedLengthResponse;
2323
import static org.hamcrest.MatcherAssert.assertThat;
2424
import static org.hamcrest.Matchers.equalTo;
25+
import static org.hamcrest.Matchers.hasKey;
2526
import static org.hamcrest.Matchers.hasSize;
2627
import static org.hamcrest.Matchers.is;
2728
import static org.junit.jupiter.api.Assertions.assertEquals;
2829

2930
import fi.iki.elonen.NanoHTTPD;
3031
import fi.iki.elonen.NanoHTTPD.Response;
32+
import java.util.List;
3133
import java.util.Map;
3234
import org.junit.jupiter.api.Test;
3335
import org.junit.jupiter.params.ParameterizedTest;
@@ -343,6 +345,10 @@ void shouldReturnExpectedMappings() {
343345
assertThat(cwe, is(equalTo(215)));
344346
assertThat(wasc, is(equalTo(13)));
345347
assertThat(tags.size(), is(equalTo(3)));
348+
assertBaseTags(tags);
349+
}
350+
351+
private static void assertBaseTags(Map<String, String> tags) {
346352
assertThat(
347353
tags.containsKey(CommonAlertTag.OWASP_2021_A01_BROKEN_AC.getTag()),
348354
is(equalTo(true)));
@@ -362,4 +368,21 @@ void shouldReturnExpectedMappings() {
362368
tags.get(CommonAlertTag.WSTG_V42_CONF_05_ENUMERATE_INFRASTRUCTURE.getTag()),
363369
is(equalTo(CommonAlertTag.WSTG_V42_CONF_05_ENUMERATE_INFRASTRUCTURE.getValue())));
364370
}
371+
372+
@Test
373+
void shouldReturnExpectedExampleAlert() {
374+
// Given / When
375+
List<Alert> alerts = rule.getExampleAlerts();
376+
377+
// Then
378+
assertThat(alerts.size(), is(equalTo(1)));
379+
380+
Alert alert = alerts.get(0);
381+
assertThat(alert.getConfidence(), is(equalTo(Alert.CONFIDENCE_MEDIUM)));
382+
assertThat(alert.getRisk(), is(equalTo(Alert.RISK_MEDIUM)));
383+
Map<String, String> tags = alert.getTags();
384+
assertThat(tags.size(), is(equalTo(4)));
385+
assertBaseTags(tags);
386+
assertThat(tags, hasKey("CWE-215"));
387+
}
365388
}

0 commit comments

Comments
 (0)