vrt 0.7.1 → 0.11.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/lib/data/1.10.1/deprecated-node-mapping.json +200 -0
  3. data/lib/data/1.10.1/mappings/cvss_v3/cvss_v3.json +1074 -0
  4. data/lib/data/1.10.1/mappings/cvss_v3/cvss_v3.schema.json +59 -0
  5. data/lib/data/1.10.1/mappings/cwe/cwe.json +477 -0
  6. data/lib/data/1.10.1/mappings/cwe/cwe.schema.json +63 -0
  7. data/lib/data/1.10.1/mappings/remediation_advice/remediation_advice.json +1543 -0
  8. data/lib/data/1.10.1/mappings/remediation_advice/remediation_advice.schema.json +75 -0
  9. data/lib/data/1.10.1/third-party-mappings/remediation_training/secure-code-warrior-links.json +348 -0
  10. data/lib/data/1.10.1/vrt.schema.json +63 -0
  11. data/lib/data/1.10.1/vulnerability-rating-taxonomy.json +2171 -0
  12. data/lib/data/1.10/deprecated-node-mapping.json +200 -0
  13. data/lib/data/1.10/mappings/cvss_v3/cvss_v3.json +1074 -0
  14. data/lib/data/1.10/mappings/cvss_v3/cvss_v3.schema.json +59 -0
  15. data/lib/data/1.10/mappings/cwe/cwe.json +477 -0
  16. data/lib/data/1.10/mappings/cwe/cwe.schema.json +63 -0
  17. data/lib/data/1.10/mappings/remediation_advice/remediation_advice.json +1543 -0
  18. data/lib/data/1.10/mappings/remediation_advice/remediation_advice.schema.json +75 -0
  19. data/lib/data/1.10/third-party-mappings/remediation_training/secure-code-warriors-links.json +348 -0
  20. data/lib/data/1.10/vrt.schema.json +63 -0
  21. data/lib/data/1.10/vulnerability-rating-taxonomy.json +2171 -0
  22. data/lib/data/1.7.1/deprecated-node-mapping.json +149 -0
  23. data/lib/data/1.7.1/mappings/cvss_v3/cvss_v3.json +928 -0
  24. data/lib/data/1.7.1/mappings/cvss_v3/cvss_v3.schema.json +59 -0
  25. data/lib/data/1.7.1/mappings/cwe/cwe.json +441 -0
  26. data/lib/data/1.7.1/mappings/cwe/cwe.schema.json +63 -0
  27. data/lib/data/1.7.1/mappings/remediation_advice/remediation_advice.json +1354 -0
  28. data/lib/data/1.7.1/mappings/remediation_advice/remediation_advice.schema.json +75 -0
  29. data/lib/data/1.7.1/vrt.schema.json +63 -0
  30. data/lib/data/1.7.1/vulnerability-rating-taxonomy.json +1937 -0
  31. data/lib/data/1.7/deprecated-node-mapping.json +149 -0
  32. data/lib/data/1.7/mappings/cvss_v3/cvss_v3.json +861 -0
  33. data/lib/data/1.7/mappings/cvss_v3/cvss_v3.schema.json +59 -0
  34. data/lib/data/1.7/mappings/cwe/cwe.json +441 -0
  35. data/lib/data/1.7/mappings/cwe/cwe.schema.json +63 -0
  36. data/lib/data/1.7/mappings/remediation_advice/remediation_advice.json +1230 -0
  37. data/lib/data/1.7/mappings/remediation_advice/remediation_advice.schema.json +75 -0
  38. data/lib/data/1.7/vrt.schema.json +63 -0
  39. data/lib/data/1.7/vulnerability-rating-taxonomy.json +1937 -0
  40. data/lib/data/1.8/deprecated-node-mapping.json +149 -0
  41. data/lib/data/1.8/mappings/cvss_v3/cvss_v3.json +935 -0
  42. data/lib/data/1.8/mappings/cvss_v3/cvss_v3.schema.json +59 -0
  43. data/lib/data/1.8/mappings/cwe/cwe.json +453 -0
  44. data/lib/data/1.8/mappings/cwe/cwe.schema.json +63 -0
  45. data/lib/data/1.8/mappings/remediation_advice/remediation_advice.json +1381 -0
  46. data/lib/data/1.8/mappings/remediation_advice/remediation_advice.schema.json +75 -0
  47. data/lib/data/1.8/vrt.schema.json +63 -0
  48. data/lib/data/1.8/vulnerability-rating-taxonomy.json +1948 -0
  49. data/lib/data/1.9/deprecated-node-mapping.json +158 -0
  50. data/lib/data/1.9/mappings/cvss_v3/cvss_v3.json +1002 -0
  51. data/lib/data/1.9/mappings/cvss_v3/cvss_v3.schema.json +59 -0
  52. data/lib/data/1.9/mappings/cwe/cwe.json +457 -0
  53. data/lib/data/1.9/mappings/cwe/cwe.schema.json +63 -0
  54. data/lib/data/1.9/mappings/remediation_advice/remediation_advice.json +1409 -0
  55. data/lib/data/1.9/mappings/remediation_advice/remediation_advice.schema.json +75 -0
  56. data/lib/data/1.9/vrt.schema.json +63 -0
  57. data/lib/data/1.9/vulnerability-rating-taxonomy.json +2053 -0
  58. data/lib/generators/vrt/install_generator.rb +1 -1
  59. data/lib/vrt.rb +2 -0
  60. data/lib/vrt/cross_version_mapping.rb +3 -2
  61. data/lib/vrt/errors.rb +5 -0
  62. data/lib/vrt/map.rb +8 -5
  63. data/lib/vrt/mapping.rb +12 -1
  64. data/lib/vrt/version.rb +1 -1
  65. metadata +92 -32
