Closed santosomar closed 2 months ago
@santosomar: Maybe, I misunderstood you but I think this is already possible with CSAF 2.0:
Please see my example below:
If I misunderstood you, please clarify. Also see https://github.com/oasis-tcs/csaf/blob/master/csaf_2.0/examples/csaf/csaf_vex/2022-evd-uc-07-001.json as example.
PS: Please don't use future CVEs in examples as this might cause confusion in the future. According to the CNA rules section 5.4, there is a specific range defined for examples.
Scenario 3 is also how Red Hat structures our VEX files, see e.g.:
https://access.redhat.com/security/data/csaf/v2/vex/2024/cve-2024-6716.json
Multiple products are described in the product tree and the product status of that single vulnerability is defined for each.
@tschmidtb51 For each product referenced in the VEX document, we would like to provide two additional pieces of data: a) additional clarifying details on how we determined the status of a given product regarding the vulnerability and b) the internal bug identifier used to track the fix for that vulnerability for that product
After reviewing the example JSON document you referenced, we realize we can use the Vulnerability Property
Based on the current CSAF specification, we can use the relevant product_ids with the following:
The problem is that 3.2.3.6 (Vulnerabilities Property - IDs), as we understand the CSAF 2.0 specification, only allows for two properties: "system_name" and "text" - but it does NOT allow the inclusion of any product_ids.
So, there is no issue if the VEX document refers to a [single product, single CVE ID] or [single product, multiple CVE IDs]. The problem arises when your VEX document represents [multiple products, single CVE ID] or [multiple products, multiple CVE IDs].
This is an example of a VEX document "single product, single CVE ID" - no issues here:
"vulnerabilities": [ { "cve": "CVE-2021-44228", "notes": [ { "category": "description", "text": "blah blah", "title": "CVE description" } ], "ids": [ { "system_name": "Cisco Bug ID", "text": "CSCaa11111" } ], "product_status": { "known_affected": [ "CSAFPID-0002" ] },
But in the example [multiple products, single CVE ID], we would have:
"vulnerabilities": [ { "cve": "CVE-2021-44228", "notes": [ { "category": "description", "text": "blah blah", "title": "CVE description" } ], "ids": [ { "system_name": "Cisco Bug ID", "text": "CSCaa11111" }, { "system_name": "Cisco Bug ID", "text": "CSCxy99999" } ], "product_status": { "known_affected": [ "CSAFPID-0002", "CSAFPID-0003" ] },
That is the problem - there's no way to map each entry in "ids" to a specific product_id. What we would need to have (and it seems we don't) is this:
"vulnerabilities": [ { "cve": "CVE-2021-44228", "notes": [ { "category": "description", "text": "blah blah", "title": "CVE description" } ], "ids": [ { "system_name": "Cisco Bug ID", "text": "CSCaa11111", "applies_to": [ "CSAFPID-0002" ] }, { "system_name": "Cisco Bug ID", "text": "CSCxy99999", "applies_to" : [ "CSAFPID-0003" ] } ], "product_status": { "known_affected": [ "CSAFPID-0002", "CSAFPID-0003" ] },
That "applies_to" property binds the "id" to a given product_id (or a set of product_id entries if the same bug tracking id applies to more than a single product).
@DarioCiccarone Thank you for clarifying your request.
This need to be discussed in the TC. The main questions for the TC are:
ids
on product_ids
?ids
on group_ids
?ids
point to an outside / upstream system that of which not products are present in the VEX? If so, this answers 3. (IMHO, there is - exactly in VEX.)Some minor comments:
- flags to communicate VEX justifications (for products with a status of affected)
I guess, its a typo. Correct would be: flags
to communicate VEX justifications (for products with a status of not affected)
threats to communicate additional information on how we determined the status.
I would rather put that into notes
. I think there was the idea to add product_ids
as an optional field to notes
, but I haven't found the issue right now.
Some minor comments:
- flags to communicate VEX justifications (for products with a status of affected)
I guess, its a typo. Correct would be:
flags
to communicate VEX justifications (for products with a status of not affected)
You are correct, of course. I meant to say "for NOT affected." Thanks for catching that.
threats to communicate additional information on how we determined the status.
I would rather put that into
notes
. I think there was the idea to addproduct_ids
as an optional field tonotes
, but I haven't found the issue right now.
Yeah, that's the problem of using the notes
- if I am listing three products as "Not Affected" and five others as "Affected," I might have two notes (note 1 applies to the Not Affected ones and note 2 to the Affected ones), or in the worst case scenario, I might have fives. And as you point out above, there's currently also no way to bind a givennote
instance to a single product_id
or a set of product_id
s
But threats
with a category value of impact
would work perfectly for our purposes, I think - from the example JSON file we've been using all this time:
"threats": [
{
"category": "impact",
"details": "Class with vulnerable code was removed before shipping.",
"product_ids": [
"CSAFPID-0001",
"CSAFPID-0005",
"CSAFPID-0006",
"CSAFPID-0007"
]
},
{
"category": "impact",
"details": "Log4j was not included in those versions at all.",
"product_ids": [
"CSAFPID-0009"
]
}
]
That additional information provided in details
is precisely what we want to deliver.
However, after re-checking the documentation for threats
at https://docs.oasis-open.org/csaf/csaf/v2.0/os/csaf-v2.0-os.html#32314-vulnerabilities-property---threats, it becomes clear that the spirit, or purpose, of the threat
, impact
property was very different from how it is being used in the example . . . Using it for our stated purpose would match the way it is used within the example, but doesn't match the stated purpose of the property on the CSAF 2.0 documentation.
threats to communicate additional information on how we determined the status.
I would rather put that into
notes
. I think there was the idea to addproduct_ids
as an optional field tonotes
, but I haven't found the issue right now.
Sorry - I think I misunderstood you. You are right that the impact statement (as shown in the example) belongs into the threats
object.
That additional information provided in
details
is precisely what we want to deliver.However, after re-checking the documentation for
threats
at https://docs.oasis-open.org/csaf/csaf/v2.0/os/csaf-v2.0-os.html#32314-vulnerabilities-property---threats, it becomes clear that the spirit, or purpose, of thethreat
,impact
property was very different from how it is being used in the example . .
The threats
' details
fields with impact
as category
is exactly where an impact statement should be in CSAF: https://docs.oasis-open.org/csaf/csaf/v2.0/os/csaf-v2.0-os.html#45-profile-5-vex
Also the documentation IMHO clearly states that the information why something is not exploitable belongs there:
The value
impact
indicates that thedetails
field contains an assessment of the impact on the user or the target set if the vulnerability is successfully exploited or a description why it cannot be exploited.
Sorry, again about the confusion.
As discussed in our TC meeting on 2024-08-28, there were two issues presented here. The first item is already addressed in the current standard version (CSAF 2.0). The threats
with a category value of impact
addresses the concern.
The second issue is that in the current version of CSAF (2.0), there's a challenge with using the notes
field effectively. For instance, if you need to list three products as "Not Affected" and five others as "Affected," you might create two notes (one for the "Not Affected" products and another for the "Affected" ones). However, in a worst-case scenario, you might end up needing five separate notes. Moreover, there's currently no mechanism to bind a specific note
instance to an individual product_id
or a set of product_ids
, which further complicates the clarity and precision of the documentation.
During the TC, it was suggested to close this issue and open a new one to address the second item described here.
Scenario 1: A CSAF VEX advisory can provide the status of one vulnerability in one product, as shown below:
Scenario 2: A CSAF VEX advisory can also provide the status of multiple vulnerabilities that may affect/not affect a product:
Scenario 3: Alternately, a CSAF VEX advisory could provide the status of multiple products that may be affected by a given vulnerability. In other words, you can go to a vendor/provider/maintainer and ask: “tell me the status of CVE-2029–0123 in all your products (i.e., the products under investigation, affected, not affected, or fixed).
However, the current CSAF 2.0 schema does not allow a vendor/provider/maintainer to provide notes about different products to one CVE, as shown in Scenario 3. For example, a product may have different
versions
orplatforms
of that product that may be affected by that vulnerability but otherversions
orplatforms
for that exact product may not be affected by that vulnerability. There are no capabilities to include those notes in the advisory when you have the scenario of one CVE --> to many products/platforms/versions in CSAF 2.0