dradis-calculator_cvss 4.11.0 → 4.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -0
  3. data/app/assets/javascripts/dradis/plugins/calculators/cvss/cvss.js +32 -0
  4. data/app/assets/javascripts/dradis/plugins/calculators/cvss/manifests/application.js +16 -5
  5. data/app/assets/javascripts/dradis/plugins/calculators/cvss/manifests/tylium.js +16 -5
  6. data/app/assets/javascripts/dradis/plugins/calculators/cvss/{calculator.js.coffee → v3/calculator.js.coffee} +10 -32
  7. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/calculator.js +168 -0
  8. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/app.js +435 -0
  9. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/cvss_config.js +858 -0
  10. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/cvss_details.js +18 -0
  11. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/cvss_lookup.js +275 -0
  12. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/max_composed.js +35 -0
  13. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/max_severity.js +30 -0
  14. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/metrics.js +42 -0
  15. data/app/assets/stylesheets/dradis/plugins/calculators/cvss/manifests/application.css.scss +2 -1
  16. data/app/assets/stylesheets/dradis/plugins/calculators/cvss/manifests/tylium.scss +1 -2
  17. data/app/controllers/dradis/plugins/calculators/cvss/base_controller.rb +3 -1
  18. data/app/controllers/dradis/plugins/calculators/cvss/issues_controller.rb +35 -9
  19. data/app/models/dradis/plugins/calculators/cvss/v4.rb +89 -0
  20. data/app/views/dradis/plugins/calculators/cvss/_version_menu.html.erb +8 -0
  21. data/app/views/dradis/plugins/calculators/cvss/base/index.html.erb +9 -70
  22. data/app/views/dradis/plugins/calculators/cvss/base/v3/_base.html.erb +123 -0
  23. data/app/views/dradis/plugins/calculators/cvss/base/v3/_environmental.html.erb +192 -0
  24. data/app/views/dradis/plugins/calculators/cvss/base/v3/_index.html.erb +69 -0
  25. data/app/views/dradis/plugins/calculators/cvss/base/v3/_temporal.html.erb +67 -0
  26. data/app/views/dradis/plugins/calculators/cvss/base/v4/_base.html.erb +143 -0
  27. data/app/views/dradis/plugins/calculators/cvss/base/v4/_environmental.html.erb +220 -0
  28. data/app/views/dradis/plugins/calculators/cvss/base/v4/_index.html.erb +82 -0
  29. data/app/views/dradis/plugins/calculators/cvss/base/v4/_supplemental.html.erb +85 -0
  30. data/app/views/dradis/plugins/calculators/cvss/base/v4/_threat.html.erb +19 -0
  31. data/app/views/dradis/plugins/calculators/cvss/issues/_show-content.html.erb +21 -7
  32. data/app/views/dradis/plugins/calculators/cvss/issues/edit/_v3.html.erb +91 -0
  33. data/app/views/dradis/plugins/calculators/cvss/issues/edit/_v4.html.erb +103 -0
  34. data/app/views/dradis/plugins/calculators/cvss/issues/edit.html.erb +3 -93
  35. data/lib/dradis/plugins/calculators/cvss/gem_version.rb +1 -1
  36. metadata +30 -13
  37. data/app/assets/stylesheets/dradis/plugins/calculators/cvss/_version_switch.scss +0 -26
  38. data/app/views/dradis/plugins/calculators/cvss/_version_switch.html.erb +0 -10
  39. data/app/views/dradis/plugins/calculators/cvss/base/_base.html.erb +0 -123
  40. data/app/views/dradis/plugins/calculators/cvss/base/_environmental.html.erb +0 -192
  41. data/app/views/dradis/plugins/calculators/cvss/base/_temporal.html.erb +0 -67
  42. /data/app/assets/javascripts/dradis/plugins/calculators/cvss/{vendor → v3/vendor}/cvsscalc30.js +0 -0
  43. /data/app/assets/javascripts/dradis/plugins/calculators/cvss/{vendor → v3/vendor}/cvsscalc30_helptext.js +0 -0
  44. /data/app/assets/javascripts/dradis/plugins/calculators/cvss/{vendor → v3/vendor}/cvsscalc31.js +0 -0
  45. /data/app/assets/javascripts/dradis/plugins/calculators/cvss/{vendor → v3/vendor}/cvsscalc31_helptext.js +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6acd6e29e8fa4309712a19174e16c7eb93dcb274d5939b66b12dc32f415cafb
