Qualysapi fix (#146)
* moved qualysapi to branch master-update * fixing bug of qualys scan without vulnerabilities: vulnWhispererQualysVuln[1361] ERROR Could not process scan/1549159480.84792: 'severity' * change to fixed qualysapi branch * fix bug and changed to qualysapi fork master branch * updated submodule to master branch
This commit is contained in:
2
deps/qualysapi
vendored
2
deps/qualysapi
vendored
Submodule deps/qualysapi updated: ba6792e7aa...42c3b43ac1
@ -2,8 +2,8 @@ pandas==0.20.3
|
|||||||
setuptools==40.4.3
|
setuptools==40.4.3
|
||||||
pytz==2017.2
|
pytz==2017.2
|
||||||
Requests==2.18.3
|
Requests==2.18.3
|
||||||
#qualysapi==5.0.4
|
|
||||||
lxml==4.1.1
|
lxml==4.1.1
|
||||||
|
future-fstrings
|
||||||
bs4
|
bs4
|
||||||
jira
|
jira
|
||||||
bottle
|
bottle
|
||||||
|
@ -108,12 +108,15 @@ class qualysVulnScan:
|
|||||||
|
|
||||||
def process_data(self, scan_id=None):
|
def process_data(self, scan_id=None):
|
||||||
"""Downloads a file from Qualys and normalizes it"""
|
"""Downloads a file from Qualys and normalizes it"""
|
||||||
|
|
||||||
self.logger.info('Downloading scan ID: {}'.format(scan_id))
|
self.logger.info('Downloading scan ID: {}'.format(scan_id))
|
||||||
scan_report = self.qw.get_scan_details(scan_id=scan_id)
|
scan_report = self.qw.get_scan_details(scan_id=scan_id)
|
||||||
keep_columns = ['category', 'cve_id', 'cvss3_base', 'cvss3_temporal', 'cvss_base', 'cvss_temporal', 'dns', 'exploitability', 'fqdn', 'impact', 'ip', 'ip_status', 'netbios', 'os', 'pci_vuln', 'port', 'protocol', 'qid', 'results', 'severity', 'solution', 'ssl', 'threat', 'title', 'type', 'vendor_reference']
|
if not scan_report.empty:
|
||||||
scan_report = scan_report.filter(keep_columns)
|
keep_columns = ['category', 'cve_id', 'cvss3_base', 'cvss3_temporal', 'cvss_base', 'cvss_temporal', 'dns', 'exploitability', 'fqdn', 'impact', 'ip', 'ip_status', 'netbios', 'os', 'pci_vuln', 'port', 'protocol', 'qid', 'results', 'severity', 'solution', 'ssl', 'threat', 'title', 'type', 'vendor_reference']
|
||||||
scan_report['severity'] = scan_report['severity'].astype(int).astype(str)
|
scan_report = scan_report.filter(keep_columns)
|
||||||
scan_report['qid'] = scan_report['qid'].astype(int).astype(str)
|
scan_report['severity'] = scan_report['severity'].astype(int).astype(str)
|
||||||
|
scan_report['qid'] = scan_report['qid'].astype(int).astype(str)
|
||||||
|
else:
|
||||||
|
self.logger.warn('Scan ID {} has no vulnerabilities, skipping.'.format(scan_id))
|
||||||
|
return scan_report
|
||||||
|
|
||||||
return scan_report
|
return scan_report
|
||||||
|
@ -839,29 +839,32 @@ class vulnWhispererQualysVuln(vulnWhispererBase):
|
|||||||
else:
|
else:
|
||||||
self.logger.info('Processing report ID: {}'.format(report_id))
|
self.logger.info('Processing report ID: {}'.format(report_id))
|
||||||
vuln_ready = self.qualys_scan.process_data(scan_id=report_id)
|
vuln_ready = self.qualys_scan.process_data(scan_id=report_id)
|
||||||
vuln_ready['scan_name'] = scan_name
|
if not vuln_ready.empty:
|
||||||
vuln_ready['scan_reference'] = report_id
|
vuln_ready['scan_name'] = scan_name
|
||||||
vuln_ready.rename(columns=self.COLUMN_MAPPING, inplace=True)
|
vuln_ready['scan_reference'] = report_id
|
||||||
|
vuln_ready.rename(columns=self.COLUMN_MAPPING, inplace=True)
|
||||||
|
|
||||||
record_meta = (
|
record_meta = (
|
||||||
scan_name,
|
scan_name,
|
||||||
scan_reference,
|
scan_reference,
|
||||||
launched_date,
|
launched_date,
|
||||||
report_name,
|
report_name,
|
||||||
time.time(),
|
time.time(),
|
||||||
vuln_ready.shape[0],
|
vuln_ready.shape[0],
|
||||||
self.CONFIG_SECTION,
|
self.CONFIG_SECTION,
|
||||||
report_id,
|
report_id,
|
||||||
1,
|
1,
|
||||||
)
|
)
|
||||||
self.record_insert(record_meta)
|
self.record_insert(record_meta)
|
||||||
|
|
||||||
if output_format == 'json':
|
if output_format == 'json':
|
||||||
with open(relative_path_name, 'w') as f:
|
with open(relative_path_name, 'w') as f:
|
||||||
f.write(vuln_ready.to_json(orient='records', lines=True))
|
f.write(vuln_ready.to_json(orient='records', lines=True))
|
||||||
f.write('\n')
|
f.write('\n')
|
||||||
|
|
||||||
self.logger.info('Report written to {}'.format(report_name))
|
self.logger.info('Report written to {}'.format(report_name))
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
self.logger.error('Could not process {}: {}'.format(report_id, str(e)))
|
self.logger.error('Could not process {}: {}'.format(report_id, str(e)))
|
||||||
|
Reference in New Issue
Block a user