How to preview the results when fixing multiple CVEs#
To fix multiple CVEs, you need to use the u.pro.security.fix.cve.execute.v1
endpoint, as the CLI pro fix
command doesn’t support multiple CVEs. However,
as can be seen in the
endpoint documentation,
this command will output a JSON blob containing the results of the fix
operation for each CVE.
This doesn’t allow for a quick visualisation of the fix
status of each
requested CVE. To address that, you can use a jq
filter. The jq
command
is mainly used to parse JSON data directly in the terminal. To learn more about
it, refer to the jq
manpage.
Before proceeding, you need to ensure that jq
is installed on your machine.
This can be achieved by running the following command:
$ sudo apt update && sudo apt install jq -y
Now that jq
is installed, you can properly parse the JSON data delivered
from the execute
API endpoint. As an example, let’s try to fix these three
CVEs: CVE-2020-28196, CVE-2020-15180 and CVE-2017-9233.
To do that, run the following command:
pro api u.pro.security.fix.cve.execute.v1 --data '{"cves": ["CVE-2020-28196", "CVE-2020-15180", "CVE-2017-9233"]}' \
| jq -r '.data.attributes.cves_data.cves[] | "\(.title) (\(.description)) - \(.status)"'
We can see that the command output will be something that follows this structure here:
CVE-2020-28196 (Kerberos vulnerability) - fixed
CVE-2020-15180 (MariaDB vulnerabilities) - not-affected
CVE-2017-9233 (Coin3D vulnerability) - fixed
Note that each entry in this output consists of three fields:
CVE NAME: The name of the CVE
CVE DESCRIPTION: The description of the CVE
CVE STATUS: The status of the CVE which can be one of: fixed, still-affected, not-affected and affected-until-reboot.
If you want to change the output format, you can tweak the jq
filter. For
example, to only show the CVE title and status, you can change the jq
filter to:
jq -r '.data.attributes.cves_data.cves[] | "\(.title) - \(.status)"'
Finally, if you want to have the same visualisation when fixing USNs, change
the jq
filter to:
jq -r '.data.attributes.usns_data.usns[] | "\(.title) (\(.description)) - \(.status)"'