@@ -81,40 +81,55 @@ def to_advisory(advisory_data):
81
81
82
82
Example:
83
83
>>> advisory_data = {
84
- ... "name": "CVE-2023-1234 ",
85
- ... "publishedAt": "2023-08-20T12:34:56Z ",
86
- ... "description": "A vulnerability in the system. ",
87
- ... "affectedProducts": ["product1 "],
84
+ ... "name": "RLSA-2021:4364 ",
85
+ ... "publishedAt": "2021-11-09T09:11:20Z ",
86
+ ... "description": "The binutils packages provide a collection of binary utilities for the manipulation ",
87
+ ... "affectedProducts": ["Rocky Linux 8 "],
88
88
... "rpms": {
89
- ... "product1 ": {
89
+ ... "Rocky Linux 8 ": {
90
90
... "nvras": [
91
- ... "package-1.0-1.el8.x86_64.rpm",
92
- ... "package-2.0-1.el8.noarch.rpm"
91
+ ... "gfs2-utils-0:3.2.0-11.el8.aarch64.rpm",
92
+ ... "gfs2-utils-0:3.2.0-11.el8.src.rpm",
93
+ ... "gfs2-utils-0:3.2.0-11.el8.x86_64.rpm",
94
+ ... "gfs2-utils-debuginfo-0:3.2.0-11.el8.aarch64.rpm",
95
+ ... "gfs2-utils-debuginfo-0:3.2.0-11.el8.x86_64.rpm",
96
+ ... "gfs2-utils-debugsource-0:3.2.0-11.el8.aarch64.rpm",
97
+ ... "gfs2-utils-debugsource-0:3.2.0-11.el8.x86_64.rpm"
93
98
... ]
94
99
... }
95
100
... },
96
101
... "fixes": [
97
- ... {"sourceLink": "http://example.com/fix", "ticket": "12345"}
102
+ ... {
103
+ ... "ticket": "1942434",
104
+ ... "sourceBy": "Red Hat",
105
+ ... "sourceLink": "https://bugzilla.redhat.com/show_bug.cgi?id=1942434",
106
+ ... "description": ""
107
+ ... }
98
108
... ],
99
109
... "cves": [
100
110
... {
101
- ... "name": "CVE-2023-1234",
102
- ... "cvss3BaseScore": "7.5",
103
- ... "cvss3ScoringVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
104
- ... "sourceLink": "http://example.com/cve"
111
+ ... "name": "CVE-2021-3487",
112
+ ... "sourceBy": "MITRE",
113
+ ... "sourceLink": "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-3487",
114
+ ... "cvss3ScoringVector": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H",
115
+ ... "cvss3BaseScore": "6.5",
116
+ ... "cwe": "CWE-20->CWE-400"
105
117
... }
106
118
... ]
107
119
... }
108
120
>>> advisory = to_advisory(advisory_data)
109
121
>>> advisory.aliases
110
- 'CVE-2023-1234 '
122
+ 'RLSA-2021:4364 '
111
123
>>> advisory.date_published.year
112
- 2023
124
+ 2021
113
125
>>> len(advisory.affected_packages)
114
- 2
126
+ 7
115
127
>>> len(advisory.references)
116
128
2
129
+ >>> advisory.weaknesses
130
+ [400, 20]
117
131
"""
132
+
118
133
aliases = advisory_data .get ("name" ) or ""
119
134
date_published = dateparser .parse (advisory_data .get ("publishedAt" , "" ))
120
135
@@ -162,20 +177,15 @@ def to_advisory(advisory_data):
162
177
continue
163
178
164
179
if "CVE" in name .upper ():
165
- severity_vector_pattern = r"CVSS:3\.1/([A-Z:/]+)"
166
180
severities = VulnerabilitySeverity (
167
181
system = severity_systems .CVSSV31 ,
168
182
value = ref .get ("cvss3BaseScore" , "" ),
169
- scoring_elements = re . findall (
170
- severity_vector_pattern , ref .get ("cvss3ScoringVector" , "" )
171
- ) ,
183
+ scoring_elements = ref . get ( "cvss3ScoringVector" , "" )
184
+ if ref .get ("cvss3ScoringVector" , "" ) != "UNKNOWN"
185
+ else "" ,
172
186
)
173
187
references .append (
174
- Reference (
175
- severities = [severities ],
176
- url = ref .get ("sourceLink" , "" ),
177
- reference_id = name ,
178
- )
188
+ Reference (severities = [severities ], url = ref .get ("sourceLink" , "" ), reference_id = name )
179
189
)
180
190
181
191
return AdvisoryData (
@@ -223,11 +233,11 @@ def get_cwes_from_rockylinux_advisory(advisory_data) -> [int]:
223
233
... "sourceLink": "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-43548",
224
234
... "cvss3ScoringVector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N",
225
235
... "cvss3BaseScore": "7.5",
226
- ... "cwe": "CWE-350 "
236
+ ... "cwe": "CWE-20 -> CWE-400 "
227
237
... }
228
238
... ]}
229
239
>>> get_cwes_from_rockylinux_advisory(advisory_data)
230
- [1321, 400, 350 ]
240
+ [400, 1321, 20 ]
231
241
>>> get_cwes_from_rockylinux_advisory({"cves": [{"name": "CVE-1234-1234","cwe": "None"}]})
232
242
[]
233
243
"""
@@ -247,4 +257,5 @@ def get_cwes_from_rockylinux_advisory(advisory_data) -> [int]:
247
257
weaknesses .append (cwe_id )
248
258
except ValueError :
249
259
logger .error ("Invalid CWE id" )
250
- return weaknesses
260
+ unique_set = set (weaknesses )
261
+ return list (unique_set )
0 commit comments