Skip to content

Commit 30618bc

Browse files
authored
Merge pull request #6741 from thc202/validate-refs-state
Validate state of alert references
2 parents 56421d2 + 4321056 commit 30618bc

File tree

19 files changed

+130
-75
lines changed

19 files changed

+130
-75
lines changed

.github/workflows/ci_remote.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
name: CI Remote
2+
3+
on:
4+
workflow_dispatch:
5+
schedule:
6+
# Once a month
7+
- cron: '0 8 18 * *'
8+
9+
jobs:
10+
build:
11+
runs-on: ubuntu-latest
12+
13+
steps:
14+
- uses: actions/checkout@v5
15+
- uses: actions/setup-java@v5
16+
with:
17+
distribution: 'temurin'
18+
java-version: 17
19+
- uses: gradle/actions/setup-gradle@ed408507eac070d1f99cc633dbcf757c94c7933a # v4.4.3
20+
with:
21+
gradle-home-cache-includes: |
22+
caches
23+
notifications
24+
wdm
25+
- run: ./gradlew -Dorg.gradle.jvmargs=-Xmx4g --continue --no-parallel test
26+
env:
27+
ZAP_REMOTE_TESTS: 1

addOns/addOns.gradle.kts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,10 @@ subprojects {
144144
}
145145
}
146146

147+
tasks.withType<Test>().configureEach {
148+
inputs.property("ZAP_REMOTE_TESTS", if (System.getenv("ZAP_REMOTE_TESTS") == "1") "1" else "0")
149+
}
150+
147151
configurations {
148152
"compileClasspath" {
149153
exclude(group = "log4j")

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
package org.zaproxy.zap.extension.ascanrules;
2121

22-
import org.junit.jupiter.api.Test;
2322
import org.parosproxy.paros.core.scanner.AbstractPlugin;
2423
import org.zaproxy.zap.testutils.ActiveScannerTestUtils;
2524

@@ -29,10 +28,4 @@ abstract class ActiveScannerTest<T extends AbstractPlugin> extends ActiveScanner
2928
protected void setUpMessages() {
3029
mockMessages(new ExtensionAscanRules());
3130
}
32-
33-
@Test
34-
@Override
35-
public void shouldHaveValidReferences() {
36-
super.shouldHaveValidReferences();
37-
}
3831
}

addOns/ascanrulesAlpha/src/test/java/org/zaproxy/zap/extension/ascanrulesAlpha/ActiveScannerTest.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
package org.zaproxy.zap.extension.ascanrulesAlpha;
2121

22-
import org.junit.jupiter.api.Test;
2322
import org.parosproxy.paros.core.scanner.AbstractPlugin;
2423
import org.zaproxy.zap.testutils.ActiveScannerTestUtils;
2524

@@ -29,10 +28,4 @@ abstract class ActiveScannerTest<T extends AbstractPlugin> extends ActiveScanner
2928
protected void setUpMessages() {
3029
mockMessages(new ExtensionAscanRulesAlpha());
3130
}
32-
33-
@Test
34-
@Override
35-
public void shouldHaveValidReferences() {
36-
super.shouldHaveValidReferences();
37-
}
3831
}

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
*/
2020
package org.zaproxy.zap.extension.ascanrulesBeta;
2121

22-
import org.junit.jupiter.api.Test;
2322
import org.parosproxy.paros.core.scanner.AbstractPlugin;
2423
import org.zaproxy.zap.testutils.ActiveScannerTestUtils;
2524

@@ -29,10 +28,4 @@ abstract class ActiveScannerTest<T extends AbstractPlugin> extends ActiveScanner
2928
protected void setUpMessages() {
3029
mockMessages(new ExtensionAscanRulesBeta());
3130
}
32-
33-
@Test
34-
@Override
35-
public void shouldHaveValidReferences() {
36-
super.shouldHaveValidReferences();
37-
}
3831
}

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
import org.parosproxy.paros.core.scanner.Alert;
3030
import org.zaproxy.addon.commonlib.CommonAlertTag;
3131
import org.zaproxy.addon.commonlib.PolicyTag;
32+
import org.zaproxy.addon.network.common.ZapSocketTimeoutException;
33+
import org.zaproxy.zap.testutils.AlertReferenceError;
3234

