diff --git a/java/ql/lib/semmle/code/xml/MavenPom.qll b/java/ql/lib/semmle/code/xml/MavenPom.qll index 8af6e6f0128..612c1468259 100644 --- a/java/ql/lib/semmle/code/xml/MavenPom.qll +++ b/java/ql/lib/semmle/code/xml/MavenPom.qll @@ -381,6 +381,15 @@ class DeclaredRepository extends PomElement { * be the string contents of that tag. */ string getRepositoryUrl() { result = this.getAChild("url").(PomElement).getValue() } + + /** + * Holds if this repository is disabled in both the `releases` and `snapshots` policies. + */ + predicate isDisabled() { + forex(PomElement policy | policy = this.getAChild(["releases", "snapshots"]) | + policy.getAChild("enabled").(PomElement).getValue() = "false" + ) + } } /** diff --git a/java/ql/src/Security/CWE/CWE-829/InsecureDependencyResolution.ql b/java/ql/src/Security/CWE/CWE-829/InsecureDependencyResolution.ql index ede03c50b00..dca1a9cc4b7 100644 --- a/java/ql/src/Security/CWE/CWE-829/InsecureDependencyResolution.ql +++ b/java/ql/src/Security/CWE/CWE-829/InsecureDependencyResolution.ql @@ -17,7 +17,8 @@ import java import semmle.code.xml.MavenPom predicate isInsecureRepositoryUsage(DeclaredRepository repository) { - repository.getRepositoryUrl().regexpMatch("(?i)^(http|ftp)://(?!localhost[:/]).*") + repository.getRepositoryUrl().regexpMatch("(?i)^(http|ftp)://(?!localhost[:/]).*") and + not repository.isDisabled() } from DeclaredRepository repository diff --git a/java/ql/src/change-notes/2022-11-21-disabled-maven-repositories.md b/java/ql/src/change-notes/2022-11-21-disabled-maven-repositories.md new file mode 100644 index 00000000000..5d060b06076 --- /dev/null +++ b/java/ql/src/change-notes/2022-11-21-disabled-maven-repositories.md @@ -0,0 +1,4 @@ +--- +category: minorAnalysis +--- +* The query `java/maven/non-https-url` no longer alerts about disabled repositories. diff --git a/java/ql/test/query-tests/security/CWE-829/semmle/tests/secure-pom.xml b/java/ql/test/query-tests/security/CWE-829/semmle/tests/secure-pom.xml index 2f96052d584..2dc5709b320 100644 --- a/java/ql/test/query-tests/security/CWE-829/semmle/tests/secure-pom.xml +++ b/java/ql/test/query-tests/security/CWE-829/semmle/tests/secure-pom.xml @@ -61,5 +61,17 @@ https://insecure-repository.example + + disabled-repo + Disabled Repository + + false + + + false + + + http://insecure-repository.example +