· 6 years ago · Jan 10, 2020, 07:16 AM
1import requests
2import datetime
3import json
4
5base_url = "https://api.msrc.microsoft.com/"
6api_key = "MY API KEY GOES HERE"
7
8#Find the cvrf_id (in the form YYYY-Month) given the CVE of interest
9def get_cvrf_id_for_cve(cve):
10 url = "{}Updates('{}')?api-version={}".format(base_url, str(cve), str(datetime.datetime.now().year))
11 headers = {'api-key': api_key}
12 response = requests.get(url, headers=headers)
13 if response.status_code == 200:
14 data = json.loads(response.content)
15 id = data["value"][0]["ID"]
16 else:
17 id = None
18 return id
19
20#get the cvrf data and extract kd's for the CVE of interest
21def get_knowledge_bases_for_cve(cve):
22 id = get_cvrf_id_for_cve(cve)
23 if id == None:
24 return []
25 url = "{}cvrf/{}?api-Version={}".format(base_url, id, str(datetime.datetime.now().year))
26 headers = {'api-key': api_key, 'Accept': 'application/json'}
27 response = requests.get(url, headers = headers)
28 data = json.loads(response.content)
29 kbs = {'KB{}'.format(kb['Description']['Value']) for vuln in data["Vulnerability"] if vuln["CVE"] == cve for kb in vuln["Remediations"]}
30 return kbs
31
32eternal_blue = 'CVE-2019-11397'
33eternal_blue_kbs = get_knowledge_bases_for_cve(eternal_blue)
34print(eternal_blue_kbs)