@@ -3,7 +3,7 @@ require 'rails/generators/base'
3
3
  module Vrt
4
4
  module Generators
5
5
  class InstallGenerator < Rails::Generators::Base
6
- source_root(File.expand_path(File.dirname(__FILE__)))
6
+ source_root(File.expand_path(File.dirname(__dir__)))
7
7
  def create_initializer_file
8
8
  copy_file '../vrt.rb', 'config/initializers/vrt.rb'
9
9
  end
data/lib/vrt.rb CHANGED
@@ -6,6 +6,7 @@ require 'vrt/map'
6
6
  require 'vrt/node'
7
7
  require 'vrt/mapping'
8
8
  require 'vrt/cross_version_mapping'
9
+ require 'vrt/errors'
9
10
 
10
11
  require 'date'
11
12
  require 'json'
@@ -48,6 +49,7 @@ module VRT
48
49
  def last_updated(version = nil)
49
50
  version ||= current_version
50
51
  return @last_update[version] if @last_update[version]
52
+
51
53
  metadata = JSON.parse(json_pathname(version).read)['metadata']
52
54
  @last_update[version] = Date.parse(metadata['release_date'])
53
55
  end
@@ -5,7 +5,7 @@ module VRT
5
5
  def cross_version_category_mapping
6
6
  category_map = {}
7
7
  deprecated_node_json.each do |key, value|
8
- latest_version = value.keys.sort_by { |n| Gem::Version.new(n) }.last
8
+ latest_version = value.keys.max_by { |n| Gem::Version.new(n) }
9
9
  id_list = value[latest_version].split('.')
10
10
  cat_id = id_list[0]
11
11
  sub_id = id_list[0..1].join('.')
@@ -26,7 +26,7 @@ module VRT
26
26
  end
27
27
 
28
28
  def latest_version_for_deprecated_node(vrt_id)
29
- deprecated_node_json[vrt_id].keys.sort_by { |n| Gem::Version.new(n) }.last
29
+ deprecated_node_json[vrt_id].keys.max_by { |n| Gem::Version.new(n) }
30
30
  end
31
31
 
32
32
  def find_deprecated_node(vrt_id, new_version = nil, max_depth = 'variant')
@@ -43,6 +43,7 @@ module VRT
43
43
  else
44
44
  parent = vrt_id.split('.')[0..-2].join('.')
45
45
  return nil if parent.empty?
46
+
46
47
  find_valid_parent_node(parent, new_version, max_depth)
47
48
  end
48
49
  end
data/lib/vrt/errors.rb ADDED
@@ -0,0 +1,5 @@
1
+ module VRT
2
+ module Errors
3
+ class MappingNotFound < StandardError; end
4
+ end
5
+ end
data/lib/vrt/map.rb CHANGED
@@ -41,15 +41,20 @@ module VRT
41
41
  private
42
42
 
43
43
  def valid_identifier?(vrt_id)