3335
class CrossDomainScanRuleUnitTest extends ActiveScannerTest<CrossDomainScanRule> {
3436

@@ -37,6 +39,17 @@ protected CrossDomainScanRule createScanner() {
3739
return new CrossDomainScanRule();
3840
}
3941

42+
@Override
43+
public boolean isAllowedReferenceError(
44+
AlertReferenceError.Cause cause, String reference, Object detail) {
45+
if (reference.startsWith("https://www.adobe.com/")
46+
&& detail instanceof ZapSocketTimeoutException) {
47+
// Reference behind CDN which times out when accessed through CI.
48+
return true;
49+
}
50+
return false;
51+
}
52+
4053
@Test
4154
void shouldReturnExpectedMappings() {
4255
// Given / When

addOns/graaljs/CHANGELOG.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ All notable changes to this add-on will be documented in this file.
44
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
55

66
## Unreleased
7-
7+
### Changed
8+
- Use example links in Active/Passive Rule templates' references.
89

910
## [0.9.0] - 2025-01-09
1011
### Changed

addOns/graaljs/src/main/zapHomeFiles/scripts/templates/active/Active default template GraalJS.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ name: Active Vulnerability Title
1010
description: Full description
1111
solution: The solution
1212
references:
13-
- Reference 1
14-
- Reference 2
13+
- https://www.example.org/reference1
14+
- https://www.example.org/reference2
1515
category: INJECTION # info_gather, browser, server, misc, injection
1616
risk: INFO # info, low, medium, high
1717
confidence: LOW # false_positive, low, medium, high, user_confirmed

addOns/graaljs/src/main/zapHomeFiles/scripts/templates/passive/Passive default template GraalJS.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@ name: Passive Vulnerability Title
1313
description: Full description
1414
solution: The solution
1515
references:
16-
- Reference 1
17-
- Reference 2
16+
- https://www.example.org/reference1
17+
- https://www.example.org/reference2
1818
risk: INFO # info, low, medium, high
1919
confidence: LOW # false_positive, low, medium, high, user_confirmed
2020
cweId: 0

addOns/graaljs/src/test/java/org/zaproxy/zap/extension/graaljs/ActiveDefaultTemplateGraalJsScriptTest.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
import java.util.ResourceBundle;
3232
import org.junit.jupiter.api.Test;
3333
import org.parosproxy.paros.core.scanner.Alert;
34+
import org.zaproxy.zap.testutils.AlertReferenceError;
3435

3536
class ActiveDefaultTemplateGraalJsScriptTest extends GraalJsActiveScriptScanRuleTestUtils {
3637
@Override
@@ -51,6 +52,16 @@ public void shouldHaveI18nNonEmptyName(String name, ResourceBundle extensionReso
5152
assertThat(name, is(not(emptyOrNullString())));
5253
}
5354

55+
@Override
56+
public boolean isAllowedReferenceError(
57+
AlertReferenceError.Cause cause, String reference, Object detail) {
58+
if (cause == AlertReferenceError.Cause.UNEXPECTED_STATUS_CODE && ((int) detail) == 404) {
59+
// These are example.org references.
60+
return true;
61+
}
62+
return false;
63+
}
64+
5465
@Test
5566
void shouldRaiseAlert() throws Exception {
5667
// Given
@@ -65,7 +76,11 @@ void shouldRaiseAlert() throws Exception {
6576
assertThat(alert.getName(), is(equalTo("Active Vulnerability Title")));
6677
assertThat(alert.getDescription(), is(equalTo("Full description")));
6778
assertThat(alert.getSolution(), is(equalTo("The solution")));
68-
assertThat(alert.getReference(), is(equalTo("Reference 1\nReference 2")));
79+
assertThat(
80+
alert.getReference(),
81+
is(
82+
equalTo(
83+
"https://www.example.org/reference1\nhttps://www.example.org/reference2")));
6984
assertThat(alert.getOtherInfo(), is(equalTo("Any other Info")));
7085
assertThat(alert.getRisk(), is(equalTo(Alert.RISK_INFO)));
7186
assertThat(alert.getConfidence(), is(equalTo(Alert.CONFIDENCE_LOW)));

0 commit comments

Comments
 (0)