Skip to content

Commit 5320bae

Browse files
committed
ascanrulesBeta: Add more example alerts
- CHANGELOG > Add notes. - Scan rules > Add example alert functionality (6119). - Unit tests > Assert the new example alerts. - Messages.properties > Updated some http references (8262). Signed-off-by: kingthorin <[email protected]>
1 parent 67b7f7a commit 5320bae

File tree

6 files changed

+89
-14
lines changed

6 files changed

+89
-14
lines changed

addOns/ascanrulesBeta/CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
88
- Updated reference for scan rule: Possible Username Enumeration (Issue 8262)
99
- Cookie Slack Detector scan rule now has a more specific CWE.
1010
- Possible Username Enumeration scan rule now includes CWE-204 as a reference link.
11+
- The following scan rules now include example alert functionality for documentation generation purposes (Issue 6119):
12+
- Relative Path Confusion
13+
- Integer Overflow Error
14+
15+
### Removed
16+
- Removed HTTP only reference for scan rule: Integer Overflow Error (Issue 8262)
1117

1218
## [51] - 2024-02-16
1319
### Changed

addOns/ascanrulesBeta/src/main/java/org/zaproxy/zap/extension/ascanrulesBeta/IntegerOverflowScanRule.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
package org.zaproxy.zap.extension.ascanrulesBeta;
2424

2525
import java.io.IOException;
26+
import java.util.List;
2627
import java.util.Map;
2728
import org.apache.logging.log4j.LogManager;
2829
import org.apache.logging.log4j.Logger;
@@ -205,13 +206,12 @@ private boolean attackVector(String param, char type, String returnAttack) {
205206
sendAndReceive(msg);
206207
if (isPage500(msg)) {
207208
LOGGER.debug("Found Header");
208-
newAlert()
209-
.setConfidence(Alert.CONFIDENCE_MEDIUM)
210-
.setUri(this.getBaseMsg().getRequestHeader().getURI().toString())
211-
.setParam(param)
212-
.setAttack(returnAttack)
213-
.setOtherInfo(this.getError(type))
214-
.setEvidence(msg.getResponseHeader().getPrimeHeader())
209+
buildAlert(
210+
getBaseMsg().getRequestHeader().getURI().toString(),
211+
param,
212+
returnAttack,
213+
type,
214+
msg.getResponseHeader().getPrimeHeader())
215215
.setMessage(msg)
216216
.raise();
217217
return true;
@@ -221,4 +221,27 @@ private boolean attackVector(String param, char type, String returnAttack) {
221221
}
222222
return false;
223223
}
224+
225+
@Override
226+
public List<Alert> getExampleAlerts() {
227+
return List.of(
228+
buildAlert(
229+
"https://example.com/?years=1",
230+
"years",
231+
"95697568703220167658153205694899573480013738",
232+
'1',
233+
"HTTP/1.1 500 Internal Server Error")
234+
.build());
235+
}
236+
237+
private AlertBuilder buildAlert(
238+
String url, String param, String attack, char type, String evidence) {
239+
return newAlert()
240+
.setConfidence(Alert.CONFIDENCE_MEDIUM)
241+
.setUri(url)
242+
.setParam(param)
243+
.setAttack(attack)
244+
.setOtherInfo(this.getError(type))
245+
.setEvidence(evidence);
246+
}
224247
}

addOns/ascanrulesBeta/src/main/java/org/zaproxy/zap/extension/ascanrulesBeta/RelativePathConfusionScanRule.java

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -617,13 +617,8 @@ public void scan() {
617617
MESSAGE_PREFIX + "extrainfo.nocontenttype");
618618
}
619619

620-
// alert it..
621-
newAlert()
622-
.setConfidence(Alert.CONFIDENCE_MEDIUM)
620+
buildAlert(hackedUri.toString(), extraInfo, relativeReferenceEvidence)
623621
.setUri(getBaseMsg().getRequestHeader().getURI().toString())
624-
.setAttack(hackedUri.toString())
625-
.setOtherInfo(extraInfo)
626-
.setEvidence(relativeReferenceEvidence)
627622
.setMessage(hackedMessage)
628623
.raise();
629624

@@ -642,6 +637,14 @@ public void scan() {
642637
}
643638
}
644639