4
- data.tar.gz: 736e35f1882e65a535b27ec62854310b01ff6366107dc5daf1e2e42d5f9c365e
3
+ metadata.gz: ea68a10e94cb20e0854d84fa245cfbd8cbf26f6dd3ae9c9c30602667a216856f
4
+ data.tar.gz: 2883a651f2bd078b4c707a78fd5081dd7dde1294c91bd9ac90e1ff3e0af3495e
5
5
  SHA512:
6
- metadata.gz: 32069f876d21f11181880564be41c990e41810865e6ecd8a8553e43c37830fa18fae4925f292cca32697e734fe7b7c11896c086cd41865badeb87c3d60656d3e
7
- data.tar.gz: fa54b045f546487fc46e9f94a4109f312b3d2ae1d54da87b97ede1e588f45e948c8eea3dcbe815bb31e8208a4c519a9448f99d6bede105459726cc9b8095722f
6
+ metadata.gz: 97bdfdfc740b2d81b59e5082a2c89e71d261ce40613ad1692484d643c92326bf28797c3dad3aa68cb6110f25493f1403482ade15fa44c081e00699f3dd13f15a
7
+ data.tar.gz: 3725740d1aa3c93d36d10931e14cd67b755e2c75c0bb974efc9d3684d591b65dd024e01c8666f2e6e60dd66c423c68779110db876dd8e7f55e39bdc9663aedad
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ v4.12.0 (May 2024)
2
+ - Add CVSS v4 support
3
+
1
4
  v4.11.0 (January 2024)
2
5
  - No changes
3
6
 
@@ -0,0 +1,32 @@
1
+ $(document).on('turbolinks:load', function () {
2
+ if ($('[data-behavior~=cvss-version]').length) {
3
+ function handleVersionSelection() {
4
+ var selectedValue = $('[data-behavior~=cvss-version]').val();
5
+ $('[data-cvss-version]').addClass('d-none');
6
+ switch (selectedValue) {
7
+ case '40':
8
+ $('[data-cvss-version=4]').removeClass('d-none');
9
+ window.calculator = new CVSS40Calculator();
10
+ break;
11
+ case '31':
12
+ $('[data-cvss-version=3]').removeClass('d-none');
13
+ window.calculator = new CVSS31Calculator();
14
+ break;
15
+ case '30':
16
+ $('[data-cvss-version=3]').removeClass('d-none');
17
+ window.calculator = new CVSS30Calculator();
18
+ break;
19
+ }
20
+ }
21
+ handleVersionSelection();
22
+ $('[data-behavior~=cvss-error]').addClass('d-none');
23
+ $('[data-behavior~=cvss-buttons] button').on('click', function () {
24
+ var $this = $(this);
25
+ $this.parent().find('button').removeClass('active btn-primary');
26
+ $this.addClass('active btn-primary');
27
+ $(`input[name="${$this.attr('name')}"]`).val($this.val());
28
+ window.calculator.calculate();
29
+ });
30
+ $('[data-behavior~=cvss-version]').on('change', handleVersionSelection);
31
+ }
32
+ });
@@ -3,8 +3,19 @@
3
3
  //= require bootstrap
4
4
  //= require turbolinks
5
5
 
