bundler-audit 0.3.0 → 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.travis.yml +1 -0
  4. data/ChangeLog.md +10 -0
  5. data/README.md +5 -1
  6. data/Rakefile +8 -0
  7. data/data/ruby-advisory-db.ts +1 -0
  8. data/data/ruby-advisory-db/CONTRIBUTORS.md +9 -0
  9. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100524.yml +20 -0
  10. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100525.yml +21 -0
  11. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100526.yml +27 -0
  12. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100527.yml +24 -0
  13. data/data/ruby-advisory-db/gems/actionpack/OSVDB-100528.yml +22 -0
  14. data/data/ruby-advisory-db/gems/actionpack/OSVDB-103439.yml +24 -0
  15. data/data/ruby-advisory-db/gems/actionpack/OSVDB-103440.yml +22 -0
  16. data/data/ruby-advisory-db/gems/activerecord/OSVDB-103438.yml +23 -0
  17. data/data/ruby-advisory-db/gems/arabic-prawn/OSVDB-104365.yml +15 -0
  18. data/data/ruby-advisory-db/gems/cocaine/OSVDB-98835.yml +2 -2
  19. data/data/ruby-advisory-db/gems/crack/OSVDB-90742.yml +1 -1
  20. data/data/ruby-advisory-db/gems/curl/OSVDB-91230.yml +1 -1
  21. data/data/ruby-advisory-db/gems/echor/OSVDB-102129.yml +11 -0
  22. data/data/ruby-advisory-db/gems/echor/OSVDB-102130.yml +10 -0
  23. data/data/ruby-advisory-db/gems/gitlab-grit/OSVDB-99370.yml +14 -0
  24. data/data/ruby-advisory-db/gems/httparty/OSVDB-90741.yml +3 -8
  25. data/data/ruby-advisory-db/gems/i18n/OSVDB-100528.yml +17 -0
  26. data/data/ruby-advisory-db/gems/nokogiri/OSVDB-101179.yml +12 -0
  27. data/data/ruby-advisory-db/gems/nokogiri/OSVDB-101458.yml +15 -0
  28. data/data/ruby-advisory-db/gems/nori/OSVDB-90196.yml +1 -1
  29. data/data/ruby-advisory-db/gems/omniauth-facebook/OSVDB-99693.yml +22 -0
  30. data/data/ruby-advisory-db/gems/omniauth-facebook/OSVDB-99888.yml +17 -0
  31. data/data/ruby-advisory-db/gems/paperclip/OSVDB-103151.yml +13 -0
  32. data/data/ruby-advisory-db/gems/paratrooper-newrelic/OSVDB-101839.yml +12 -0
  33. data/data/ruby-advisory-db/gems/paratrooper-pingdom/OSVDB-101847.yml +13 -0
  34. data/data/ruby-advisory-db/gems/rack/OSVDB-89939.yml +1 -1
  35. data/data/ruby-advisory-db/gems/rbovirt/OSVDB-104080.yml +20 -0
  36. data/data/ruby-advisory-db/gems/rgpg/OSVDB-95948.yml +2 -1
  37. data/data/ruby-advisory-db/gems/sfpagent/OSVDB-105971.yml +13 -0
  38. data/data/ruby-advisory-db/gems/spree/OSVDB-91216.yml +3 -2
  39. data/data/ruby-advisory-db/gems/spree/OSVDB-91217.yml +3 -2
  40. data/data/ruby-advisory-db/gems/spree/OSVDB-91218.yml +3 -2
  41. data/data/ruby-advisory-db/gems/spree/OSVDB-91219.yml +3 -2
  42. data/data/ruby-advisory-db/gems/sprout/OSVDB-100598.yml +14 -0
  43. data/data/ruby-advisory-db/gems/webbynode/OSVDB-100920.yml +11 -0
  44. data/data/ruby-advisory-db/gems/will_paginate/OSVDB-101138.yml +15 -0
  45. data/data/ruby-advisory-db/spec/advisory_example.rb +3 -3
  46. data/data/ruby-advisory-db/spec/gems_spec.rb +3 -4
  47. data/gemspec.yml +1 -0
  48. data/lib/bundler/audit.rb +1 -1
  49. data/lib/bundler/audit/advisory.rb +1 -1
  50. data/lib/bundler/audit/cli.rb +5 -4
  51. data/lib/bundler/audit/database.rb +6 -3
  52. data/lib/bundler/audit/version.rb +2 -2
  53. data/spec/advisory_spec.rb +27 -2
  54. data/spec/bundle/secure/Gemfile +1 -1
  55. data/spec/database_spec.rb +58 -1
  56. data/spec/fixtures/not_a_hash.yml +2 -0
  57. data/spec/integration_spec.rb +10 -69
  58. data/spec/spec_helper.rb +40 -0
  59. metadata +44 -3
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rails', '3.2.15'
3
+ gem 'rails', '~> 3.2.17'
4
4
 
