dradis-calculator_cvss 4.10.0 → 4.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. checksums.yaml +4 -4
  2. data/.github/pull_request_template.md +12 -3
  3. data/CHANGELOG.md +6 -0
  4. data/README.md +2 -2
  5. data/app/assets/javascripts/dradis/plugins/calculators/cvss/cvss.js +32 -0
  6. data/app/assets/javascripts/dradis/plugins/calculators/cvss/manifests/application.js +16 -5
  7. data/app/assets/javascripts/dradis/plugins/calculators/cvss/manifests/tylium.js +16 -5
  8. data/app/assets/javascripts/dradis/plugins/calculators/cvss/{calculator.js.coffee → v3/calculator.js.coffee} +10 -32
  9. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/calculator.js +168 -0
  10. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/app.js +435 -0
  11. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/cvss_config.js +858 -0
  12. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/cvss_details.js +18 -0
  13. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/cvss_lookup.js +275 -0
  14. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/max_composed.js +35 -0
  15. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/max_severity.js +30 -0
  16. data/app/assets/javascripts/dradis/plugins/calculators/cvss/v4/vendor/metrics.js +42 -0
  17. data/app/assets/stylesheets/dradis/plugins/calculators/cvss/manifests/application.css.scss +2 -1
  18. data/app/assets/stylesheets/dradis/plugins/calculators/cvss/manifests/tylium.scss +1 -2
  19. data/app/controllers/dradis/plugins/calculators/cvss/base_controller.rb +3 -1
  20. data/app/controllers/dradis/plugins/calculators/cvss/issues_controller.rb +35 -9
  21. data/app/models/dradis/plugins/calculators/cvss/v4.rb +89 -0
  22. data/app/views/dradis/plugins/calculators/cvss/_version_menu.html.erb +8 -0
  23. data/app/views/dradis/plugins/calculators/cvss/base/index.html.erb +9 -70
  24. data/app/views/dradis/plugins/calculators/cvss/base/v3/_base.html.erb +123 -0
  25. data/app/views/dradis/plugins/calculators/cvss/base/v3/_environmental.html.erb +192 -0
  26. data/app/views/dradis/plugins/calculators/cvss/base/v3/_index.html.erb +69 -0
  27. data/app/views/dradis/plugins/calculators/cvss/base/v3/_temporal.html.erb +67 -0
  28. data/app/views/dradis/plugins/calculators/cvss/base/v4/_base.html.erb +143 -0
  29. data/app/views/dradis/plugins/calculators/cvss/base/v4/_environmental.html.erb +220 -0
  30. data/app/views/dradis/plugins/calculators/cvss/base/v4/_index.html.erb +82 -0
  31. data/app/views/dradis/plugins/calculators/cvss/base/v4/_supplemental.html.erb +85 -0
  32. data/app/views/dradis/plugins/calculators/cvss/base/v4/_threat.html.erb +19 -0
  33. data/app/views/dradis/plugins/calculators/cvss/issues/_show-content.html.erb +21 -7
  34. data/app/views/dradis/plugins/calculators/cvss/issues/edit/_v3.html.erb +91 -0
  35. data/app/views/dradis/plugins/calculators/cvss/issues/edit/_v4.html.erb +103 -0
  36. data/app/views/dradis/plugins/calculators/cvss/issues/edit.html.erb +3 -93
  37. data/lib/dradis/plugins/calculators/cvss/gem_version.rb +1 -1
  38. metadata +34 -17
  39. data/app/assets/stylesheets/dradis/plugins/calculators/cvss/_version_switch.scss +0 -26
  40. data/app/views/dradis/plugins/calculators/cvss/_version_switch.html.erb +0 -10
  41. data/app/views/dradis/plugins/calculators/cvss/base/_base.html.erb +0 -123
  42. data/app/views/dradis/plugins/calculators/cvss/base/_environmental.html.erb +0 -192
  43. data/app/views/dradis/plugins/calculators/cvss/base/_temporal.html.erb +0 -67
  44. /data/app/assets/javascripts/dradis/plugins/calculators/cvss/{vendor → v3/vendor}/cvsscalc30.js +0 -0
  45. /data/app/assets/javascripts/dradis/plugins/calculators/cvss/{vendor → v3/vendor}/cvsscalc30_helptext.js +0 -0
  46. /data/app/assets/javascripts/dradis/plugins/calculators/cvss/{vendor → v3/vendor}/cvsscalc31.js +0 -0
  47. /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: cb1f2a2b5330bc60be4f63dfd7fbed29a14b9ea0b29dfc16ba03133fb2ca6649