6
- //= require dradis/plugins/calculators/cvss/vendor/cvsscalc30
7
- //= require dradis/plugins/calculators/cvss/vendor/cvsscalc30_helptext
8
- //= require dradis/plugins/calculators/cvss/vendor/cvsscalc31
9
- //= require dradis/plugins/calculators/cvss/vendor/cvsscalc31_helptext
10
- //= require dradis/plugins/calculators/cvss/calculator
6
+ //= require dradis/plugins/calculators/cvss/v3/vendor/cvsscalc30
7
+ //= require dradis/plugins/calculators/cvss/v3/vendor/cvsscalc30_helptext
8
+ //= require dradis/plugins/calculators/cvss/v3/vendor/cvsscalc31
9
+ //= require dradis/plugins/calculators/cvss/v3/vendor/cvsscalc31_helptext
10
+ //= require dradis/plugins/calculators/cvss/v3/calculator
11
+
12
+ //= require dradis/plugins/calculators/cvss/v4/vendor/app
13
+ //= require dradis/plugins/calculators/cvss/v4/vendor/cvss_config
14
+ //= require dradis/plugins/calculators/cvss/v4/vendor/cvss_details
15
+ //= require dradis/plugins/calculators/cvss/v4/vendor/cvss_lookup
16
+ //= require dradis/plugins/calculators/cvss/v4/vendor/max_composed
17
+ //= require dradis/plugins/calculators/cvss/v4/vendor/max_severity
18
+ //= require dradis/plugins/calculators/cvss/v4/vendor/metrics
19
+ //= require dradis/plugins/calculators/cvss/v4/calculator
20
+
21
+ //= require dradis/plugins/calculators/cvss/cvss
@@ -1,5 +1,16 @@
1
- //= require dradis/plugins/calculators/cvss/vendor/cvsscalc30
2
- //= require dradis/plugins/calculators/cvss/vendor/cvsscalc30_helptext
3
- //= require dradis/plugins/calculators/cvss/vendor/cvsscalc31
4
- //= require dradis/plugins/calculators/cvss/vendor/cvsscalc31_helptext
5
- //= require dradis/plugins/calculators/cvss/calculator
1
+ //= require dradis/plugins/calculators/cvss/v3/vendor/cvsscalc30
2
+ //= require dradis/plugins/calculators/cvss/v3/vendor/cvsscalc30_helptext
3
+ //= require dradis/plugins/calculators/cvss/v3/vendor/cvsscalc31
4
+ //= require dradis/plugins/calculators/cvss/v3/vendor/cvsscalc31_helptext
5
+ //= require dradis/plugins/calculators/cvss/v3/calculator
6
+
7
+ //= require dradis/plugins/calculators/cvss/v4/vendor/app
8
+ //= require dradis/plugins/calculators/cvss/v4/vendor/cvss_config
9
+ //= require dradis/plugins/calculators/cvss/v4/vendor/cvss_details
10
+ //= require dradis/plugins/calculators/cvss/v4/vendor/cvss_lookup
11
+ //= require dradis/plugins/calculators/cvss/v4/vendor/max_composed
12
+ //= require dradis/plugins/calculators/cvss/v4/vendor/max_severity
13
+ //= require dradis/plugins/calculators/cvss/v4/vendor/metrics
14
+ //= require dradis/plugins/calculators/cvss/v4/calculator
15
+
16
+ //= require dradis/plugins/calculators/cvss/cvss
@@ -128,38 +128,16 @@ class CVSSCalculator
128
128
  $('input[type=submit]').attr('disabled', 'disabled')
129
129
  $('[data-behavior~=cvss-error]').removeClass('d-none').text(errorMessage)
130
130
 
131
- class CVSS30Calculator extends CVSSCalculator
132
- constructor: ->
133
- @calc = CVSS
134
- @cvssHelp = CVSS_Help
135
-
136
- super()
137
-
138
- class CVSS31Calculator extends CVSSCalculator
139
- constructor: ->
140
- @calc = CVSS31
141
- @cvssHelp = CVSS31_Help
142
-
143
- super()
144
-
145
- document.addEventListener "turbolinks:load", ->
146
- if $('[data-behavior~=cvss-buttons]').length
147
- if $('[data-behavior~=cvss-version-toggle]').prop('checked')
148
- window.calculator = new CVSS30Calculator()
149
- else
150
- window.calculator = new CVSS31Calculator()
131
+ class @CVSS30Calculator extends CVSSCalculator
132
+ constructor: ->
133
+ @calc = CVSS
134
+ @cvssHelp = CVSS_Help
151
135
 