5
5
  # Bundle edge Rails instead:
6
6
  # gem 'rails', :git => 'git://github.com/rails/rails.git'
@@ -3,12 +3,52 @@ require 'bundler/audit/database'
3
3
  require 'tmpdir'
4
4
 
5
5
  describe Bundler::Audit::Database do
6
+ let(:vendored_advisories) do
7
+ Dir[File.join(Bundler::Audit::Database::VENDORED_PATH, '**/*.yml')].sort
8
+ end
9
+
6
10
  describe "path" do
7
11
  subject { described_class.path }
8
12
 
9
13
  it "it should be a directory" do
10
14
  File.directory?(subject).should be_true
11
15
  end
16
+
17
+ it "should prefer the user repo, iff it's as up to date, or more up to date than the vendored one" do
18
+ Bundler::Audit::Database.update!
19
+
20
+ Dir.chdir(Bundler::Audit::Database::USER_PATH) do
21
+ puts "Timestamp:"
22
+ system 'git log --pretty="%cd" -1'
23
+ end
24
+
25
+ # As up to date...
26
+ expect(Bundler::Audit::Database.path).to eq mocked_user_path
27
+
28
+ # More up to date...
29
+ fake_a_commit_in_the_user_repo
30
+ expect(Bundler::Audit::Database.path).to eq mocked_user_path
31
+
32
+ roll_user_repo_back(20)
33
+ expect(Bundler::Audit::Database.path).to eq Bundler::Audit::Database::VENDORED_PATH
34
+ end
35
+ end
36
+
37
+ describe "update!" do
38
+ it "should create the USER_PATH path as needed" do
39
+ Bundler::Audit::Database.update!
40
+ expect(File.directory?(mocked_user_path)).to be true
41
+ end
42
+
43
+ it "should create the repo, then update it given multple successive calls." do
44
+ expect_update_to_clone_repo!
45
+ Bundler::Audit::Database.update!
46
+ expect(File.directory?(mocked_user_path)).to be true
47
+
48
+ expect_update_to_update_repo!
49
+ Bundler::Audit::Database.update!
50
+ expect(File.directory?(mocked_user_path)).to be true
51
+ end
12
52
  end
13
53
 
14
54
  describe "#initialize" do
@@ -70,7 +110,18 @@ describe Bundler::Audit::Database do
70
110
  end
71
111
 
72
112
  describe "#size" do
73
- it { subject.size.should > 0 }
113
+ it { expect(subject.size).to eq vendored_advisories.count }
114
+ end
115
+
116
+ describe "#advisories" do
117
+ it "should return a list of all advisories." do
118
+ actual_advisories = Bundler::Audit::Database.new.
119
+ advisories.
120
+ map(&:path).
121
+ sort
122
+
123
+ expect(actual_advisories).to eq vendored_advisories
124
+ end
74
125
  end
75
126
 
76
127
  describe "#to_s" do
@@ -78,4 +129,10 @@ describe Bundler::Audit::Database do
78
129
  subject.to_s.should == subject.path
79
130
  end
80
131
  end
132
+
133
+ describe "#inspect" do
134
+ it "should produce a Ruby-ish instance descriptor" do
135
+ expect(Bundler::Audit::Database.new.inspect).to eq("#<Bundler::Audit::Database:#{Bundler::Audit::Database::VENDORED_PATH}>")
136
+ end
137
+ end
81
138
  end
@@ -0,0 +1,2 @@
1
+ ---
2
+ "Just a string."
@@ -20,75 +20,16 @@ describe "CLI" do
20
20
  end
21
21
 
22
22
  it "should print advisory information for the vulnerable gems" do
