dradis-qualys 3.21.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +43 -46
- data/CHANGELOG.template +12 -0
- data/dradis-qualys.gemspec +1 -1
- data/lib/dradis/plugins/qualys/engine.rb +12 -0
- data/lib/dradis/plugins/qualys/field_processor.rb +19 -3
- data/lib/dradis/plugins/qualys/gem_version.rb +2 -2
- data/lib/dradis/plugins/qualys/vuln/importer.rb +103 -0
- data/lib/dradis/plugins/qualys/was/importer.rb +109 -0
- data/lib/dradis/plugins/qualys.rb +3 -1
- data/lib/dradis-qualys.rb +2 -0
- data/lib/qualys/element.rb +32 -25
- data/lib/qualys/was/qid.rb +71 -0
- data/lib/qualys/was/vulnerability.rb +68 -0
- data/lib/tasks/thorfile.rb +15 -1
- data/spec/fixtures/files/simple_was.xml +127 -0
- data/spec/qualys/{importer_spec.rb → vuln/importer_spec.rb} +10 -53
- data/spec/qualys/was/importer_spec.rb +41 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/support/spec_macros.rb +50 -0
- data/templates/element.fields +1 -0
- data/templates/element.template +4 -0
- data/templates/was-evidence.fields +6 -0
- data/templates/was-evidence.sample +44 -0
- data/templates/was-evidence.template +11 -0
- data/templates/was-issue.fields +16 -0
- data/templates/was-issue.sample +24 -0
- data/templates/was-issue.template +28 -0
- metadata +27 -11
- data/lib/dradis/plugins/qualys/importer.rb +0 -88
data/lib/tasks/thorfile.rb
CHANGED
|
@@ -14,8 +14,22 @@ class QualysTasks < Thor
|
|
|
14
14
|
|
|
15
15
|
detect_and_set_project_scope
|
|
16
16
|
|
|
17
|
-
importer = Dradis::Plugins::Qualys::Importer.new(task_options)
|
|
17
|
+
importer = Dradis::Plugins::Qualys::Vuln::Importer.new(task_options)
|
|
18
18
|
importer.import(file: file_path)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
+
desc "upload_was FILE", "upload Qualys WAS XML results"
|
|
22
|
+
def upload_was(file_path)
|
|
23
|
+
require 'config/environment'
|
|
24
|
+
|
|
25
|
+
unless File.exists?(file_path)
|
|
26
|
+
$stderr.puts "** the file [#{file_path}] does not exist"
|
|
27
|
+
exit -1
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
detect_and_set_project_scope
|
|
31
|
+
|
|
32
|
+
importer = Dradis::Plugins::Qualys::WAS::Importer.new(task_options)
|
|
33
|
+
importer.import(file: file_path)
|
|
34
|
+
end
|
|
21
35
|
end
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
|
2
|
+
<WAS_SCAN_REPORT>
|
|
3
|
+
<HEADER>
|
|
4
|
+
<NAME>Scan Report</NAME>
|
|
5
|
+
<DESCRIPTION>Vulnerabilities of all selected scans are consolidated into one report so that you can view their evolution.</DESCRIPTION>
|
|
6
|
+
<GENERATION_DATETIME>10 Nov 2021 10:00AM GMT-0500</GENERATION_DATETIME>
|
|
7
|
+
<COMPANY_INFO>
|
|
8
|
+
<NAME>Sample Company</NAME>
|
|
9
|
+
<ADDRESS>Sample Address</ADDRESS>
|
|
10
|
+
<CITY>Sample City</CITY>
|
|
11
|
+
<STATE>Sample State</STATE>
|
|
12
|
+
<COUNTRY>Sample Country</COUNTRY>
|
|
13
|
+
<ZIP_CODE>00000</ZIP_CODE>
|
|
14
|
+
</COMPANY_INFO>
|
|
15
|
+
<USER_INFO>
|
|
16
|
+
<NAME>Test User</NAME>
|
|
17
|
+
<USERNAME>test_user</USERNAME>
|
|
18
|
+
<ROLE>PC User,VM User</ROLE>
|
|
19
|
+
</USER_INFO>
|
|
20
|
+
</HEADER>
|
|
21
|
+
<FILTERS>
|
|
22
|
+
<FILTER>
|
|
23
|
+
<NAME>REMEDIATION</NAME>
|
|
24
|
+
<VALUE>Include patched findings</VALUE>
|
|
25
|
+
</FILTER>
|
|
26
|
+
<FILTER>
|
|
27
|
+
<NAME>REMEDIATION</NAME>
|
|
28
|
+
<VALUE>Show ignored findings </VALUE>
|
|
29
|
+
</FILTER>
|
|
30
|
+
</FILTERS>
|
|
31
|
+
<TARGET>
|
|
32
|
+
<SCAN>Test Scan</SCAN>
|
|
33
|
+
</TARGET>
|
|
34
|
+
<SUMMARY>
|
|
35
|
+
<GLOBAL_SUMMARY>
|
|
36
|
+
<SECURITY_RISK>High</SECURITY_RISK>
|
|
37
|
+
<VULNERABILITY>31</VULNERABILITY>
|
|
38
|
+
<SENSITIVE_CONTENT>0</SENSITIVE_CONTENT>
|
|
39
|
+
<INFORMATION_GATHERED>30</INFORMATION_GATHERED>
|
|
40
|
+
</GLOBAL_SUMMARY>
|
|
41
|
+
<SUMMARY_STATS>
|
|
42
|
+
<SUMMARY_STAT>
|
|
43
|
+
<SCAN>test Scan</SCAN>
|
|
44
|
+
<DATE>12 Oct 2021</DATE>
|
|
45
|
+
<LEVEL5>5</LEVEL5>
|
|
46
|
+
<LEVEL4>2</LEVEL4>
|
|
47
|
+
<LEVEL3>9</LEVEL3>
|
|
48
|
+
<LEVEL2>2</LEVEL2>
|
|
49
|
+
<LEVEL1>13</LEVEL1>
|
|
50
|
+
<SENSITIVE_CONTENT>0</SENSITIVE_CONTENT>
|
|
51
|
+
<INFORMATION_GATHERED>30</INFORMATION_GATHERED>
|
|
52
|
+
</SUMMARY_STAT>
|
|
53
|
+
</SUMMARY_STATS>
|
|
54
|
+
</SUMMARY>
|
|
55
|
+
<RESULTS>
|
|
56
|
+
<VULNERABILITY_LIST>
|
|
57
|
+
<VULNERABILITY>
|
|
58
|
+
<UNIQUE_ID>test-id</UNIQUE_ID>
|
|
59
|
+
<ID>1</ID>
|
|
60
|
+
<DETECTION_ID>1</DETECTION_ID>
|
|
61
|
+
<QID>6</QID>
|
|
62
|
+
<URL>http://example.com</URL>
|
|
63
|
+
<ACCESS_PATH>
|
|
64
|
+
<URL>http://example.com</URL>
|
|
65
|
+
</ACCESS_PATH>
|
|
66
|
+
<AJAX>false</AJAX>
|
|
67
|
+
<AUTHENTICATION>Not Required</AUTHENTICATION>
|
|
68
|
+
<DETECTION_DATE>21 Aug 2021 10:00PM GMT-0500</DETECTION_DATE>
|
|
69
|
+
<POTENTIAL>false</POTENTIAL>
|
|
70
|
+
<PAYLOADS>
|
|
71
|
+
<PAYLOAD>
|
|
72
|
+
<NUM>1</NUM>
|
|
73
|
+
<PAYLOAD>N/A</PAYLOAD>
|
|
74
|
+
<REQUEST>
|
|
75
|
+
<METHOD>GET</METHOD>
|
|
76
|
+
<URL>http://example.com</URL>
|
|
77
|
+
<HEADERS>
|
|
78
|
+
<HEADER>
|
|
79
|
+
<key>Host</key>
|
|
80
|
+
<value><![CDATA[ example.com ]]></value>
|
|
81
|
+
</HEADER>
|
|
82
|
+
<HEADER>
|
|
83
|
+
<key>User-Agent</key>
|
|
84
|
+
<value>user-agent</value>
|
|
85
|
+
</HEADER>
|
|
86
|
+
<HEADER>
|
|
87
|
+
<key>Accept</key>
|
|
88
|
+
<value><![CDATA[ */*
|
|
89
|
+
</HEADER>
|
|
90
|
+
</HEADERS>
|
|
91
|
+
<BODY></BODY>
|
|
92
|
+
</REQUEST>
|
|
93
|
+
<RESPONSE>
|
|
94
|
+
<CONTENTS base64="true"></CONTENTS>
|
|
95
|
+
</RESPONSE>
|
|
96
|
+
</PAYLOAD>
|
|
97
|
+
</PAYLOADS>
|
|
98
|
+
<IGNORED>false</IGNORED>
|
|
99
|
+
</VULNERABILITY>
|
|
100
|
+
</VULNERABILITY_LIST>
|
|
101
|
+
</RESULTS>
|
|
102
|
+
<GLOSSARY>
|
|
103
|
+
<QID_LIST>
|
|
104
|
+
<QID>
|
|
105
|
+
<QID>6</QID>
|
|
106
|
+
<CATEGORY>Information Gathered</CATEGORY>
|
|
107
|
+
<SEVERITY>1</SEVERITY>
|
|
108
|
+
<TITLE>DNS Host Name</TITLE>
|
|
109
|
+
<GROUP>DIAG</GROUP>
|
|
110
|
+
<DESCRIPTION>The fully qualified domain name of this host, if it was obtained from a DNS server, is displayed in the RESULT section.</DESCRIPTION>
|
|
111
|
+
<IMPACT>N/A</IMPACT>
|
|
112
|
+
<SOLUTION>N/A</SOLUTION>
|
|
113
|
+
</QID>
|
|
114
|
+
</QID_LIST>
|
|
115
|
+
</GLOSSARY>
|
|
116
|
+
<APPENDIX>
|
|
117
|
+
<WEBAPP>
|
|
118
|
+
<ID>1</ID>
|
|
119
|
+
<NAME>Test</NAME>
|
|
120
|
+
<URL>http://example.com</URL>
|
|
121
|
+
<OWNER>Test User</OWNER>
|
|
122
|
+
<SCOPE>Limit to URL hostname</SCOPE>
|
|
123
|
+
<CUSTOM_ATTRIBUTES/>
|
|
124
|
+
<TAGS/>
|
|
125
|
+
</WEBAPP>
|
|
126
|
+
</APPENDIX>
|
|
127
|
+
</WAS_SCAN_REPORT>
|
|
@@ -5,37 +5,15 @@ module Dradis::Plugins
|
|
|
5
5
|
describe 'Qualys upload plugin' do
|
|
6
6
|
before(:each) do
|
|
7
7
|
# Stub template service
|
|
8
|
-
templates_dir = File.expand_path('
|
|
8
|
+
templates_dir = File.expand_path('../../../../templates', __FILE__)
|
|
9
9
|
expect_any_instance_of(Dradis::Plugins::TemplateService)
|
|
10
10
|
.to receive(:default_templates_dir).and_return(templates_dir)
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
plugin = Dradis::Plugins::Qualys
|
|
12
|
+
stub_content_service
|
|
14
13
|
|
|
15
|
-
@
|
|
16
|
-
logger: Logger.new(STDOUT),
|
|
17
|
-
plugin: plugin
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
@importer = Dradis::Plugins::Qualys::Importer.new(
|
|
14
|
+
@importer = Dradis::Plugins::Qualys::Vuln::Importer.new(
|
|
21
15
|
content_service: @content_service
|
|
22
16
|
)
|
|
23
|
-
|
|
24
|
-
# Stub dradis-plugins methods
|
|
25
|
-
#
|
|
26
|
-
# They return their argument hashes as objects mimicking
|
|
27
|
-
# Nodes, Issues, etc
|
|
28
|
-
allow(@content_service).to receive(:create_node) do |args|
|
|
29
|
-
obj = OpenStruct.new(args)
|
|
30
|
-
obj.define_singleton_method(:set_property) { |_, __| }
|
|
31
|
-
obj
|
|
32
|
-
end
|
|
33
|
-
allow(@content_service).to receive(:create_issue) do |args|
|
|
34
|
-
OpenStruct.new(args)
|
|
35
|
-
end
|
|
36
|
-
allow(@content_service).to receive(:create_evidence) do |args|
|
|
37
|
-
OpenStruct.new(args)
|
|
38
|
-
end
|
|
39
17
|
end
|
|
40
18
|
|
|
41
19
|
let(:example_xml) { 'spec/fixtures/files/simple.xml' }
|
|
@@ -84,11 +62,12 @@ module Dradis::Plugins
|
|
|
84
62
|
expect_to_create_issue_with(
|
|
85
63
|
text: "Apache 1.3 HTTP Server Expect Header Cross-Site Scripting"
|
|
86
64
|
)
|
|
87
|
-
|
|
65
|
+
|
|
88
66
|
expect_to_create_issue_with(
|
|
89
|
-
|
|
67
|
+
text: "Apache Web Server ETag Header Information Disclosure Weakness",
|
|
68
|
+
text: "OpenBSD has released a \"patch\":ftp://ftp.openbsd.org/pub/OpenBSD/patches/3.2/common/008_httpd.patch that fixes this vulnerability. After installing the patch, inode numbers returned from the server are encoded using a private hash to avoid the release of sensitive information.\n\n\n\nCustomers"
|
|
90
69
|
)
|
|
91
|
-
|
|
70
|
+
|
|
92
71
|
run_import!
|
|
93
72
|
end
|
|
94
73
|
|
|
@@ -143,7 +122,7 @@ module Dradis::Plugins
|
|
|
143
122
|
context "when an issue has no RESULT element" do
|
|
144
123
|
#let(:example_xml) { 'spec/fixtures/files/no_result.xml' }
|
|
145
124
|
|
|
146
|
-
it "detects an issue without a RESULT element and applies (n/a)" do
|
|
125
|
+
it "detects an issue without a RESULT element and applies (n/a) and strips/replaces formatting tags" do
|
|
147
126
|
# 1 node should be created:
|
|
148
127
|
expect_to_create_node_with(label: '10.0.155.160')
|
|
149
128
|
|
|
@@ -151,7 +130,8 @@ module Dradis::Plugins
|
|
|
151
130
|
# - TCP/IP: Sequence number in both hosts
|
|
152
131
|
# Each one should create 1 issue and 1 evidence
|
|
153
132
|
expect_to_create_issue_with(
|
|
154
|
-
text: "Sequence Number Approximation Based Denial of Service"
|
|
133
|
+
text: "Sequence Number Approximation Based Denial of Service",
|
|
134
|
+
text: "Please first check the results section below for the port number on which this vulnerability was detected. If that port number is known to be used for port-forwarding, then it is the backend host that is really vulnerable.\n\n\n\nVarious implementations and products including Check Point, Cisco, Cray Inc, Hitachi, Internet Initiative Japan, Inc (IIJ), Juniper Networks, NEC, Polycom, and Yamaha are currently undergoing review. Contact the vendors to obtain more information about affected products and fixes. \"NISCC Advisory 236929 - Vulnerability Issues in TCP\":http://packetstormsecurity.org/0404-advisories/246929.html details the vendor patch status as of the time of the advisory, and identifies resolutions and workarounds."
|
|
155
135
|
)
|
|
156
136
|
|
|
157
137
|
expect_to_create_evidence_with(
|
|
@@ -163,28 +143,5 @@ module Dradis::Plugins
|
|
|
163
143
|
@importer.import(file: 'spec/fixtures/files/no_result.xml')
|
|
164
144
|
end
|
|
165
145
|
end
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
def expect_to_create_node_with(label:)
|
|
169
|
-
expect(@content_service).to receive(:create_node).with(
|
|
170
|
-
hash_including label: label
|
|
171
|
-
).once
|
|
172
|
-
end
|
|
173
|
-
|
|
174
|
-
def expect_to_create_issue_with(text:)
|
|
175
|
-
expect(@content_service).to receive(:create_issue) do |args|
|
|
176
|
-
expect(args[:text]).to include text
|
|
177
|
-
OpenStruct.new(args)
|
|
178
|
-
end.once
|
|
179
|
-
end
|
|
180
|
-
|
|
181
|
-
def expect_to_create_evidence_with(content:, issue:, node_label:)
|
|
182
|
-
expect(@content_service).to receive(:create_evidence) do |args|
|
|
183
|
-
expect(args[:content]).to include content
|
|
184
|
-
expect(args[:issue].text).to include issue
|
|
185
|
-
expect(args[:node].label).to eq node_label
|
|
186
|
-
end.once
|
|
187
|
-
end
|
|
188
|
-
|
|
189
146
|
end
|
|
190
147
|
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
require 'spec_helper'
|
|
2
|
+
require 'ostruct'
|
|
3
|
+
|
|
4
|
+
module Dradis::Plugins
|
|
5
|
+
describe 'Qualys upload plugin' do
|
|
6
|
+
before(:each) do
|
|
7
|
+
# Stub template service
|
|
8
|
+
templates_dir = File.expand_path('../../../../templates', __FILE__)
|
|
9
|
+
expect_any_instance_of(Dradis::Plugins::TemplateService)
|
|
10
|
+
.to receive(:default_templates_dir).and_return(templates_dir)
|
|
11
|
+
|
|
12
|
+
stub_content_service
|
|
13
|
+
|
|
14
|
+
@importer = Dradis::Plugins::Qualys::WAS::Importer.new(
|
|
15
|
+
content_service: @content_service
|
|
16
|
+
)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
let(:example_xml) { 'spec/fixtures/files/simple_was.xml' }
|
|
20
|
+
let(:run_import!) { @importer.import(file: example_xml) }
|
|
21
|
+
|
|
22
|
+
it 'creates nodes as needed' do
|
|
23
|
+
expect_to_create_node_with(label: 'example.com')
|
|
24
|
+
run_import!
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'creates issues as needed' do
|
|
28
|
+
expect_to_create_issue_with(text: 'DNS Host Name')
|
|
29
|
+
run_import!
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
it 'creates evidence as needed' do
|
|
33
|
+
expect_to_create_evidence_with(
|
|
34
|
+
content: 'http://example.com',
|
|
35
|
+
issue: 'DNS Host Name',
|
|
36
|
+
node_label: 'example.com'
|
|
37
|
+
)
|
|
38
|
+
run_import!
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module SpecMacros
|
|
2
|
+
extend ActiveSupport::Concern
|
|
3
|
+
|
|
4
|
+
def stub_content_service
|
|
5
|
+
# Init services
|
|
6
|
+
plugin = Dradis::Plugins::Qualys
|
|
7
|
+
|
|
8
|
+
@content_service = Dradis::Plugins::ContentService::Base.new(
|
|
9
|
+
logger: Logger.new(STDOUT),
|
|
10
|
+
plugin: plugin
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
# Stub dradis-plugins methods
|
|
14
|
+
#
|
|
15
|
+
# They return their argument hashes as objects mimicking
|
|
16
|
+
# Nodes, Issues, etc
|
|
17
|
+
allow(@content_service).to receive(:create_node) do |args|
|
|
18
|
+
obj = OpenStruct.new(args)
|
|
19
|
+
obj.define_singleton_method(:set_property) { |_, __| }
|
|
20
|
+
obj
|
|
21
|
+
end
|
|
22
|
+
allow(@content_service).to receive(:create_issue) do |args|
|
|
23
|
+
OpenStruct.new(args)
|
|
24
|
+
end
|
|
25
|
+
allow(@content_service).to receive(:create_evidence) do |args|
|
|
26
|
+
OpenStruct.new(args)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def expect_to_create_node_with(label:)
|
|
31
|
+
expect(@content_service).to receive(:create_node).with(
|
|
32
|
+
hash_including label: label
|
|
33
|
+
).once
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def expect_to_create_issue_with(text:)
|
|
37
|
+
expect(@content_service).to receive(:create_issue) do |args|
|
|
38
|
+
expect(args[:text]).to include text
|
|
39
|
+
OpenStruct.new(args)
|
|
40
|
+
end.once
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def expect_to_create_evidence_with(content:, issue:, node_label:)
|
|
44
|
+
expect(@content_service).to receive(:create_evidence) do |args|
|
|
45
|
+
expect(args[:content]).to include content
|
|
46
|
+
expect(args[:issue].text).to include issue
|
|
47
|
+
expect(args[:node].label).to eq node_label
|
|
48
|
+
end.once
|
|
49
|
+
end
|
|
50
|
+
end
|
data/templates/element.fields
CHANGED
data/templates/element.template
CHANGED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
<VULNERABILITY>
|
|
2
|
+
<UNIQUE_ID>db9bd89e-a8d8-402d-a6ca-8f6ff8be426f</UNIQUE_ID>
|
|
3
|
+
<ID>827065910</ID>
|
|
4
|
+
<DETECTION_ID>20879664</DETECTION_ID>
|
|
5
|
+
<QID>150124</QID>
|
|
6
|
+
<URL>http://demo.hackmebank.net/index.jsp?content=personal_loans.htm</URL>
|
|
7
|
+
<ACCESS_PATH>
|
|
8
|
+
<URL>http://demo.hackmebank.net/index.jsp</URL>
|
|
9
|
+
</ACCESS_PATH>
|
|
10
|
+
<AJAX>false</AJAX>
|
|
11
|
+
<AUTHENTICATION>Not Required</AUTHENTICATION>
|
|
12
|
+
<DETECTION_DATE>11 Oct 2021 07:16PM GMT-0500</DETECTION_DATE>
|
|
13
|
+
<POTENTIAL>false</POTENTIAL>
|
|
14
|
+
<PAYLOADS>
|
|
15
|
+
<PAYLOAD>
|
|
16
|
+
<NUM>1</NUM>
|
|
17
|
+
<PAYLOAD>N/A</PAYLOAD>
|
|
18
|
+
<REQUEST>
|
|
19
|
+
<METHOD>GET</METHOD>
|
|
20
|
+
<URL>http://demo.hackmebank.net/index.jsp?content=business.htm</URL>
|
|
21
|
+
<HEADERS>
|
|
22
|
+
<HEADER>
|
|
23
|
+
<key>Host</key>
|
|
24
|
+
<value><![CDATA[ demo.hackmebank.net
|
|
25
|
+
</HEADER>
|
|
26
|
+
<HEADER>
|
|
27
|
+
<key>User-Agent</key>
|
|
28
|
+
<value><![CDATA[ Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.1.1 Safari/605.1.15
|
|
29
|
+
</HEADER>
|
|
30
|
+
<HEADER>
|
|
31
|
+
<key>Accept</key>
|
|
32
|
+
<value><![CDATA[ */*
|
|
33
|
+
</HEADER>
|
|
34
|
+
</HEADERS>
|
|
35
|
+
<BODY></BODY>
|
|
36
|
+
</REQUEST>
|
|
37
|
+
<RESPONSE>
|
|
38
|
+
<CONTENTS base64="true"><![CDATA[VGhlIFVSSSB3YXMgZnJhbWVkLgo=
|
|
39
|
+
]]></CONTENTS>
|
|
40
|
+
</RESPONSE>
|
|
41
|
+
</PAYLOAD>
|
|
42
|
+
</PAYLOADS>
|
|
43
|
+
<IGNORED>false</IGNORED>
|
|
44
|
+
</VULNERABILITY>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
was-issue.category
|
|
2
|
+
was-issue.cvss_base
|
|
3
|
+
was-issue.cvss_temporal
|
|
4
|
+
was-issue.cvss3_base
|
|
5
|
+
was-issue.cvss3_temporal
|
|
6
|
+
was-issue.cvss3_vector
|
|
7
|
+
was-issue.cwe
|
|
8
|
+
was-issue.description
|
|
9
|
+
was-issue.group
|
|
10
|
+
was-issue.impact
|
|
11
|
+
was-issue.owasp
|
|
12
|
+
was-issue.qid
|
|
13
|
+
was-issue.severity
|
|
14
|
+
was-issue.solution
|
|
15
|
+
was-issue.title
|
|
16
|
+
was-issue.wasc
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<QID>
|
|
2
|
+
<QID>150001</QID>
|
|
3
|
+
<CATEGORY>Confirmed Vulnerability</CATEGORY>
|
|
4
|
+
<SEVERITY>5</SEVERITY>
|
|
5
|
+
<TITLE>Reflected Cross-Site Scripting (XSS) Vulnerabilities</TITLE>
|
|
6
|
+
<GROUP>XSS</GROUP>
|
|
7
|
+
<OWASP>A7</OWASP>
|
|
8
|
+
<WASC>WASC-8</WASC>
|
|
9
|
+
<CWE>CWE-79</CWE>
|
|
10
|
+
<CVSS_BASE>4.3</CVSS_BASE>
|
|
11
|
+
<CVSS_TEMPORAL>3.9</CVSS_TEMPORAL>
|
|
12
|
+
<CVSS_V3>
|
|
13
|
+
<BASE>6.1</BASE>
|
|
14
|
+
<TEMPORAL>5.8</TEMPORAL>
|
|
15
|
+
<ATTACK_VECTOR>Network</ATTACK_VECTOR>
|
|
16
|
+
</CVSS_V3>
|
|
17
|
+
<DESCRIPTION><![CDATA[XSS vulnerabilities occur when the Web application echoes user-supplied data in an HTML response sent to the Web browser. For example, a Web application might include the user's name as part of a welcome message or display a home address when confirming a shipping destination. If the user-supplied data contain characters that are interpreted as part of an HTML element instead of literal text, then an attacker can modify the HTML that is received by the victim's Web browser.
|
|
18
|
+
<P>
|
|
19
|
+
The XSS payload is echoed in HTML document returned by the request. An XSS payload may consist of HTML, JavaScript or other content that will be rendered by the browser. In order to exploit this vulnerability, a malicious user would need to trick a victim into visiting the URL with the XSS payload.]]></DESCRIPTION>
|
|
20
|
+
<IMPACT>XSS exploits pose a significant threat to a Web application, its users and user data. XSS exploits target the users of a Web application rather than the Web application itself. An exploit can lead to theft of the user's credentials and personal or financial information. Complex exploits and attack scenarios are possible via XSS because it enables an attacker to execute dynamic code. Consequently, any capability or feature available to the Web browser (for example HTML, JavaScript, Flash and Java applets) can be used to as a part of a compromise.</IMPACT>
|
|
21
|
+
<SOLUTION><![CDATA[Filter all data collected from the client including user-supplied content and browser content such as Referrer and User-Agent headers.
|
|
22
|
+
<P>
|
|
23
|
+
Any data collected from the client and displayed in a Web page should be HTML-encoded to ensure the content is rendered as text instead of an HTML element or JavaScript.]]></SOLUTION>
|
|
24
|
+
</QID>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#[Title]#
|
|
2
|
+
%was-issue.title%
|
|
3
|
+
|
|
4
|
+
#[Severity]#
|
|
5
|
+
%was-issue.severity%
|
|
6
|
+
|
|
7
|
+
#[Categories]#
|
|
8
|
+
Category: %was-issue.category%
|
|
9
|
+
Group: %was-issue.group%
|
|
10
|
+
OWASP: %was-issue.owasp%
|
|
11
|
+
CWE: %was-issue.cwe%
|
|
12
|
+
|
|
13
|
+
#[CVSSv3.Vector]#
|
|
14
|
+
%was-issue.cvss3_vector%
|
|
15
|
+
|
|
16
|
+
#[CVSSv3.BaseScore]#
|
|
17
|
+
%was-issue.cvss3_base%
|
|
18
|
+
|
|
19
|
+
#[CVSSv3.TemporalScore]#
|
|
20
|
+
%was-issue.cvss3_temporal%
|
|
21
|
+
|
|
22
|
+
#[Description]#
|
|
23
|
+
%was-issue.description%
|
|
24
|
+
|
|
25
|
+
%was-issue.impact%
|
|
26
|
+
|
|
27
|
+
#[Solution]#
|
|
28
|
+
%was-issue.solution%
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: dradis-qualys
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 4.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Daniel Martin
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2022-02-14 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: dradis-plugins
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
19
|
+
version: '4.0'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
26
|
+
version: '4.0'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: nokogiri
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -107,6 +107,7 @@ files:
|
|
|
107
107
|
- ".gitignore"
|
|
108
108
|
- ".rspec"
|
|
109
109
|
- CHANGELOG.md
|
|
110
|
+
- CHANGELOG.template
|
|
110
111
|
- CONTRIBUTING.md
|
|
111
112
|
- Gemfile
|
|
112
113
|
- LICENSE
|
|
@@ -118,28 +119,40 @@ files:
|
|
|
118
119
|
- lib/dradis/plugins/qualys/engine.rb
|
|
119
120
|
- lib/dradis/plugins/qualys/field_processor.rb
|
|
120
121
|
- lib/dradis/plugins/qualys/gem_version.rb
|
|
121
|
-
- lib/dradis/plugins/qualys/importer.rb
|
|
122
122
|
- lib/dradis/plugins/qualys/version.rb
|
|
123
|
+
- lib/dradis/plugins/qualys/vuln/importer.rb
|
|
124
|
+
- lib/dradis/plugins/qualys/was/importer.rb
|
|
123
125
|
- lib/qualys/element.rb
|
|
126
|
+
- lib/qualys/was/qid.rb
|
|
127
|
+
- lib/qualys/was/vulnerability.rb
|
|
124
128
|
- lib/tasks/thorfile.rb
|
|
125
129
|
- spec/.keep
|
|
126
130
|
- spec/fixtures/files/no_result.xml
|
|
127
131
|
- spec/fixtures/files/simple.xml
|
|
132
|
+
- spec/fixtures/files/simple_was.xml
|
|
128
133
|
- spec/fixtures/files/two_hosts_common_issue.xml
|
|
129
134
|
- spec/qualys/element_spec.rb
|
|
130
|
-
- spec/qualys/importer_spec.rb
|
|
135
|
+
- spec/qualys/vuln/importer_spec.rb
|
|
136
|
+
- spec/qualys/was/importer_spec.rb
|
|
131
137
|
- spec/spec_helper.rb
|
|
138
|
+
- spec/support/spec_macros.rb
|
|
132
139
|
- templates/element.fields
|
|
133
140
|
- templates/element.sample
|
|
134
141
|
- templates/element.template
|
|
135
142
|
- templates/evidence.fields
|
|
136
143
|
- templates/evidence.sample
|
|
137
144
|
- templates/evidence.template
|
|
145
|
+
- templates/was-evidence.fields
|
|
146
|
+
- templates/was-evidence.sample
|
|
147
|
+
- templates/was-evidence.template
|
|
148
|
+
- templates/was-issue.fields
|
|
149
|
+
- templates/was-issue.sample
|
|
150
|
+
- templates/was-issue.template
|
|
138
151
|
homepage: http://dradisframework.org
|
|
139
152
|
licenses:
|
|
140
153
|
- GPL-2
|
|
141
154
|
metadata: {}
|
|
142
|
-
post_install_message:
|
|
155
|
+
post_install_message:
|
|
143
156
|
rdoc_options: []
|
|
144
157
|
require_paths:
|
|
145
158
|
- lib
|
|
@@ -154,15 +167,18 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
154
167
|
- !ruby/object:Gem::Version
|
|
155
168
|
version: '0'
|
|
156
169
|
requirements: []
|
|
157
|
-
rubygems_version: 3.
|
|
158
|
-
signing_key:
|
|
170
|
+
rubygems_version: 3.1.4
|
|
171
|
+
signing_key:
|
|
159
172
|
specification_version: 4
|
|
160
173
|
summary: Qualys add-on for the Dradis Framework.
|
|
161
174
|
test_files:
|
|
162
175
|
- spec/.keep
|
|
163
176
|
- spec/fixtures/files/no_result.xml
|
|
164
177
|
- spec/fixtures/files/simple.xml
|
|
178
|
+
- spec/fixtures/files/simple_was.xml
|
|
165
179
|
- spec/fixtures/files/two_hosts_common_issue.xml
|
|
166
180
|
- spec/qualys/element_spec.rb
|
|
167
|
-
- spec/qualys/importer_spec.rb
|
|
181
|
+
- spec/qualys/vuln/importer_spec.rb
|
|
182
|
+
- spec/qualys/was/importer_spec.rb
|
|
168
183
|
- spec/spec_helper.rb
|
|
184
|
+
- spec/support/spec_macros.rb
|