4
- data.tar.gz: 5b1fa4076ba2d47cf09bd65f900681408ceddb5f9e8f50df84c0faf9aed179b1
3
+ metadata.gz: ea68a10e94cb20e0854d84fa245cfbd8cbf26f6dd3ae9c9c30602667a216856f
4
+ data.tar.gz: 2883a651f2bd078b4c707a78fd5081dd7dde1294c91bd9ac90e1ff3e0af3495e
5
5
  SHA512:
6
- metadata.gz: 2dfef75fdc527f62acb902c8d461acea6ef6e439600279024edc01065612e669a364319cce2c7bbb62e02f2134f8d736fe9892e196e65b0def5cd3ae46c0aec0
7
- data.tar.gz: 4e5fc5ffa9409ea1e7727445974f3d815d4e82cb44758b7d550c57f783f97f80232727e6305ee9890286c7c21caad5cfdd694a9d4fd23763c858bc1c5ceaa64b
6
+ metadata.gz: 97bdfdfc740b2d81b59e5082a2c89e71d261ce40613ad1692484d643c92326bf28797c3dad3aa68cb6110f25493f1403482ade15fa44c081e00699f3dd13f15a
7
+ data.tar.gz: 3725740d1aa3c93d36d10931e14cd67b755e2c75c0bb974efc9d3684d591b65dd024e01c8666f2e6e60dd66c423c68779110db876dd8e7f55e39bdc9663aedad
@@ -1,3 +1,5 @@
1
+ Please review [CONTRIBUTING.md](https://github.com/dradis/dradis-ce/blob/develop/CONTRIBUTING.md) and remove this line.
2
+
1
3
  ### Summary
2
4
 
3
5
  Provide a general description of the code changes in your pull
@@ -6,6 +8,11 @@ these bugs have open GitHub issues, be sure to tag them here as well,
6
8
  to keep the conversation linked together.
7
9
 
8
10
 
11
+ ### Testing Steps
12
+
13
+ Provide steps to test functionality, described in detail for someone not familiar with this part of the application / code base
14
+
15
+
9
16
  ### Other Information
10
17
 
11
18
  If there's anything else that's important and relevant to your pull
@@ -26,11 +33,13 @@ products, we must have the copyright associated with the entire
26
33
  codebase. Any code you create which is merged must be owned by us.
27
34
  That's not us trying to be a jerks, that's just the way it works.
28
35
 
29
- Please review the [CONTRIBUTING.md](https://github.com/dradis/dradis-ce/blob/master/CONTRIBUTING.md)
30
- file for the details.
31
-
32
36
  You can delete this section, but the following sentence needs to
33
37
  remain in the PR's description:
34
38
 
35
39
  > I assign all rights, including copyright, to any future Dradis
36
40
  > work by myself to Security Roots.
41
+
42
+ ### Check List
43
+
44
+ - [ ] Added a CHANGELOG entry
45
+ - [ ] Added specs
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ v4.12.0 (May 2024)
2
+ - Add CVSS v4 support
3
+
4
+ v4.11.0 (January 2024)
5
+ - No changes
6
+
1
7
  v4.10.0 (September 2023)
2
8
  - Update gemspec links
3
9
  - Update views for compatibility with Font Awesome 6
data/README.md CHANGED
@@ -22,12 +22,12 @@ Restart your Dradis server and you should be good to go.
22
22
 
23
23
  ## More information
24
24
 
25
- See the Dradis Framework's [README.md](https://github.com/dradis/dradisframework/blob/master/README.md)
25
+ See the Dradis Framework's [README.md](https://github.com/dradis/dradis-ce/blob/develop/README.md)
26
26
 
27
27
 
28
28
  ## Contributing
29
29
 
30
- See the Dradis Framework's [CONTRIBUTING.md](https://github.com/dradis/dradisframework/blob/master/CONTRIBUTING.md)
30
+ See the Dradis Framework's [CONTRIBUTING.md](https://github.com/dradis/dradis-ce/blob/develop/CONTRIBUTING.md)
31
31
 
32
32
 
33
33
  ## License
@@ -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
+ }