23
- expect = %{
24
- Name: actionmailer
25
- Version: 3.2.10
26
- Advisory: OSVDB-98629
27
- Criticality: Medium
28
- URL: http://www.osvdb.org/show/osvdb/98629
29
- Title: Action Mailer Gem for Ruby contains a possible DoS Vulnerability
30
- Solution: upgrade to >= 3.2.15
31
-
32
- Name: actionpack
33
- Version: 3.2.10
34
- Advisory: OSVDB-91452
35
- Criticality: Medium
36
- URL: http://www.osvdb.org/show/osvdb/91452
37
- Title: XSS vulnerability in sanitize_css in Action Pack
38
- Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
39
-
40
- Name: actionpack
41
- Version: 3.2.10
42
- Advisory: OSVDB-91454
43
- Criticality: Medium
44
- URL: http://osvdb.org/show/osvdb/91454
45
- Title: XSS Vulnerability in the `sanitize` helper of Ruby on Rails
46
- Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
47
-
48
- Name: actionpack
49
- Version: 3.2.10
50
- Advisory: OSVDB-89026
51
- Criticality: High
52
- URL: http://osvdb.org/show/osvdb/89026
53
- Title: Ruby on Rails params_parser.rb Action Pack Type Casting Parameter Parsing Remote Code Execution
54
- Solution: upgrade to ~> 2.3.15, ~> 3.0.19, ~> 3.1.10, >= 3.2.11
55
-
56
- Name: activerecord
57
- Version: 3.2.10
58
- Advisory: OSVDB-91453
59
- Criticality: High
60
- URL: http://osvdb.org/show/osvdb/91453
61
- Title: Symbol DoS vulnerability in Active Record
62
- Solution: upgrade to ~> 2.3.18, ~> 3.1.12, >= 3.2.13
63
-
64
- Name: activerecord
65
- Version: 3.2.10
66
- Advisory: OSVDB-90072
67
- Criticality: Medium
68
- URL: http://direct.osvdb.org/show/osvdb/90072
69
- Title: Ruby on Rails Active Record attr_protected Method Bypass
70
- Solution: upgrade to ~> 2.3.17, ~> 3.1.11, >= 3.2.12
71
-
72
- Name: activerecord
73
- Version: 3.2.10
74
- Advisory: OSVDB-89025
75
- Criticality: High
76
- URL: http://osvdb.org/show/osvdb/89025
77
- Title: Ruby on Rails Active Record JSON Parameter Parsing Query Bypass
78
- Solution: upgrade to ~> 2.3.16, ~> 3.0.19, ~> 3.1.10, >= 3.2.11
79
-
80
- Name: activesupport
81
- Version: 3.2.10
82
- Advisory: OSVDB-91451
83
- Criticality: High
84
- URL: http://www.osvdb.org/show/osvdb/91451
85
- Title: XML Parsing Vulnerability affecting JRuby users
86
- Solution: upgrade to ~> 3.1.12, >= 3.2.13
87
-
88
- Unpatched versions found!
89
- }.strip.split "\n\n"
90
-
91
- subject.strip.split("\n\n").should =~ expect
23
+ advisory_pattern = /(Name: [^\n]+
24
+ Version: \d+.\d+.\d+
25
+ Advisory: OSVDB-\d+
26
+ Criticality: (High|Medium)
27
+ URL: http:\/\/(direct|www\.)?osvdb.org\/show\/osvdb\/\d+
28
+ Title: [^\n]*?
29
+ Solution: upgrade to ((~>|=>) \d+.\d+.\d+, )*(~>|=>) \d+.\d+.\d+[\s\n]*?)+/
30
+
31
+ expect(subject).to match(advisory_pattern)
32
+ expect(subject).to include("Unpatched versions found!")
92
33
  end
93
34
  end
94
35
 
@@ -13,6 +13,46 @@ module Helpers
13
13
  def decolorize(string)
