Class: CvssSuite::Cvss3Base

Inherits:
CvssMetric show all
Defined in:
lib/cvss_suite/cvss3/cvss3_base.rb

Overview

This class represents a CVSS Base metric in version 3.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from CvssMetric

#count, #initialize, #valid?

Constructor Details

This class inherits a constructor from CvssSuite::CvssMetric

Instance Attribute Details

#attack_complexityObject (readonly)

Property of this metric



22
23
24
# File 'lib/cvss_suite/cvss3/cvss3_base.rb', line 22

def attack_complexity
  @attack_complexity
end

#attack_vectorObject (readonly)

Property of this metric



22
23
24
# File 'lib/cvss_suite/cvss3/cvss3_base.rb', line 22

def attack_vector
  @attack_vector
end

#availabilityObject (readonly)

Property of this metric



22
23
24
# File 'lib/cvss_suite/cvss3/cvss3_base.rb', line 22

def availability
  @availability
end

#confidentialityObject (readonly)

Property of this metric



22
23
24
# File 'lib/cvss_suite/cvss3/cvss3_base.rb', line 22

def confidentiality
  @confidentiality
end

#integrityObject (readonly)

Property of this metric



22
23
24
# File 'lib/cvss_suite/cvss3/cvss3_base.rb', line 22

def integrity
  @integrity
end

#privileges_requiredObject (readonly)

Property of this metric



22
23
24
# File 'lib/cvss_suite/cvss3/cvss3_base.rb', line 22

def privileges_required
  @privileges_required
end

#scopeObject (readonly)

Property of this metric



22
23
24
# File 'lib/cvss_suite/cvss3/cvss3_base.rb', line 22

def scope
  @scope
end

#user_interactionObject (readonly)

Property of this metric



22
23
24
# File 'lib/cvss_suite/cvss3/cvss3_base.rb', line 22

def user_interaction
  @user_interaction
end

Instance Method Details

#scoreObject

Returns score of this metric



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/cvss_suite/cvss3/cvss3_base.rb', line 27

def score
  privilege_score = Cvss3Helper.privileges_required_score @privileges_required, @scope

  exploitability = 8.22 * @attack_vector.score * @attack_complexity.score *
                   privilege_score * @user_interaction.score

  isc_base = 1 - ((1 - @confidentiality.score) * (1 - @integrity.score) * (1 - @availability.score))

  impact_sub_score = if @scope.selected_value[:name] == 'Changed'
                       7.52 * (isc_base - 0.029) - 3.25 * (isc_base - 0.02)**15
                     else
                       6.42 * isc_base
                     end

  return 0 if impact_sub_score <= 0

  if @scope.selected_value[:name] == 'Changed'
    [10, 1.08 * (impact_sub_score + exploitability)].min
  else
    [10, impact_sub_score + exploitability].min
  end
end