vrt-cli 1.0.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/LICENSE +1 -1
- data/bin/vrt-cli +1 -2
- data/lib/vrt_cli/output.rb +13 -12
- data/lib/vrt_cli/parse.rb +4 -4
- data/lib/vrt_cli/version.rb +1 -1
- metadata +11 -130
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 12ffc1ef26c84c00647cf656c0d87fcc65e18d2cc5deb058e42b4039bab12456
|
|
4
|
+
data.tar.gz: 60db69ef74bc34439db4c92a3913427fa53c4fdf757a10e7d9c8d103e369931d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 43c0b56eecd7c0222ac982b15863a9e9b6849326b4b83515c8583fb7908c4b07fbedd73a0d1be052c3177845037c7aba47a570f43dd578fbec21ceb544df0e2d
|
|
7
|
+
data.tar.gz: e36895910e151e1229e9d66385d131e6044ecf73edd0cd6c75d42021b4110fbfb5875f531b188f334e768b7fb7486fc99c81c07dadcd46935ebd5bc07204a464
|
data/LICENSE
CHANGED
data/bin/vrt-cli
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
# frozen_string_literal: true
|
|
3
3
|
|
|
4
4
|
# Ruby internal
|
|
5
|
-
require 'pp'
|
|
6
5
|
# Project internal
|
|
7
6
|
require 'vrt_cli'
|
|
8
7
|
# External
|
|
@@ -31,7 +30,7 @@ DOCOPT
|
|
|
31
30
|
begin
|
|
32
31
|
args = Docopt.docopt(doc, version: VrtCli::VERSION)
|
|
33
32
|
Paint.mode = 0 if args['--no-color']
|
|
34
|
-
|
|
33
|
+
puts args if args['--debug']
|
|
35
34
|
vc = VrtCli::App.new
|
|
36
35
|
if args['tree']
|
|
37
36
|
vc.display_tree
|
data/lib/vrt_cli/output.rb
CHANGED
|
@@ -8,9 +8,9 @@ module VrtCli
|
|
|
8
8
|
class App
|
|
9
9
|
# Display vulnerabilities in a tree
|
|
10
10
|
def display_tree
|
|
11
|
-
VRT.get_map.structure.
|
|
11
|
+
VRT.get_map.structure.each_value do |category|
|
|
12
12
|
puts Paint[category.name, :bold]
|
|
13
|
-
category.children.
|
|
13
|
+
category.children.each_value do |subcategory|
|
|
14
14
|
if subcategory.priority
|
|
15
15
|
print ''.ljust(4) + Paint[subcategory.priority, SEVERITY[subcategory.priority]]
|
|
16
16
|
puts " #{subcategory.name}"
|
|
@@ -20,7 +20,7 @@ module VrtCli
|
|
|
20
20
|
|
|
21
21
|
next unless subcategory.children?
|
|
22
22
|
|
|
23
|
-
subcategory.children.
|
|
23
|
+
subcategory.children.each_value do |variant|
|
|
24
24
|
if variant.priority
|
|
25
25
|
print ''.ljust(8) + Paint[variant.priority, SEVERITY[variant.priority]]
|
|
26
26
|
puts " #{variant.name}"
|
|
@@ -30,32 +30,33 @@ module VrtCli
|
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
end
|
|
33
|
-
|
|
33
|
+
nil
|
|
34
34
|
end
|
|
35
35
|
|
|
36
36
|
# Sort vulnerabilities
|
|
37
|
-
# @param sortby [Symbol] Column to sort by (
|
|
38
|
-
# @param order [Symbol] Displayed in ascendant (
|
|
37
|
+
# @param sortby [Symbol] Column to sort by (`:priority`, `:category`, `:subcategory`, `:variant`)
|
|
38
|
+
# @param order [Symbol] Displayed in ascendant (`:asc`) order or descendant order (`:dsc`). Works with `sortby`.
|
|
39
39
|
def sort(sortby = :priority, order = :asc)
|
|
40
40
|
unless sortby.nil? || sortby == :nil
|
|
41
41
|
@vulnerabilities.sort! { |a, b| a[sortby].to_s <=> b[sortby].to_s }
|
|
42
42
|
@vulnerabilities.reverse! if order == :dsc
|
|
43
43
|
end
|
|
44
|
-
|
|
44
|
+
nil
|
|
45
45
|
end
|
|
46
46
|
|
|
47
47
|
# Display vulnerabilities in a simple justified table
|
|
48
|
-
#
|
|
49
|
-
#
|
|
50
|
-
#
|
|
51
|
-
#
|
|
48
|
+
#
|
|
49
|
+
# - First column: Technical severity / Priority (`:priority`)
|
|
50
|
+
# - Second column: Category (`:category`)
|
|
51
|
+
# - Third column: Sub-category / Specific vulnerability (`:subcategory`)
|
|
52
|
+
# - Fourth column: Vulnerability / Variant / Affected function (`:variant`)
|
|
52
53
|
def display_table
|
|
53
54
|
@vulnerabilities.each do |v|
|
|
54
55
|
output = "#{Paint[v[:priority].to_s, SEVERITY[v[:priority]]]} #{Paint[v[:category].ljust(44), :bold]} "
|
|
55
56
|
output += "#{v[:subcategory].ljust(55)} #{v[:variant]}"
|
|
56
57
|
puts output
|
|
57
58
|
end
|
|
58
|
-
|
|
59
|
+
nil
|
|
59
60
|
end
|
|
60
61
|
end
|
|
61
62
|
end
|
data/lib/vrt_cli/parse.rb
CHANGED
|
@@ -5,13 +5,13 @@ require 'vrt'
|
|
|
5
5
|
module VrtCli
|
|
6
6
|
# The application
|
|
7
7
|
class App
|
|
8
|
-
# @return [Array<Hash>] An array of vulnerabilities (
|
|
8
|
+
# @return [Array<Hash>] An array of vulnerabilities (`:priority`, `:category`, `:subcategory`, `:variant`)
|
|
9
9
|
def parse
|
|
10
10
|
vulns = []
|
|
11
|
-
VRT.get_map.structure.
|
|
12
|
-
category.children.
|
|
11
|
+
VRT.get_map.structure.each_value do |category|
|
|
12
|
+
category.children.each_value do |subcategory|
|
|
13
13
|
if subcategory.children?
|
|
14
|
-
subcategory.children.
|
|
14
|
+
subcategory.children.each_value do |variant|
|
|
15
15
|
priority = variant.priority || '?'
|
|
16
16
|
vuln = {
|
|
17
17
|
priority: priority,
|
data/lib/vrt_cli/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vrt-cli
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alexandre ZANNI
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: docopt
|
|
@@ -30,146 +29,28 @@ dependencies:
|
|
|
30
29
|
requirements:
|
|
31
30
|
- - "~>"
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '2.
|
|
32
|
+
version: '2.3'
|
|
34
33
|
type: :runtime
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - "~>"
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '2.
|
|
39
|
+
version: '2.3'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
41
|
name: vrt
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
44
43
|
requirements:
|
|
45
44
|
- - "~>"
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '0.
|
|
46
|
+
version: '0.13'
|
|
48
47
|
type: :runtime
|
|
49
48
|
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - "~>"
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '0.
|
|
55
|
-
- !ruby/object:Gem::Dependency
|
|
56
|
-
name: bundler
|
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
|
58
|
-
requirements:
|
|
59
|
-
- - ">="
|
|
60
|
-
- !ruby/object:Gem::Version
|
|
61
|
-
version: 2.1.0
|
|
62
|
-
- - "<"
|
|
63
|
-
- !ruby/object:Gem::Version
|
|
64
|
-
version: '2.3'
|
|
65
|
-
type: :development
|
|
66
|
-
prerelease: false
|
|
67
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
68
|
-
requirements:
|
|
69
|
-
- - ">="
|
|
70
|
-
- !ruby/object:Gem::Version
|
|
71
|
-
version: 2.1.0
|
|
72
|
-
- - "<"
|
|
73
|
-
- !ruby/object:Gem::Version
|
|
74
|
-
version: '2.3'
|
|
75
|
-
- !ruby/object:Gem::Dependency
|
|
76
|
-
name: commonmarker
|
|
77
|
-
requirement: !ruby/object:Gem::Requirement
|
|
78
|
-
requirements:
|
|
79
|
-
- - "~>"
|
|
80
|
-
- !ruby/object:Gem::Version
|
|
81
|
-
version: '0.21'
|
|
82
|
-
type: :development
|
|
83
|
-
prerelease: false
|
|
84
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
85
|
-
requirements:
|
|
86
|
-
- - "~>"
|
|
87
|
-
- !ruby/object:Gem::Version
|
|
88
|
-
version: '0.21'
|
|
89
|
-
- !ruby/object:Gem::Dependency
|
|
90
|
-
name: github-markup
|
|
91
|
-
requirement: !ruby/object:Gem::Requirement
|
|
92
|
-
requirements:
|
|
93
|
-
- - "~>"
|
|
94
|
-
- !ruby/object:Gem::Version
|
|
95
|
-
version: '3.0'
|
|
96
|
-
type: :development
|
|
97
|
-
prerelease: false
|
|
98
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
99
|
-
requirements:
|
|
100
|
-
- - "~>"
|
|
101
|
-
- !ruby/object:Gem::Version
|
|
102
|
-
version: '3.0'
|
|
103
|
-
- !ruby/object:Gem::Dependency
|
|
104
|
-
name: minitest
|
|
105
|
-
requirement: !ruby/object:Gem::Requirement
|
|
106
|
-
requirements:
|
|
107
|
-
- - "~>"
|
|
108
|
-
- !ruby/object:Gem::Version
|
|
109
|
-
version: '5.12'
|
|
110
|
-
type: :development
|
|
111
|
-
prerelease: false
|
|
112
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
113
|
-
requirements:
|
|
114
|
-
- - "~>"
|
|
115
|
-
- !ruby/object:Gem::Version
|
|
116
|
-
version: '5.12'
|
|
117
|
-
- !ruby/object:Gem::Dependency
|
|
118
|
-
name: rake
|
|
119
|
-
requirement: !ruby/object:Gem::Requirement
|
|
120
|
-
requirements:
|
|
121
|
-
- - "~>"
|
|
122
|
-
- !ruby/object:Gem::Version
|
|
123
|
-
version: '13.0'
|
|
124
|
-
type: :development
|
|
125
|
-
prerelease: false
|
|
126
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
127
|
-
requirements:
|
|
128
|
-
- - "~>"
|
|
129
|
-
- !ruby/object:Gem::Version
|
|
130
|
-
version: '13.0'
|
|
131
|
-
- !ruby/object:Gem::Dependency
|
|
132
|
-
name: redcarpet
|
|
133
|
-
requirement: !ruby/object:Gem::Requirement
|
|
134
|
-
requirements:
|
|
135
|
-
- - "~>"
|
|
136
|
-
- !ruby/object:Gem::Version
|
|
137
|
-
version: '3.5'
|
|
138
|
-
type: :development
|
|
139
|
-
prerelease: false
|
|
140
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
141
|
-
requirements:
|
|
142
|
-
- - "~>"
|
|
143
|
-
- !ruby/object:Gem::Version
|
|
144
|
-
version: '3.5'
|
|
145
|
-
- !ruby/object:Gem::Dependency
|
|
146
|
-
name: rubocop
|
|
147
|
-
requirement: !ruby/object:Gem::Requirement
|
|
148
|
-
requirements:
|
|
149
|
-
- - "~>"
|
|
150
|
-
- !ruby/object:Gem::Version
|
|
151
|
-
version: '1.12'
|
|
152
|
-
type: :development
|
|
153
|
-
prerelease: false
|
|
154
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
155
|
-
requirements:
|
|
156
|
-
- - "~>"
|
|
157
|
-
- !ruby/object:Gem::Version
|
|
158
|
-
version: '1.12'
|
|
159
|
-
- !ruby/object:Gem::Dependency
|
|
160
|
-
name: yard
|
|
161
|
-
requirement: !ruby/object:Gem::Requirement
|
|
162
|
-
requirements:
|
|
163
|
-
- - "~>"
|
|
164
|
-
- !ruby/object:Gem::Version
|
|
165
|
-
version: '0.9'
|
|
166
|
-
type: :development
|
|
167
|
-
prerelease: false
|
|
168
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
169
|
-
requirements:
|
|
170
|
-
- - "~>"
|
|
171
|
-
- !ruby/object:Gem::Version
|
|
172
|
-
version: '0.9'
|
|
53
|
+
version: '0.13'
|
|
173
54
|
description: A simple tool to visualize VRT (Vulnerability Rating Taxonomy) from the
|
|
174
55
|
CLI.
|
|
175
56
|
email: alexandre.zanni@engineer.com
|
|
@@ -196,7 +77,8 @@ metadata:
|
|
|
196
77
|
documentation_uri: https://noraj.github.io/vrt-cli/
|
|
197
78
|
homepage_uri: https://noraj.github.io/vrt-cli/
|
|
198
79
|
source_code_uri: https://github.com/noraj/vrt-cli/
|
|
199
|
-
|
|
80
|
+
funding_uri: https://github.com/sponsors/noraj
|
|
81
|
+
rubygems_mfa_required: 'true'
|
|
200
82
|
rdoc_options: []
|
|
201
83
|
require_paths:
|
|
202
84
|
- lib
|
|
@@ -204,18 +86,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
204
86
|
requirements:
|
|
205
87
|
- - ">="
|
|
206
88
|
- !ruby/object:Gem::Version
|
|
207
|
-
version: 2.
|
|
89
|
+
version: 3.2.0
|
|
208
90
|
- - "<"
|
|
209
91
|
- !ruby/object:Gem::Version
|
|
210
|
-
version: '
|
|
92
|
+
version: '5.0'
|
|
211
93
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
212
94
|
requirements:
|
|
213
95
|
- - ">="
|
|
214
96
|
- !ruby/object:Gem::Version
|
|
215
97
|
version: '0'
|
|
216
98
|
requirements: []
|
|
217
|
-
rubygems_version:
|
|
218
|
-
signing_key:
|
|
99
|
+
rubygems_version: 4.0.3
|
|
219
100
|
specification_version: 4
|
|
220
101
|
summary: A simple tool to visualize VRT (Vulnerability Rating Taxonomy) from the CLI.
|
|
221
102
|
test_files: []
|