Skip to content

Commit 2f884cf

Browse files
committed
add parameter to whitelist detected vulnerabilities
1 parent 386a8e2 commit 2f884cf

5 files changed

Lines changed: 25 additions & 13 deletions

File tree

Rakefile

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,7 @@
11
require 'bundler/gem_tasks'
2-
task default: :spec
2+
require 'rspec/core/rake_task'
3+
require 'rubocop/rake_task'
4+
5+
RuboCop::RakeTask.new
6+
7+
task default: %i[rubocop]

bin/check-container-vulnerabilities.rb

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,16 @@ class CheckContainerVulnerabilities < Sensu::Plugin::Check::CLI
3636
short: '-t TOKEN',
3737
long: '--quayio-token TOKEN'
3838

39+
option :whitelist,
40+
description: 'Vulnerability whitelist',
41+
short: '-w WHITELIST[,WHITELIST]',
42+
long: '--whitelist WHITELIST[,WHITELIST]',
43+
default: '',
44+
proc: proc { |w| w.split(',') }
45+
3946
def run
40-
status, message = Quayio::Scanner::Check.new(config[:docker_url],
41-
config[:quayio_token]).run
47+
status, message = Quayio::Scanner::Check.new(
48+
config[:docker_url], config[:quayio_token], config[:whitelist]).run
4249

4350
if status == :ok
4451
ok message

lib/quayio/scanner/check.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33

44
module Quayio
55
module Scanner
6-
class Check < Struct.new(:docker_url, :quayio_token)
6+
class Check < Struct.new(:docker_url, :quayio_token, :whitelist)
77
def run
88
Docker.url = docker_url
99
containers = Docker::Container.all
1010
.map { |dc| dc.json['Config']['Image'] }
1111
.uniq
1212

1313
vulnerable_images = containers
14-
.map { |container| Image.new(container, quayio_token) }
14+
.map { |container| Image.new(container, quayio_token, whitelist) }
1515
.select(&:vulnerable?)
1616
.map(&:name)
1717

lib/quayio/scanner/image.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
module Quayio
55
module Scanner
6-
class Image < Struct.new(:name, :quayio_token)
6+
class Image < Struct.new(:name, :quayio_token, :whitelist)
77
RELEVANT_SEVERITIES = %w(Medium High Critical)
88

99
def vulnerable?
@@ -26,9 +26,10 @@ def scanned?
2626

2727
def high_vulnerabilities_present?
2828
raw_scan['data']['Layer']['Features'].detect do |f|
29-
f['Vulnerabilities'] &&
30-
f['Vulnerabilities']
31-
.detect { |v| RELEVANT_SEVERITIES.include?(v['Severity']) }
29+
f['Vulnerabilities'] && f['Vulnerabilities'].detect do |v|
30+
RELEVANT_SEVERITIES.include?(v['Severity']) &&
31+
!whitelist.include?(v['Name'])
32+
end
3233
end
3334
end
3435

quayio-scanner.gemspec

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
# coding: utf-8
2-
3-
lib = File.expand_path('../lib', __FILE__)
1+
lib = File.expand_path('lib', __dir__)
42
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
53
require 'quayio/scanner/version'
64

@@ -20,10 +18,11 @@ Gem::Specification.new do |spec|
2018
spec.executables = Dir.glob('bin/**/*.rb').map { |file| File.basename(file) }
2119
spec.require_paths = ['lib']
2220

23-
spec.add_dependency 'sensu-plugin', '~> 2.1'
2421
spec.add_dependency 'docker-api', '~> 1.33'
2522
spec.add_dependency 'rest-client', '~> 2.0'
23+
spec.add_dependency 'sensu-plugin', '~> 2.1'
2624
spec.add_development_dependency 'bundler', '~> 1.14'
2725
spec.add_development_dependency 'rake', '~> 10.0'
26+
spec.add_development_dependency 'rspec', '~> 3.7'
2827
spec.add_development_dependency 'rubocop', '~> 0.49'
2928
end

0 commit comments

Comments
 (0)