44
- # At least one string of lowercase or _, plus up to 2 more with stops
45
- @_valid_identifiers[vrt_id] ||= vrt_id =~ /other|\A[a-z_\d]+(\.[a-z_\d]+){0,2}\z/
44
+ # The upstream json schema in the VRT has changed so we need to support both:
45
+ # Current: At least one string of lowercase letters or _, plus up to 2 more with stops (no digits)
46
+ # and Old: At least one string of lowercase letters, numbers, or _,
47
+ # plus up to 2 more with stops and no leading numbers
48
+ @_valid_identifiers[vrt_id] ||= vrt_id =~ /other|\A[a-z][a-z_\d]*(\.[a-z][a-z_\d]*){0,2}\z/
46
49
  end
47
50
 
48
51
  def construct_lineage(string, max_depth)
49
52
  return unless valid_identifier?(string)
53
+
50
54
  lineage = ''
51
55
  walk_node_tree(string, max_depth: max_depth) do |ids, node, level|
52
56
  return unless node
57
+
53
58
  lineage += node.name
54
59
  lineage += ' > ' unless level == ids.length
55
60
  end
@@ -79,9 +84,7 @@ module VRT
79
84
 
80
85
  def build_node(memo, vrt, parent = nil)
81
86
  node = Node.new(vrt.merge('version' => @version, 'parent' => parent))
82
- if node.children?
83
- node.children = vrt['children'].reduce({}) { |m, v| build_node(m, v, node) }
84
- end
87
+ node.children = vrt['children'].reduce({}) { |m, v| build_node(m, v, node) } if node.children?
85
88
  memo[node.id] = node
86
89
  memo
87
90
  end
data/lib/vrt/mapping.rb CHANGED
@@ -39,8 +39,9 @@ module VRT
39
39
  def load_mappings
40
40
  @mappings = {}
41
41
  VRT.versions.each do |version|
42
- filename = VRT::DIR.join(version, 'mappings', "#{@scheme}.json")
42
+ filename = mapping_file_path(version)
43
43
  next unless File.file?(filename)
44
+
44
45
  mapping = JSON.parse(File.read(filename))
45
46
  mapping['content'] = key_by_id(mapping['content'])
46
47
  @mappings[version] = mapping
@@ -48,6 +49,15 @@ module VRT
48
49
  # so this will end up as the earliest version with a mapping file
49
50
  @min_version = version
50
51
  end
52
+ raise VRT::Errors::MappingNotFound if @mappings.empty?
53
+ end
54
+
55
+ def mapping_file_path(version)
56
+ filename = VRT::DIR.join(version, 'mappings', "#{@scheme}.json")
57
+ return filename if File.file?(filename)
58
+
59
+ # Supports mappings that are nested under their scheme name e.g. `mappings/cvss/cvss.json`
60
+ VRT::DIR.join(version, 'mappings', @scheme, "#{@scheme}.json")
51
61
  end
52
62
 
53
63
  # Converts arrays to hashes keyed by the id attribute (as a symbol) for easier lookup. So
@@ -71,6 +81,7 @@ module VRT
71
81
  id_list.each do |id|
72
82
  entry = mapping[id]
73
83
  break unless entry # mapping file doesn't go this deep, return previous value
84
+
74
85
  best_guess = merge_arrays(best_guess, entry[key]) if entry[key]
75
86
  # use the children mapping for the next iteration
76
87
  mapping = entry['children'] || {}
data/lib/vrt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Vrt
2
- VERSION = '0.7.1'.freeze
2
+ VERSION = '0.11.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vrt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.1
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Barnett Klane
8
8
  - Max Schwenk
9
9
  - Adam David
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2018-11-27 00:00:00.000000000 Z
13
+ date: 2021-03-31 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: bundler
@@ -18,71 +18,71 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: '1.14'
21
+ version: '2.1'
22
22
  type: :development
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: '1.14'
28
+ version: '2.1'
29
29
  - !ruby/object:Gem::Dependency
30
- name: rake
30
+ name: pry
31
31
  requirement: !ruby/object:Gem::Requirement
32
32
  requirements:
33
- - - ">="
33
+ - - "~>"
34
34
  - !ruby/object:Gem::Version
35
- version: '0'
35
+ version: '0.11'
36
36
  type: :development
37
37
  prerelease: false
38
38
  version_requirements: !ruby/object:Gem::Requirement
39
39
  requirements:
40
- - - ">="
40
+ - - "~>"
41
41
  - !ruby/object:Gem::Version
42
- version: '0'
42
+ version: '0.11'
43
43
  - !ruby/object:Gem::Dependency
44
- name: rspec
44
+ name: rake
45
45
  requirement: !ruby/object:Gem::Requirement
