1. What purpose does "operator" tag inside "configuration" have?
Well there is a defined purpose of "operator" in each CVE configuration. Here it is i am trying to explain.
If a CVE configuration's nodes[...] array contains operator 'AND' then it must have at least two or more children representing a combination of logical AND between the children in order to qualify as vulnerable.
Let us see an example: For "CVE-2018-4926", i take this snippet:
"configurations": {
"CVE_data_version": "4.0",
"nodes": [
{
"operator": "AND",
"children": [
{
"operator": "OR",
"cpe_match": [
{
"vulnerable": true,
"cpe23Uri": "cpe:2.3:a:adobe:digital_editions:*:*:*:*:*:*:*:*",
"versionEndIncluding": "4.5.7"
}
]
},
{
"operator": "OR",
"cpe_match": [
{
"vulnerable": false,
"cpe23Uri": "cpe:2.3:o:apple:iphone_os:-:*:*:*:*:*:*:*"
},
{
"vulnerable": false,
"cpe23Uri": "cpe:2.3:o:apple:mac_os_x:-:*:*:*:*:*:*:*"
},
{
"vulnerable": false,
"cpe23Uri": "cpe:2.3:o:google:android:-:*:*:*:*:*:*:*"
},
{
"vulnerable": false,
"cpe23Uri": "cpe:2.3:o:microsoft:windows:-:*:*:*:*:*:*:*"
}
]
}
]
}
]
}
Here in the above configuration, AND operator has two children. Notice the the :a: is for application and :o: is for operating system in cpe23Uri. example,
"cpe23Uri": "cpe:2.3:a:adobe:digital_editions:*:*:*:*:*:*:*:*",
AND
cpe23Uri": "cpe:2.3:o:apple:iphone_os:-:*:*:*:*:*:*:*"
Now in order to qualify the application "adobe:digital_editions" version ending at 4.5.7 as vulnerable, the operating systems must be :o:apple:iphone_os OR :o:apple:mac_os_x: OR o:google:android: OR cpe:2.3:o:microsoft:windows.
We can rephrase this as:
The adobe digital_editions application version ending at 4.5.7 is vulnerable for above mentioned OS.
What is take away :
The AND operator in configuration will always come with two things with following possibilities :
1. application and operating system
2. hardware :h: and operation system
If the configuration is without children, then any of cpe23Uri with hold to qualify the OS or application as vulnerable as shown in following two examples.
Example 1: for OR operator for applications
"configurations" : {
"CVE_data_version" : "4.0",
"nodes" : [ {
"operator" : "OR",
"cpe_match" : [ {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:a:oracle:flexcube_private_banking:2.0.0:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:a:oracle:flexcube_private_banking:2.0.1:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:a:oracle:flexcube_private_banking:2.2.0:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:a:oracle:flexcube_private_banking:12.0.1:*:*:*:*:*:*:*"
} ]
} ]
},
Example 2: for OR operator for operating system
"configurations" : {
"CVE_data_version" : "4.0",
"nodes" : [ {
"operator" : "OR",
"cpe_match" : [ {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:5.0:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:5.0.1:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:5.0.2:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:5.1:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:5.1.0:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:5.1.1:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:6.0:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:6.0.1:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:7.0:*:*:*:*:*:*:*"
}, {
"vulnerable" : true,
"cpe23Uri" : "cpe:2.3:o:google:android:7.1.0:*:*:*:*:*:*:*"
} ]
} ]
},
I hope it will clarify a bit now. If not, i am available for any questions in this regard.
Good luck!