640+
private AlertBuilder buildAlert(String attack, String otherInfo, String evidence) {
641+
return newAlert()
642+
.setConfidence(Alert.CONFIDENCE_MEDIUM)
643+
.setAttack(attack)
644+
.setOtherInfo(otherInfo)
645+
.setEvidence(evidence);
646+
}
647+
645648
@Override
646649
public int getRisk() {
647650
return Alert.RISK_MEDIUM; // Medium or High? We'll see what the community consensus is..
@@ -661,4 +664,15 @@ public int getWascId() {
661664
public Map<String, String> getAlertTags() {
662665
return ALERT_TAGS;
663666
}
667+
668+
@Override
669+
public List<Alert> getExampleAlerts() {
670+
return List.of(
671+
buildAlert(
672+
"https://example.com/profile/ybpsv/bqmmn/?foo=bar",
673+
Constant.messages.getString(
674+
MESSAGE_PREFIX + "extrainfo.nocontenttype"),
675+
"background: url(image.png)")
676+
.build());
677+
}
664678
}

addOns/ascanrulesBeta/src/main/resources/org/zaproxy/zap/extension/ascanrulesBeta/resources/Messages.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ ascanbeta.integeroverflow.error2 = Potential Integer Overflow. Status code chan
114114
ascanbeta.integeroverflow.error3 = Potential Integer Overflow. Status code changed on the input of a long string of ones.
115115
ascanbeta.integeroverflow.error4 = Potential Integer Overflow. Status code changed on the input of a long string of nines.
116116
ascanbeta.integeroverflow.name = Integer Overflow Error
117-
ascanbeta.integeroverflow.refs = https://en.wikipedia.org/wiki/Integer_overflow\nhttps://cwe.mitre.org/data/definitions/190.html\nhttp://projects.webappsec.org/w/page/13246946/Integer%20Overflows
117+
ascanbeta.integeroverflow.refs = https://en.wikipedia.org/wiki/Integer_overflow\nhttps://cwe.mitre.org/data/definitions/190.html
118118
ascanbeta.integeroverflow.soln = In order to prevent overflows and divide by 0 (zero) errors in the application, please rewrite the backend program, checking if the values of integers being processed are within the application's allowed range. This will require a recompilation of the backend executable.
119119

120120
ascanbeta.name = Active Scan Rules - beta

addOns/ascanrulesBeta/src/test/java/org/zaproxy/zap/extension/ascanrulesBeta/IntegerOverflowScanRuleUnitTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@
2727
import static org.hamcrest.Matchers.not;
2828

2929
import fi.iki.elonen.NanoHTTPD;
30+
import java.util.List;
3031
import java.util.Map;
3132
import org.junit.jupiter.api.Test;
33+
import org.parosproxy.paros.core.scanner.Alert;
3234
import org.parosproxy.paros.network.HttpMessage;
3335
import org.zaproxy.addon.commonlib.CommonAlertTag;
3436
import org.zaproxy.zap.model.Tech;
@@ -157,4 +159,18 @@ void shouldReturnExpectedMappings() {
157159
tags.get(CommonAlertTag.OWASP_2017_A01_INJECTION.getTag()),
158160
is(equalTo(CommonAlertTag.OWASP_2017_A01_INJECTION.getValue())));
159161
}
162+
163+
@Test
164+
void shouldHaveExpectedExampleAlert() {
165+
// Given / When
166+
List<Alert> alerts = rule.getExampleAlerts();
167+
// Then
168+
assertThat(alerts.size(), is(equalTo(1)));
169+
}
170+
171+
@Test
172+
@Override
173+
public void shouldHaveValidReferences() {
174+
super.shouldHaveValidReferences();
175+
}
160176
}

addOns/ascanrulesBeta/src/test/java/org/zaproxy/zap/extension/ascanrulesBeta/RelativePathConfusionScanRuleUnitTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,10 @@
2323
import static org.hamcrest.Matchers.equalTo;
2424
import static org.hamcrest.Matchers.is;
2525

26+
import java.util.List;
2627
import java.util.Map;
2728
import org.junit.jupiter.api.Test;
29+
import org.parosproxy.paros.core.scanner.Alert;
2830
import org.zaproxy.addon.commonlib.CommonAlertTag;
2931

3032
class RelativePathConfusionScanRuleUnitTest
@@ -58,4 +60,18 @@ void shouldReturnExpectedMappings() {
5860
tags.get(CommonAlertTag.OWASP_2017_A06_SEC_MISCONFIG.getTag()),
5961
is(equalTo(CommonAlertTag.OWASP_2017_A06_SEC_MISCONFIG.getValue())));
6062
}
63+
64+
@Test
65+
void shouldHaveExpectedExampleAlert() {
66+
// Given / When
67+
List<Alert> alerts = rule.getExampleAlerts();
68+
// Then
69+
assertThat(alerts.size(), is(equalTo(1)));
70+
}
71+
72+
@Test
73+
@Override
74+
public void shouldHaveValidReferences() {
75+
super.shouldHaveValidReferences();
76+
}
6177
}

0 commit comments

Comments
 (0)