Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ascanrules: Path Traversal add details for dir match Alerts & reduce FPs #5824

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

kingthorin
Copy link
Member

@kingthorin kingthorin commented Oct 17, 2024

Overview

  • CHANGELOG > Added change note.
  • Message.properties > Added key/value pair supporting the new Alert details.
  • PathTraversalScanRule > Updated to include Other Info on Alerts when applicable, and pre-check the original message response to reduce false positives.
  • PathTraversalScanRuleUnitTest > Updated to assert Other Info or lack thereof where applicable, also assure appropriate skipping due to pre-conditions.

Related Issues

Checklist

  • [na] Update help
  • Update changelog
  • Run ./gradlew spotlessApply for code formatting
  • Write tests
  • Check code coverage
  • Sign-off commits
  • Squash commits
  • Use a descriptive title

@thc202
Copy link
Member

thc202 commented Oct 18, 2024

This does not seem to address the FP reported in the referenced issue.

@kingthorin
Copy link
Member Author

No it simply provides further context. IMHO it will be rare for all 5 of the nix matches to happen.

Do you want me to also exclude JS/CSS/Binary'ish because that's an option too which I could add to this PR.

@thc202
Copy link
Member

thc202 commented Oct 18, 2024

Not sure how rare is since JS chunks/libs tend to have lot of data, but we should not close the issue if it does not address it.

That would be better to address the issue (though the evidence match done beforehand should have caught the reported case, if actually static content).

@kingthorin
Copy link
Member Author

Okay I'll make further changes.

@kingthorin
Copy link
Member Author

This rule doesn't seem to pre-check the response. I'll tackle that as well.

@kingthorin
Copy link
Member Author

Addressed review, further pre-checks as discussed still coming 😁

@kingthorin kingthorin force-pushed the pathtrav-details branch 2 times, most recently from 6cdb014 to a9c8485 Compare October 19, 2024 20:55
@kingthorin kingthorin changed the title ascanrules: Path Traversal add Other Info for directory match Alerts ascanrules: Path Traversal add details for dir match Alerts & reduce FPs Oct 19, 2024
@kingthorin
Copy link
Member Author

Now w/ pre-checks.

@psiinon
Copy link
Member

psiinon commented Feb 21, 2025

Logo
Checkmarx One – Scan Summary & Detailsbcdaa672-8113-4377-9ed6-fa837b9b6dac

Great job, no security vulnerabilities found in this Pull Request

@kingthorin
Copy link
Member Author

I've rebased this to current. I believe all the previous feedback has been addressed.

Please correct me if I'm wrong.

@kingthorin
Copy link
Member Author

Rebased current, and reviewed previous comments. As far as I see they're all addressed.


return false;
}
return DirNamesContentsMatcher.matchNixDirectories(msg.getResponseBody().toString()) == null
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be better if this was done separately for the OS that's being checked, there's no reason to skip because of Nix occurrences if we are checking Win.

@thc202
Copy link
Member

thc202 commented Mar 10, 2025

Probably better to update the help to mention the resources that will be skipped. Although on second thought, maybe we should go with the precheck to start with.

@kingthorin
Copy link
Member Author

Probably better to update the help to mention the resources that will be skipped. Although on second thought, maybe we should go with the precheck to start with.

Do you mean split up the changes, or do the pre-check before the resource checks?

@thc202
Copy link
Member

thc202 commented Mar 10, 2025

Split up, not skip resources for now.

@kingthorin
Copy link
Member Author

Thanks for the review. It's good to get this moving again.

@kingthorin
Copy link
Member Author

Tweaked.

Resource Checking that was trimmed
# Note this was a diff after removal, so these actually need to be added if deemed necessary in the future
diff --git a/addOns/ascanrules/src/main/java/org/zaproxy/zap/extension/ascanrules/PathTraversalScanRule.java b/addOns/ascanrules/src/main/java/org/zaproxy/zap/extension/ascanrules/PathTraversalScanRule.java
index 32e85e330b..2392b1a806 100644
--- a/addOns/ascanrules/src/main/java/org/zaproxy/zap/extension/ascanrules/PathTraversalScanRule.java
+++ b/addOns/ascanrules/src/main/java/org/zaproxy/zap/extension/ascanrules/PathTraversalScanRule.java
@@ -579,13 +579,6 @@ public class PathTraversalScanRule extends AbstractAppParamPlugin
     }
 
     private static boolean isGoodCandidate(HttpMessage msg, Tech targetTech) {
-        if (ResourceIdentificationUtils.isJavaScript(msg)
-                || ResourceIdentificationUtils.isCss(msg)
-                || ResourceIdentificationUtils.responseContainsControlChars(msg)) {
-
-            return false;
-        }
-
         if (targetTech == Tech.Windows) {
             return DirNamesContentsMatcher.matchWinDirectories(msg.getResponseBody().toString())
                     == null;
diff --git a/addOns/ascanrules/src/test/java/org/zaproxy/zap/extension/ascanrules/PathTraversalScanRuleUnitTest.java b/addOns/ascanrules/src/test/java/org/zaproxy/zap/extension/ascanrules/PathTraversalScanRuleUnitTest.java
index 51a7b7e2d5..a7e4a91766 100644
--- a/addOns/ascanrules/src/test/java/org/zaproxy/zap/extension/ascanrules/PathTraversalScanRuleUnitTest.java
+++ b/addOns/ascanrules/src/test/java/org/zaproxy/zap/extension/ascanrules/PathTraversalScanRuleUnitTest.java
@@ -389,30 +389,6 @@ class PathTraversalScanRuleUnitTest extends ActiveScannerTest<PathTraversalScanR
         assertThat(alertsRaised, hasSize(0));
     }
 
-    @ParameterizedTest
-    @ValueSource(strings = {"/styles.css", "/code.js"})
-    void shouldSkipIfReqPathIsCssOrJs(String path) throws Exception {
-        // Given
-        rule.init(getHttpMessage(path + "?p=v"), parent);
-        // When
-        rule.scan();
-        // Then
-        assertThat(httpMessagesSent, hasSize(equalTo(0)));
-    }
-
-    @ParameterizedTest
-    @CsvSource({"/styles/, text/css", "/code, text/javascript"})
-    void shouldSkipIfResponseIsCssOfJs(String path, String contentType) throws Exception {
-        // Given
-        HttpMessage msg = getHttpMessage(path + "?p=v");
-        msg.getResponseHeader().setHeader(HttpResponseHeader.CONTENT_TYPE, contentType);
-        rule.init(msg, parent);
-        // When
-        rule.scan();
-        // Then
-        assertThat(httpMessagesSent, hasSize(equalTo(0)));
-    }
-
     @ParameterizedTest
     @CsvSource({
         // Windows will always happen before ignoring Linux, if only Linux pre-check matches

@kingthorin kingthorin force-pushed the pathtrav-details branch 2 times, most recently from fb7073e to 4697d52 Compare March 12, 2025 14:12
- CHANGELOG > Added change note.
- Message.properties > Added key/value pair supporting the new Alert
details.
- PathTraversalScanRule > Updated to include Other Info on Alerts when
applicable, and pre-check the original message response to reduce false
positives.
- PathTraversalScanRuleUnitTest > Updated to assert Other Info or lack
thereof where applicable, also assure appropriate skipping due to
pre-conditions.

Signed-off-by: kingthorin <kingthorin@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Development

Successfully merging this pull request may close these issues.

False Positive - Path Traversal
3 participants