152
- $('[data-behavior~=cvss-error]').addClass('d-none')
136
+ super()
153
137
 
154
- $('[data-behavior~=cvss-buttons] button').on 'click', ->
155
- $this = $(this)
156
- $this.parent().find('button').removeClass('active btn-primary')
157
- $this.addClass('active btn-primary')
158
- $("input[name=#{$this.attr('name')}]").val($this.val())
159
- window.calculator.calculate()
138
+ class @CVSS31Calculator extends CVSSCalculator
139
+ constructor: ->
140
+ @calc = CVSS31
141
+ @cvssHelp = CVSS31_Help
160
142
 
161
- $('[data-behavior~=cvss-version-toggle]').on 'change', ->
162
- if $('[data-behavior~=cvss-version-toggle]').prop('checked')
163
- window.calculator = new CVSS30Calculator()
164
- else
165
- window.calculator = new CVSS31Calculator()
143
+ super()
@@ -0,0 +1,168 @@
1
+ class CVSS4Calculator {
2
+ constructor() {
3
+ $('[data-cvss-heading], [data-cvss-option]').each(function (_, item) {
4
+ let heading, metrics, metricGroup, tooltipContent;
5
+
6
+ metrics = $(item).parents('[data-cvss-metrics]').data('cvss-metrics');
7
+ metricGroup = $(item)
8
+ .parents('[data-cvss-metric-group]')
9
+ .data('cvss-metric-group');
10
+
11
+ if ($(item).is('[data-cvss-option]')) {
12
+ let option = $(item).data('cvss-option');
13
+ heading = $(item)
14
+ .parent()
15
+ .prevAll('[data-cvss-heading]:first')
16
+ .data('cvss-heading');
17
+ tooltipContent =
18
+ cvss40Config[metrics].metric_groups[metricGroup][heading].options[
19
+ option
20
+ ].tooltip;
21
+ } else {
22
+ heading = $(item).data('cvss-heading');
23
+ tooltipContent =
24
+ cvss40Config[metrics].metric_groups[metricGroup][heading].tooltip;
25
+ }
26
+
27
+ $(item).attr('title', tooltipContent);
28
+ });
29
+ }
30
+ }
31
+
32
+ class CVSS40Calculator extends CVSS4Calculator {
33
+ constructor() {
34
+ super()
35
+
36
+ this.app = cvss_v4_app();
37
+ this.calculate();
38
+ }
39
+
40
+ calculate() {
41
+ const regex = / \(.+?\)/i;
42
+
43
+ $('input[type=submit]').attr('disabled', null);
44
+
45
+ const that = this;
46
+ $('[data-cvss-metrics] .btn-group').each(function(){
47
+ const selected = $(this).find('[data-cvss-option].active');
48
+
49
+ if (selected.length == 1) {
50
+ that.app.cvssSelected[selected.attr('name').toUpperCase()] = selected.attr('value');
51
+
52
+ const label = selected.data('cvss-option');
53
+ that.app.cvssSelectedValue[selected.attr('name').toUpperCase()] = label.replace(regex, '');
54
+ }
55
+ });
56
+
57
+ this.setResult();
58
+
59
+ return true;
60
+ }
61
+
62
+ baseVector() {
63
+ let baseVector = 'CVSS:4.0';
64
+ const that = this;
65
+
66
+ Object.keys(expectedMetricOrder).forEach(function(metric) {
67
+ if (that.app.cvssSelected[metric] && that.app.cvssSelected[metric] != 'X') {
68
+ baseVector += `/${metric}:${that.app.cvssSelected[metric]}`
69
+ }
70
+ })
71
+
72
+ return baseVector;
73
+ }
74
+
75
+ setResult() {
76
+ let issue_cvss = ''
77
+
78
+ issue_cvss += "#[CVSSv4.BaseVector]#\n"
79
+ issue_cvss += `${this.baseVector()}\n\n`
80
+ issue_cvss += "#[CVSSv4.BaseScore]#\n"
81
+ issue_cvss += `${this.app.score()}\n\n`
82
+ issue_cvss += "#[CVSSv4.BaseSeverity]#\n"
83
+ issue_cvss += `${this.app.qualScore()}\n\n`
84
+
85
+ issue_cvss += "#[CVSSv4.MacroVector]#\n";
86
+ issue_cvss += `${this.app.macroVector()}\n\n`
87
+
88
+ const that = this;
89
+ [
90
+ 'Exploitability', 'Complexity', 'VulnerableSystem', 'SubsequentSystem',
91
+ 'Exploitation', 'SecurityRequirements'
92
+ ].forEach(function(macroMetric) {
93
+ issue_cvss += "#[CVSSv4." + macroMetric + "]#\n"
94
+ issue_cvss += cvssMacroVectorValues[that.app.macroVector()[cvssMacroVectorDetails[macroMetric]]] + "\n\n"
95
+ });
96
+
97
+ issue_cvss += "#[CVSSv4.BaseExploitableAttackVector]#\n"
98
+ issue_cvss += `${this.app.cvssSelectedValue['AV']}\n\n`
99
+ issue_cvss += "#[CVSSv4.BaseExploitableAttackComplexity]#\n"
100
+ issue_cvss += `${this.app.cvssSelectedValue['AC']}\n\n`
101
+ issue_cvss += "#[CVSSv4.BaseExploitableAttackRequirements]#\n"
102
+ issue_cvss += `${this.app.cvssSelectedValue['AT']}\n\n`
103
+ issue_cvss += "#[CVSSv4.BaseExploitablePrivilegesRequired]#\n"
104
+ issue_cvss += `${this.app.cvssSelectedValue['PR']}\n\n`
105
+ issue_cvss += "#[CVSSv4.BaseExploitableUserInteraction]#\n"
106
+ issue_cvss += `${this.app.cvssSelectedValue['UI']}\n\n`
107
+ issue_cvss += "#[CVSSv4.BaseVulnerableConfidentiality]#\n"
108
+ issue_cvss += `${this.app.cvssSelectedValue['VC']}\n\n`
109
+ issue_cvss += "#[CVSSv4.BaseVulnerableIntegrity]#\n"
110
+ issue_cvss += `${this.app.cvssSelectedValue['VI']}\n\n`
111
+ issue_cvss += "#[CVSSv4.BaseVulnerableAvailability]#\n"
112
+ issue_cvss += `${this.app.cvssSelectedValue['VA']}\n\n`
113
+ issue_cvss += "#[CVSSv4.BaseSubsequentConfidentiality]#\n"
114
+ issue_cvss += `${this.app.cvssSelectedValue['SC']}\n\n`
115
+ issue_cvss += "#[CVSSv4.BaseSubsequentIntegrity]#\n"
116
+ issue_cvss += `${this.app.cvssSelectedValue['SI']}\n\n`
117
+ issue_cvss += "#[CVSSv4.BaseSubsequentAvailability]#\n"
118
+ issue_cvss += `${this.app.cvssSelectedValue['SA']}\n\n`
119
+
120
+ issue_cvss += "#[CVSSv4.SupplementalSafety]#\n"
121
+ issue_cvss += `${this.app.cvssSelectedValue['S']}\n\n`
122
+ issue_cvss += "#[CVSSv4.SupplementalAutomatable]#\n"
123
+ issue_cvss += `${this.app.cvssSelectedValue['AU']}\n\n`
124
+ issue_cvss += "#[CVSSv4.SupplementalRecovery]#\n"
125
+ issue_cvss += `${this.app.cvssSelectedValue['R']}\n\n`
126
+ issue_cvss += "#[CVSSv4.SupplementalValueDensity]#\n"
127
+ issue_cvss += `${this.app.cvssSelectedValue['V']}\n\n`
128
+ issue_cvss += "#[CVSSv4.SupplementalVulnerabilityResponseEffort]#\n"
129
+ issue_cvss += `${this.app.cvssSelectedValue['RE']}\n\n`
130
+ issue_cvss += "#[CVSSv4.SupplementalProviderUrgency]#\n"
131
+ issue_cvss += `${this.app.cvssSelectedValue['U']}\n\n`
132
+
133
+ issue_cvss += "#[CVSSv4.EnvironmentalExploitabilityAttackVector]#\n"
134
+ issue_cvss += `${this.app.cvssSelectedValue['MAV']}\n\n`
135
+ issue_cvss += "#[CVSSv4.EnvironmentalExploitabilityAttackComplexity]#\n"
136
+ issue_cvss += `${this.app.cvssSelectedValue['MAC']}\n\n`
137
+ issue_cvss += "#[CVSSv4.EnvironmentalExploitabilityAttackRequirements]#\n"
138
+ issue_cvss += `${this.app.cvssSelectedValue['MAT']}\n\n`
139
+ issue_cvss += "#[CVSSv4.EnvironmentalExploitabilityPrivilegesRequired]#\n"
140
+ issue_cvss += `${this.app.cvssSelectedValue['MPR']}\n\n`
141
+ issue_cvss += "#[CVSSv4.EnvironmentalExploitabilityUserInteraction]#\n"
142
+ issue_cvss += `${this.app.cvssSelectedValue['MUI']}\n\n`
143
+ issue_cvss += "#[CVSSv4.EnvironmentalVulnerableConfidentiality]#\n"
144
+ issue_cvss += `${this.app.cvssSelectedValue['MVC']}\n\n`
145
+ issue_cvss += "#[CVSSv4.EnvironmentalVulnerableIntegrity]#\n"
146
+ issue_cvss += `${this.app.cvssSelectedValue['MVI']}\n\n`
147
+ issue_cvss += "#[CVSSv4.EnvironmentalVulnerableAvailability]#\n"
148
+ issue_cvss += `${this.app.cvssSelectedValue['MVA']}\n\n`
149
+ issue_cvss += "#[CVSSv4.EnvironmentalSubsequentConfidentiality]#\n"
150
+ issue_cvss += `${this.app.cvssSelectedValue['MSC']}\n\n`
151
+ issue_cvss += "#[CVSSv4.EnvironmentalSubsequentIntegrity]#\n"
152
+ issue_cvss += `${this.app.cvssSelectedValue['MSI']}\n\n`
153
+ issue_cvss += "#[CVSSv4.EnvironmentalSubsequentAvailability]#\n"
154
+ issue_cvss += `${this.app.cvssSelectedValue['MSA']}\n\n`
155
+ issue_cvss += "#[CVSSv4.EnvironmentalConfidentialityRequirements]#\n"
156
+ issue_cvss += `${this.app.cvssSelectedValue['CR']}\n\n`
157
+ issue_cvss += "#[CVSSv4.EnvironmentalIntegrityRequirements]#\n"
158
+ issue_cvss += `${this.app.cvssSelectedValue['IR']}\n\n`
159
+ issue_cvss += "#[CVSSv4.EnvironmentalAvailabilityRequirements]#\n"
160
+ issue_cvss += `${this.app.cvssSelectedValue['AR']}\n\n`
161
+
162
+ issue_cvss += "#[CVSSv4.ThreatExploitMaturity]#\n"
163
+ issue_cvss += `${this.app.cvssSelectedValue['E']}\n\n`
164
+
165
+ $('[data-behavior=cvss4-result-text] textarea').val(issue_cvss)
166
+ $('[data-behavior=cvss4-result]').html(this.app.score() + ' (' + this.app.qualScore() + ')')
167
+ }
168
+ }