46
46
  requirements:
47
- - - ">="
47
+ - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '0'
49
+ version: '12.3'
50
50
  type: :development
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
- - - ">="
54
+ - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '0'
56
+ version: '12.3'
57
57
  - !ruby/object:Gem::Dependency
58
- name: rubocop
58
+ name: rspec
59
59
  requirement: !ruby/object:Gem::Requirement
60
60
  requirements:
61
- - - '='
61
+ - - "~>"
62
62
  - !ruby/object:Gem::Version
63
- version: 0.48.1
63
+ version: '3.6'
64
64
  type: :development
65
65
  prerelease: false
66
66
  version_requirements: !ruby/object:Gem::Requirement
67
67
  requirements:
68
- - - '='
68
+ - - "~>"
69
69
  - !ruby/object:Gem::Version
70
- version: 0.48.1
70
+ version: '3.6'
71
71
  - !ruby/object:Gem::Dependency
72
- name: pry
72
+ name: rubocop
73
73
  requirement: !ruby/object:Gem::Requirement
74
74
  requirements:
75
- - - ">="
75
+ - - '='
76
76
  - !ruby/object:Gem::Version
77
- version: '0'
77
+ version: 0.56.0
78
78
  type: :development
79
79
  prerelease: false
80
80
  version_requirements: !ruby/object:Gem::Requirement
81
81
  requirements:
82
- - - ">="
82
+ - - '='
83
83
  - !ruby/object:Gem::Version
84
- version: '0'
85
- description:
84
+ version: 0.56.0
85
+ description:
86
86
  email:
87
87
  - barnett@bugcrowd.com
88
88
  - max.schwenk@bugcrowd.com
@@ -96,6 +96,26 @@ files:
96
96
  - lib/data/1.1/deprecated-node-mapping.json
97
97
  - lib/data/1.1/vrt.schema.json
98
98
  - lib/data/1.1/vulnerability-rating-taxonomy.json
99
+ - lib/data/1.10.1/deprecated-node-mapping.json
100
+ - lib/data/1.10.1/mappings/cvss_v3/cvss_v3.json
101
+ - lib/data/1.10.1/mappings/cvss_v3/cvss_v3.schema.json
102
+ - lib/data/1.10.1/mappings/cwe/cwe.json
103
+ - lib/data/1.10.1/mappings/cwe/cwe.schema.json
104
+ - lib/data/1.10.1/mappings/remediation_advice/remediation_advice.json
105
+ - lib/data/1.10.1/mappings/remediation_advice/remediation_advice.schema.json
106
+ - lib/data/1.10.1/third-party-mappings/remediation_training/secure-code-warrior-links.json
107
+ - lib/data/1.10.1/vrt.schema.json
108
+ - lib/data/1.10.1/vulnerability-rating-taxonomy.json
109
+ - lib/data/1.10/deprecated-node-mapping.json
110
+ - lib/data/1.10/mappings/cvss_v3/cvss_v3.json
111
+ - lib/data/1.10/mappings/cvss_v3/cvss_v3.schema.json
112
+ - lib/data/1.10/mappings/cwe/cwe.json
113
+ - lib/data/1.10/mappings/cwe/cwe.schema.json
114
+ - lib/data/1.10/mappings/remediation_advice/remediation_advice.json
115
+ - lib/data/1.10/mappings/remediation_advice/remediation_advice.schema.json
116
+ - lib/data/1.10/third-party-mappings/remediation_training/secure-code-warriors-links.json
117
+ - lib/data/1.10/vrt.schema.json
118
+ - lib/data/1.10/vulnerability-rating-taxonomy.json
99
119
  - lib/data/1.2/deprecated-node-mapping.json
100
120
  - lib/data/1.2/vrt.schema.json
101
121
  - lib/data/1.2/vulnerability-rating-taxonomy.json
@@ -136,10 +156,47 @@ files:
136
156
  - lib/data/1.6/mappings/remediation_advice.schema.json
137
157
  - lib/data/1.6/vrt.schema.json
138
158
  - lib/data/1.6/vulnerability-rating-taxonomy.json
