Class: Bundler::Audit::Advisory
- Inherits:
-
Struct
- Object
- Struct
- Bundler::Audit::Advisory
- Defined in:
- lib/bundler/audit/advisory.rb
Instance Attribute Summary collapse
-
#cve ⇒ Object
Returns the value of attribute cve.
-
#cvss_v2 ⇒ Object
Returns the value of attribute cvss_v2.
-
#date ⇒ Object
Returns the value of attribute date.
-
#description ⇒ Object
Returns the value of attribute description.
-
#ghsa ⇒ Object
Returns the value of attribute ghsa.
-
#id ⇒ Object
(also: #to_s)
Returns the value of attribute id.
-
#osvdb ⇒ Object
Returns the value of attribute osvdb.
-
#patched_versions ⇒ Object
Returns the value of attribute patched_versions.
-
#path ⇒ Object
Returns the value of attribute path.
-
#title ⇒ Object
Returns the value of attribute title.
-
#unaffected_versions ⇒ Object
Returns the value of attribute unaffected_versions.
-
#url ⇒ Object
Returns the value of attribute url.
Class Method Summary collapse
-
.load(path) ⇒ Advisory
Loads the advisory from a YAML file.
Instance Method Summary collapse
-
#criticality ⇒ :low, ...
Determines how critical the vulnerability is.
-
#cve_id ⇒ String?
The CVE identifier.
-
#ghsa_id ⇒ String?
The GHSA (GitHub Security Advisory) identifier.
-
#identifiers ⇒ Object
Return a compacted list of all ids.
-
#osvdb_id ⇒ String?
The OSVDB identifier.
-
#patched?(version) ⇒ Boolean
Checks whether the version is patched against the advisory.
-
#unaffected?(version) ⇒ Boolean
Checks whether the version is not affected by the advisory.
-
#vulnerable?(version) ⇒ Boolean
Checks whether the version is vulnerable to the advisory.
Instance Attribute Details
#cve ⇒ Object
Returns the value of attribute cve
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def cve @cve end |
#cvss_v2 ⇒ Object
Returns the value of attribute cvss_v2
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def cvss_v2 @cvss_v2 end |
#date ⇒ Object
Returns the value of attribute date
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def date @date end |
#description ⇒ Object
Returns the value of attribute description
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def description @description end |
#ghsa ⇒ Object
Returns the value of attribute ghsa
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def ghsa @ghsa end |
#id ⇒ Object Also known as: to_s
Returns the value of attribute id
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def id @id end |
#osvdb ⇒ Object
Returns the value of attribute osvdb
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def osvdb @osvdb end |
#patched_versions ⇒ Object
Returns the value of attribute patched_versions
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def patched_versions @patched_versions end |
#path ⇒ Object
Returns the value of attribute path
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def path @path end |
#title ⇒ Object
Returns the value of attribute title
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def title @title end |
#unaffected_versions ⇒ Object
Returns the value of attribute unaffected_versions
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def unaffected_versions @unaffected_versions end |
#url ⇒ Object
Returns the value of attribute url
22 23 24 |
# File 'lib/bundler/audit/advisory.rb', line 22 def url @url end |
Class Method Details
.load(path) ⇒ Advisory
Loads the advisory from a YAML file.
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/bundler/audit/advisory.rb', line 45 def self.load(path) id = File.basename(path).chomp('.yml') data = YAML.load_file(path) unless data.kind_of?(Hash) raise("advisory data in #{path.dump} was not a Hash") end parse_versions = lambda { |versions| Array(versions).map do |version| Gem::Requirement.new(*version.split(', ')) end } return new( path, id, data['url'], data['title'], data['date'], data['description'], data['cvss_v2'], data['cve'], data['osvdb'], data['ghsa'], parse_versions[data['unaffected_versions']], parse_versions[data['patched_versions']] ) end |
Instance Method Details
#criticality ⇒ :low, ...
Determines how critical the vulnerability is.
118 119 120 121 122 123 124 |
# File 'lib/bundler/audit/advisory.rb', line 118 def criticality case cvss_v2 when 0.0..3.3 then :low when 3.3..6.6 then :medium when 6.6..10.0 then :high end end |
#cve_id ⇒ String?
The CVE identifier.
80 81 82 |
# File 'lib/bundler/audit/advisory.rb', line 80 def cve_id "CVE-#{cve}" if cve end |
#ghsa_id ⇒ String?
The GHSA (GitHub Security Advisory) identifier
98 99 100 |
# File 'lib/bundler/audit/advisory.rb', line 98 def ghsa_id "GHSA-#{ghsa}" if ghsa end |
#identifiers ⇒ Object
Return a compacted list of all ids
104 105 106 107 108 109 110 |
# File 'lib/bundler/audit/advisory.rb', line 104 def identifiers [ cve_id, osvdb_id, ghsa_id ].compact end |
#osvdb_id ⇒ String?
The OSVDB identifier.
89 90 91 |
# File 'lib/bundler/audit/advisory.rb', line 89 def osvdb_id "OSVDB-#{osvdb}" if osvdb end |
#patched?(version) ⇒ Boolean
Checks whether the version is patched against the advisory.
154 155 156 157 158 |
# File 'lib/bundler/audit/advisory.rb', line 154 def patched?(version) patched_versions.any? do |patched_version| patched_version === version end end |
#unaffected?(version) ⇒ Boolean
Checks whether the version is not affected by the advisory.
137 138 139 140 141 |
# File 'lib/bundler/audit/advisory.rb', line 137 def unaffected?(version) unaffected_versions.any? do |unaffected_version| unaffected_version === version end end |
#vulnerable?(version) ⇒ Boolean
Checks whether the version is vulnerable to the advisory.
169 170 171 |
# File 'lib/bundler/audit/advisory.rb', line 169 def vulnerable?(version) !patched?(version) && !unaffected?(version) end |