Skip to content

Commit

Permalink
fix: workaround lack of CVSSv4 support with consistently lenient JSON…
Browse files Browse the repository at this point in the history
… parsing (#165)

* build: bump version

* fix: correct lenient JSON parsing

Ignore additional properties for all models where they do NOT have
a JSON schema that declares "additionalProperties: false" for the
element/node.
  • Loading branch information
chadlwilson committed Jun 29, 2024
1 parent 4287273 commit e5f28dc
Show file tree
Hide file tree
Showing 13 changed files with 34 additions and 15 deletions.
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1 +1 @@
version = 6.0.1
version = 6.0.2
4 changes: 2 additions & 2 deletions open-vulnerability-clients/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ See API usage examples in the [open-vulnerability-store](https://github.com/jere
<dependency>
<groupId>io.github.jeremylong</groupId>
<artifactId>open-vulnerability-clients</artifactId>
<version>6.0.1</version>
<version>6.0.2</version>
</dependency>
```

### gradle

```groovy
implementation 'io.github.jeremylong:open-vulnerability-clients:6.0.1'
implementation 'io.github.jeremylong:open-vulnerability-clients:6.0.2'
```

### api usage
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package io.github.jeremylong.openvulnerability.client.epss;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;

Expand All @@ -26,7 +27,7 @@
*
* @see <a href="https://www.first.org/epss/">https://www.first.org/epss/</a>
*/

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"cve", "epss", "percentile"})
public class EpssItem implements Serializable {
/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package io.github.jeremylong.openvulnerability.client.kev;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
Expand All @@ -25,6 +26,7 @@
import java.time.ZonedDateTime;
import java.util.List;

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"cve", "epss", "percentile"})
public class KevCatalog implements Serializable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package io.github.jeremylong.openvulnerability.client.kev;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
Expand All @@ -27,6 +28,7 @@
/**
* Known Exploited Vulnerability.
*/
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"cveID", "vendorProject", "product", "vulnerabilityName", "dateAdded", "shortDescription",
"requiredAction", "dueDate", "notes"})
public class KevItem implements Serializable {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package io.github.jeremylong.openvulnerability.client.nvd;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
Expand All @@ -30,6 +31,7 @@
import java.util.Objects;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"operator", "negate", "nodes"})
public class Config implements Serializable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package io.github.jeremylong.openvulnerability.client.nvd;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
Expand All @@ -27,6 +28,7 @@
* CPE match string or range
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"vulnerable", "criteria", "versionStartExcluding", "versionStartIncluding", "versionEndExcluding",
"versionEndIncluding", "matchCriteriaId"})
public class CpeMatch implements Serializable {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package io.github.jeremylong.openvulnerability.client.nvd;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
Expand All @@ -32,6 +33,7 @@
* JSON Schema for Common Vulnerability Scoring System version 2.0
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"version", "vectorString", "accessVector", "accessComplexity", "authentication",
"confidentialityImpact", "integrityImpact", "availabilityImpact", "baseScore", "exploitability",
"remediationLevel", "reportConfidence", "temporalScore", "collateralDamagePotential", "targetDistribution",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package io.github.jeremylong.openvulnerability.client.nvd;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
Expand All @@ -32,6 +33,7 @@
* JSON Schema for Common Vulnerability Scoring System version 3.0
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"version", "vectorString", "attackVector", "attackComplexity", "privilegesRequired",
"userInteraction", "scope", "confidentialityImpact", "integrityImpact", "availabilityImpact", "baseScore",
"baseSeverity", "exploitCodeMaturity", "remediationLevel", "reportConfidence", "temporalScore",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package io.github.jeremylong.openvulnerability.client.nvd;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
Expand All @@ -30,6 +31,7 @@
* Metric scores for a vulnerability as found on NVD.
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"cvssMetricV40", "cvssMetricV31", "cvssMetricV30", "cvssMetricV2"})
public class Metrics implements Serializable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
package io.github.jeremylong.openvulnerability.client.nvd;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
Expand All @@ -33,6 +34,7 @@
* Defines a configuration node in an NVD applicability statement.
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"operator", "negate", "cpeMatch"})
public class Node implements Serializable {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package io.github.jeremylong.openvulnerability.client.nvd;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
Expand All @@ -26,6 +27,7 @@
import java.util.Objects;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
@JsonPropertyOrder({"url", "source", "tags"})
public class Reference implements Serializable {

Expand Down
22 changes: 11 additions & 11 deletions vulnz/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ After running `install` you may need to restart your shell for the completion to
```bash
./gradlew vulnz:build
cd vulnz/build/libs
./vulnz-6.0.1.jar install
./vulnz-6.0.2.jar install
vulnz cve --cveId CVE-2021-44228 --prettyPrint
```

Expand Down Expand Up @@ -76,7 +76,7 @@ export JAVA_OPTS="-Xmx2g"
Alternatively, run the CLI using the `-Xmx2g` argument:

```bash
java -Xmx2g -jar ./vulnz-6.0.1.jar
java -Xmx2g -jar ./vulnz-6.0.2.jar
```

### Creating the Cache
Expand All @@ -91,7 +91,7 @@ vulnz cve --cache --directory ./cache
Alternatively, without using the above install command:

```bash
./vulnz-6.0.1.jar cve --cache --directory ./cache
./vulnz-6.0.2.jar cve --cache --directory ./cache
```

When creating the cache all other arguments to the vulnz cli
Expand All @@ -112,16 +112,16 @@ There are a couple of ENV vars

```bash
# replace the NVD_API_KEY with your NVD api key
docker run --name vulnz -e NVD_API_KEY=myapikey jeremylong/open-vulnerability-data-mirror:6.0.1
docker run --name vulnz -e NVD_API_KEY=myapikey jeremylong/open-vulnerability-data-mirror:6.0.2

# if you like use a volume
docker run --name vulnz -e NVD_API_KEY=myapikey -v cache:/usr/local/apache2/htdocs ghcr.io/jeremylong/vulnz:6.0.1
docker run --name vulnz -e NVD_API_KEY=myapikey -v cache:/usr/local/apache2/htdocs ghcr.io/jeremylong/vulnz:6.0.2

# adjust the memory usage
docker run --name vulnz -e JAVA_OPT=-Xmx2g jeremylong/open-vulnerability-data-mirror:6.0.1
docker run --name vulnz -e JAVA_OPT=-Xmx2g jeremylong/open-vulnerability-data-mirror:6.0.2

# you can also adjust the delay
docker run --name vulnz -e NVD_API_KEY=myapikey -e DELAY=3000 jeremylong/open-vulnerability-data-mirror:6.0.1
docker run --name vulnz -e NVD_API_KEY=myapikey -e DELAY=3000 jeremylong/open-vulnerability-data-mirror:6.0.2

```

Expand All @@ -133,10 +133,10 @@ docker exec -u mirror vulnz /mirror.sh

### Build

Assuming the current version is `6.0.1`
Assuming the current version is `6.0.2`

```bash
export TARGET_VERSION=6.0.1
export TARGET_VERSION=6.0.2
./gradlew vulnz:build -Pversion=$TARGET_VERSION
docker build vulnz/ -t ghcr.io/jeremylong/vulnz:$TARGET_VERSION --build-arg BUILD_VERSION=$TARGET_VERSION
```
Expand All @@ -145,7 +145,7 @@ docker build vulnz/ -t ghcr.io/jeremylong/vulnz:$TARGET_VERSION --build-arg BUIL

```bash
# checkout the repo
git tag vulnz/6.0.1
git tag vulnz/6.0.2
git push --tags
# this will build vulnz 6.0.1 on publish the docker image tagged 6.0.1
# this will build vulnz 6.0.2 on publish the docker image tagged 6.0.2
```

0 comments on commit e5f28dc

Please sign in to comment.