159
+ - lib/data/1.7.1/deprecated-node-mapping.json
160
+ - lib/data/1.7.1/mappings/cvss_v3/cvss_v3.json
161
+ - lib/data/1.7.1/mappings/cvss_v3/cvss_v3.schema.json
162
+ - lib/data/1.7.1/mappings/cwe/cwe.json
163
+ - lib/data/1.7.1/mappings/cwe/cwe.schema.json
164
+ - lib/data/1.7.1/mappings/remediation_advice/remediation_advice.json
165
+ - lib/data/1.7.1/mappings/remediation_advice/remediation_advice.schema.json
166
+ - lib/data/1.7.1/vrt.schema.json
167
+ - lib/data/1.7.1/vulnerability-rating-taxonomy.json
168
+ - lib/data/1.7/deprecated-node-mapping.json
169
+ - lib/data/1.7/mappings/cvss_v3/cvss_v3.json
170
+ - lib/data/1.7/mappings/cvss_v3/cvss_v3.schema.json
171
+ - lib/data/1.7/mappings/cwe/cwe.json
172
+ - lib/data/1.7/mappings/cwe/cwe.schema.json
173
+ - lib/data/1.7/mappings/remediation_advice/remediation_advice.json
174
+ - lib/data/1.7/mappings/remediation_advice/remediation_advice.schema.json
175
+ - lib/data/1.7/vrt.schema.json
176
+ - lib/data/1.7/vulnerability-rating-taxonomy.json
177
+ - lib/data/1.8/deprecated-node-mapping.json
178
+ - lib/data/1.8/mappings/cvss_v3/cvss_v3.json
179
+ - lib/data/1.8/mappings/cvss_v3/cvss_v3.schema.json
180
+ - lib/data/1.8/mappings/cwe/cwe.json
181
+ - lib/data/1.8/mappings/cwe/cwe.schema.json
182
+ - lib/data/1.8/mappings/remediation_advice/remediation_advice.json
183
+ - lib/data/1.8/mappings/remediation_advice/remediation_advice.schema.json
184
+ - lib/data/1.8/vrt.schema.json
185
+ - lib/data/1.8/vulnerability-rating-taxonomy.json
186
+ - lib/data/1.9/deprecated-node-mapping.json
187
+ - lib/data/1.9/mappings/cvss_v3/cvss_v3.json
188
+ - lib/data/1.9/mappings/cvss_v3/cvss_v3.schema.json
189
+ - lib/data/1.9/mappings/cwe/cwe.json
190
+ - lib/data/1.9/mappings/cwe/cwe.schema.json
191
+ - lib/data/1.9/mappings/remediation_advice/remediation_advice.json
192
+ - lib/data/1.9/mappings/remediation_advice/remediation_advice.schema.json
193
+ - lib/data/1.9/vrt.schema.json
194
+ - lib/data/1.9/vulnerability-rating-taxonomy.json
139
195
  - lib/generators/vrt.rb
140
196
  - lib/generators/vrt/install_generator.rb
141
197
  - lib/vrt.rb
142
198
  - lib/vrt/cross_version_mapping.rb
199
+ - lib/vrt/errors.rb
143
200
  - lib/vrt/map.rb
144
201
  - lib/vrt/mapping.rb
145
202
  - lib/vrt/node.rb
@@ -147,8 +204,12 @@ files:
147
204
  homepage: https://github.com/bugcrowd/vrt-ruby
148
205
  licenses:
149
206
  - MIT
150
- metadata: {}
151
- post_install_message:
207
+ metadata:
208
+ homepage_uri: https://github.com/bugcrowd/vrt-ruby
209
+ changelog_uri: https://github.com/bugcrowd/vrt-ruby/blob/master/CHANGELOG.md
210
+ source_code_uri: https://github.com/bugcrowd/vrt-ruby
211
+ bug_tracker_uri: https://github.com/bugcrowd/vrt-ruby/issues
212
+ post_install_message:
152
213
  rdoc_options: []
153
214
  require_paths:
154
215
  - lib
@@ -156,16 +217,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
156
217
  requirements:
157
218
  - - ">="
158
219
  - !ruby/object:Gem::Version
159
- version: '0'
220
+ version: '2.4'
160
221
  required_rubygems_version: !ruby/object:Gem::Requirement
161
222
  requirements:
162
223
  - - ">="
163
224
  - !ruby/object:Gem::Version
164
225
  version: '0'
165
226
  requirements: []
166
- rubyforge_project:
167
- rubygems_version: 2.6.12
168
- signing_key:
227
+ rubygems_version: 3.1.2
228
+ signing_key:
169
229
  specification_version: 4
170
230
  summary: Ruby wrapper for Bugcrowd's Vulnerability Rating Taxonomy
171
231
  test_files: []