diff --git a/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/SkipVulnerabilityScanDecider.java b/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/SkipVulnerabilityScanDecider.java index 507572c3..49ea7f92 100644 --- a/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/SkipVulnerabilityScanDecider.java +++ b/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/SkipVulnerabilityScanDecider.java @@ -11,9 +11,9 @@ public final class SkipVulnerabilityScanDecider { private SkipVulnerabilityScanDecider() {} - public static boolean shouldSkipVulnerabilityScan(ContextObject context) { + public static boolean shouldSkipVulnerabilityScan(ContextObject context, boolean defaultIfNoContext) { if (context == null) { - return true; + return defaultIfNoContext; } if (context.getForcedProtectionOff().isEmpty()) { ServiceConfiguration config = getConfig(); @@ -30,4 +30,7 @@ public static boolean shouldSkipVulnerabilityScan(ContextObject context) { // Get stored forcedProtectionOff value from cache. return context.getForcedProtectionOff().get(); } + public static boolean shouldSkipVulnerabilityScan(ContextObject context) { + return shouldSkipVulnerabilityScan(context, true); + } } diff --git a/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/ssrf/SSRFDetector.java b/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/ssrf/SSRFDetector.java index 3a2cf6e4..98890473 100644 --- a/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/ssrf/SSRFDetector.java +++ b/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/ssrf/SSRFDetector.java @@ -9,6 +9,7 @@ import java.util.Map; import static dev.aikido.agent_api.helpers.StackTrace.getCurrentStackTrace; +import static dev.aikido.agent_api.vulnerabilities.SkipVulnerabilityScanDecider.shouldSkipVulnerabilityScan; import static dev.aikido.agent_api.vulnerabilities.ssrf.FindHostnameInContext.findHostnameInContext; import static dev.aikido.agent_api.vulnerabilities.ssrf.IsPrivateIP.containsPrivateIP; import static dev.aikido.agent_api.vulnerabilities.ssrf.PrivateIPRedirectFinder.isRedirectToPrivateIP; @@ -25,7 +26,7 @@ public static Attack run(String hostname, int port, List ipAddresses, St } ContextObject context = Context.get(); - if(context == null) { + if (shouldSkipVulnerabilityScan(context)) { return null; } FindHostnameInContext.Res attackFindings = findHostnameInContext(hostname, context, port); diff --git a/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/ssrf/StoredSSRFDetector.java b/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/ssrf/StoredSSRFDetector.java index f63e83d9..c6eba874 100644 --- a/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/ssrf/StoredSSRFDetector.java +++ b/agent_api/src/main/java/dev/aikido/agent_api/vulnerabilities/ssrf/StoredSSRFDetector.java @@ -1,5 +1,7 @@ package dev.aikido.agent_api.vulnerabilities.ssrf; +import dev.aikido.agent_api.context.Context; +import dev.aikido.agent_api.context.ContextObject; import dev.aikido.agent_api.vulnerabilities.Attack; import dev.aikido.agent_api.vulnerabilities.Vulnerabilities; @@ -8,6 +10,7 @@ import java.util.Map; import static dev.aikido.agent_api.helpers.StackTrace.getCurrentStackTrace; +import static dev.aikido.agent_api.vulnerabilities.SkipVulnerabilityScanDecider.shouldSkipVulnerabilityScan; import static dev.aikido.agent_api.vulnerabilities.ssrf.imds.Resolver.resolvesToImdsIp; public class StoredSSRFDetector { @@ -21,6 +24,13 @@ public Attack run(String hostname, List ipAddresses, String operation) { return null; } + ContextObject context = Context.get(); + // the 2nd param makes it so that if context is not set, we default to false. + // this is necessary for stored SSRF where we don't want an early return even if there's no context. + if (shouldSkipVulnerabilityScan(context, false)) { + return null; + } + return new Attack( operation, Vulnerabilities.STORED_SSRF, diff --git a/agent_api/src/test/java/utils/EmptySampleContextObject.java b/agent_api/src/test/java/utils/EmptySampleContextObject.java index ced6bda9..fb24119f 100644 --- a/agent_api/src/test/java/utils/EmptySampleContextObject.java +++ b/agent_api/src/test/java/utils/EmptySampleContextObject.java @@ -47,4 +47,7 @@ public EmptySampleContextObject(String route, String method, Map