14
14
  string.gsub(/\e\[\d+m/, "")
15
15
  end
16
+
17
+ def mocked_user_path
18
+ File.expand_path('../../tmp/ruby-advisory-db', __FILE__)
19
+ end
20
+
21
+ def expect_update_to_clone_repo!
22
+ Bundler::Audit::Database.
23
+ should_receive(:system).
24
+ with('git', 'clone', Bundler::Audit::Database::VENDORED_PATH, mocked_user_path).
25
+ and_call_original
26
+ end
27
+
28
+ def expect_update_to_update_repo!
29
+ Bundler::Audit::Database.
30
+ should_receive(:system).
31
+ with('git', 'pull', 'origin', 'master').
32
+ and_call_original
33
+ end
34
+
35
+ def fake_a_commit_in_the_user_repo
36
+ Dir.chdir(mocked_user_path) do
37
+ system 'git', 'commit', '--allow-empty', '-m', 'Dummy commit.'
38
+ end
39
+ end
40
+
41
+ def roll_user_repo_back(num_commits)
42
+ Dir.chdir(mocked_user_path) do
43
+ system 'git', 'reset', '--hard', "HEAD~#{num_commits}"
44
+ end
45
+ end
16
46
  end
17
47
 
18
48
  include Bundler::Audit
49
+
50
+ RSpec.configure do |config|
51
+ include Helpers
52
+
53
+ config.before(:each) do
54
+ stub_const("Bundler::Audit::Database::URL", Bundler::Audit::Database::VENDORED_PATH)
55
+ stub_const("Bundler::Audit::Database::USER_PATH", mocked_user_path)
56
+ FileUtils.rm_rf(mocked_user_path) if File.exist?(mocked_user_path)
57
+ end
58
+ end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundler-audit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-01 00:00:00.000000000 Z
11
+ date: 2014-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: thor
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '0.18'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '0.18'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -47,6 +61,7 @@ files:
47
61
  - Rakefile
48
62
  - bin/bundle-audit
49
63
  - bundler-audit.gemspec
64
+ - data/ruby-advisory-db.ts
50
65
  - gemspec.yml
51
66
  - lib/bundler/audit.rb
52
67
  - lib/bundler/audit/advisory.rb
@@ -60,6 +75,7 @@ files:
60
75
  - spec/bundle/secure/Gemfile
61
76
  - spec/bundle/unpatched_gems/Gemfile
62
77
  - spec/database_spec.rb
78
+ - spec/fixtures/not_a_hash.yml
63
79
  - spec/integration_spec.rb
64
80
  - spec/scanner_spec.rb
65
81
  - spec/spec_helper.rb
@@ -72,6 +88,13 @@ files:
72
88
  - data/ruby-advisory-db/README.md
73
89
  - data/ruby-advisory-db/Rakefile
74
90
  - data/ruby-advisory-db/gems/actionmailer/OSVDB-98629.yml
91
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100524.yml
92
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100525.yml
93
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100526.yml
94
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100527.yml
95
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-100528.yml
96
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-103439.yml
97
+ - data/ruby-advisory-db/gems/actionpack/OSVDB-103440.yml
75
98
  - data/ruby-advisory-db/gems/actionpack/OSVDB-79727.yml
76
99
  - data/ruby-advisory-db/gems/actionpack/OSVDB-84243.yml
77
100
  - data/ruby-advisory-db/gems/actionpack/OSVDB-84513.yml
@@ -79,6 +102,7 @@ files:
79
102
  - data/ruby-advisory-db/gems/actionpack/OSVDB-89026.yml
80
103
  - data/ruby-advisory-db/gems/actionpack/OSVDB-91452.yml
81
104
  - data/ruby-advisory-db/gems/actionpack/OSVDB-91454.yml
105
+ - data/ruby-advisory-db/gems/activerecord/OSVDB-103438.yml
82
106
  - data/ruby-advisory-db/gems/activerecord/OSVDB-82403.yml
83
107
  - data/ruby-advisory-db/gems/activerecord/OSVDB-82610.yml
84
108
  - data/ruby-advisory-db/gems/activerecord/OSVDB-89025.yml
@@ -89,6 +113,7 @@ files:
89
113
  - data/ruby-advisory-db/gems/activesupport/OSVDB-84516.yml
90
114
  - data/ruby-advisory-db/gems/activesupport/OSVDB-89594.yml
91
115
  - data/ruby-advisory-db/gems/activesupport/OSVDB-91451.yml
116
+ - data/ruby-advisory-db/gems/arabic-prawn/OSVDB-104365.yml
92
117
  - data/ruby-advisory-db/gems/cocaine/OSVDB-98835.yml
93
118
  - data/ruby-advisory-db/gems/command_wrap/OSVDB-91450.yml
94
119
  - data/ruby-advisory-db/gems/crack/OSVDB-90742.yml
@@ -96,6 +121,8 @@ files:
96
121
  - data/ruby-advisory-db/gems/curl/OSVDB-91230.yml
97
122
  - data/ruby-advisory-db/gems/devise/OSVDB-89642.yml
98
123
  - data/ruby-advisory-db/gems/dragonfly/OSVDB-90647.yml
124
+ - data/ruby-advisory-db/gems/echor/OSVDB-102129.yml
125
+ - data/ruby-advisory-db/gems/echor/OSVDB-102130.yml
99
126
  - data/ruby-advisory-db/gems/enum_column3/OSVDB-94679.yml
100
127
  - data/ruby-advisory-db/gems/extlib/OSVDB-90740.yml
101
128
  - data/ruby-advisory-db/gems/fastreader/OSVDB-91232.yml
@@ -105,8 +132,10 @@ files:
105
132
  - data/ruby-advisory-db/gems/flash_tool/OSVDB-90829.yml
106
133
  - data/ruby-advisory-db/gems/fog-dragonfly/OSVDB-96798.yml
107
134
  - data/ruby-advisory-db/gems/ftpd/OSVDB-90784.yml
135
+ - data/ruby-advisory-db/gems/gitlab-grit/OSVDB-99370.yml
108
136
  - data/ruby-advisory-db/gems/gtk2/OSVDB-40774.yml
109
137
  - data/ruby-advisory-db/gems/httparty/OSVDB-90741.yml
138
+ - data/ruby-advisory-db/gems/i18n/OSVDB-100528.yml
110
139
  - data/ruby-advisory-db/gems/json/OSVDB-90074.yml
111
140
  - data/ruby-advisory-db/gems/karteek-docsplit/OSVDB-92117.yml
112
141
  - data/ruby-advisory-db/gems/kelredd-pruview/OSVDB-92228.yml
@@ -119,22 +148,34 @@ files:
119
148
  - data/ruby-advisory-db/gems/mini_magick/OSVDB-91231.yml
120
149
  - data/ruby-advisory-db/gems/multi_xml/OSVDB-89148.yml
121
150
  - data/ruby-advisory-db/gems/newrelic_rpm/OSVDB-90189.yml
151
+ - data/ruby-advisory-db/gems/nokogiri/OSVDB-101179.yml
152
+ - data/ruby-advisory-db/gems/nokogiri/OSVDB-101458.yml
122
153
  - data/ruby-advisory-db/gems/nori/OSVDB-90196.yml
154
+ - data/ruby-advisory-db/gems/omniauth-facebook/OSVDB-99693.yml
155
+ - data/ruby-advisory-db/gems/omniauth-facebook/OSVDB-99888.yml
123
156
  - data/ruby-advisory-db/gems/omniauth-oauth2/OSVDB-90264.yml
157
+ - data/ruby-advisory-db/gems/paperclip/OSVDB-103151.yml
158
+ - data/ruby-advisory-db/gems/paratrooper-newrelic/OSVDB-101839.yml
159
+ - data/ruby-advisory-db/gems/paratrooper-pingdom/OSVDB-101847.yml
124
160
  - data/ruby-advisory-db/gems/pdfkit/OSVDB-90867.yml
125
161
  - data/ruby-advisory-db/gems/rack-cache/OSVDB-83077.yml
126
162
  - data/ruby-advisory-db/gems/rack/OSVDB-89939.yml
163
+ - data/ruby-advisory-db/gems/rbovirt/OSVDB-104080.yml
127
164
  - data/ruby-advisory-db/gems/rdoc/OSVDB-90004.yml
128
165
  - data/ruby-advisory-db/gems/redis-namespace/OSVDB-96425.yml
129
166
  - data/ruby-advisory-db/gems/rgpg/OSVDB-95948.yml
130
167
  - data/ruby-advisory-db/gems/ruby_parser/OSVDB-90561.yml
168
+ - data/ruby-advisory-db/gems/sfpagent/OSVDB-105971.yml
131
169
  - data/ruby-advisory-db/gems/sounder/OSVDB-96278.yml
132
170
  - data/ruby-advisory-db/gems/spree/OSVDB-91216.yml
133
171
  - data/ruby-advisory-db/gems/spree/OSVDB-91217.yml
134
172
  - data/ruby-advisory-db/gems/spree/OSVDB-91218.yml
135
173
  - data/ruby-advisory-db/gems/spree/OSVDB-91219.yml
174
+ - data/ruby-advisory-db/gems/sprout/OSVDB-100598.yml
136
175
  - data/ruby-advisory-db/gems/thumbshooter/OSVDB-91839.yml
176
+ - data/ruby-advisory-db/gems/webbynode/OSVDB-100920.yml
137
177
  - data/ruby-advisory-db/gems/wicked/OSVDB-98270.yml
178
+ - data/ruby-advisory-db/gems/will_paginate/OSVDB-101138.yml
138
179
  - data/ruby-advisory-db/lib/scrape.rb
139
180
  - data/ruby-advisory-db/spec/advisory_example.rb
140
181
  - data/ruby-advisory-db/spec/gems_spec.rb
@@ -159,7 +200,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
159
200
  version: 1.8.0
160
201
  requirements: []
161
202
  rubyforge_project:
162
- rubygems_version: 2.0.12
203
+ rubygems_version: 2.0.14
163
204
  signing_key:
164
205
  specification_version: 4
165
206
  summary: Patch-level verification for Bundler