bundler-audit 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a34b6a79c055b51422c7c3225428947ca6b587e
4
- data.tar.gz: 724414726507e87d679a561759e9dcbdd90aecfc
3
+ metadata.gz: 679e11f046f11e432067d55398791fdbf03536b3
4
+ data.tar.gz: ad6bb67d40dae3ee0346ffe18caa11ee19e142e6
5
5
  SHA512:
6
- metadata.gz: b3c59aadb9c0f2ed1b8d3a91bf6866e54295ed78105531ff1362c5ef65f264ac02699c53d3e8e3d08f025ebc9e38ef5917de4fa9906b66e2e209131a14665e42
7
- data.tar.gz: f82127fe64b6bb856483ee82f5ab642fee371d4c84695e05beef44414857e4c95dd7f5a1e27244af9b2c81e9364a16027bb333ab123a547ab1a9bf6654a5f3df
6
+ metadata.gz: 48e2f1e83c0122d4629e4ddd02d448f90578527b40a1a0fccf331903413fbb2f3df7952399723914c0e0450f6682187af4301404b98bacc61ad794b5633a3023
7
+ data.tar.gz: 2c868a8106f74e45ffe9bcf02d1578d7326c4bea0a12baddf79ab7bd9dc059b599b39e0a41d167a0bc6d0bbbf01a8dc7e5f28a53849fea88a7214da400f5b52a
@@ -1,12 +1,24 @@
1
+ ### 0.3.0 / 2013-10-31
2
+
3
+ * Added {Bundler::Audit::Database.update!} which uses `git` to download
4
+ [ruby-advisory-db] to `~/.local/share/ruby-advisory-db`.
5
+ * {Bundler::Audit::Database.path} now returns the path to either
6
+ `~/.local/share/ruby-advisory-db` or the vendored copy, depending on which
7
+ is more recent.
8
+
9
+ #### CLI
10
+
11
+ * Added the `bundle-audit update` sub-command.
12
+
1
13
  ### 0.2.0 / 2013-03-05
2
14
 
3
15
  * Require RubyGems >= 1.8.0. Prior versions of RubyGems could not correctly
4
16
  parse approximate version requirements (`~> 1.2.3`).
5
17
  * Updated the [ruby-advisory-db].
6
- * Added {Bundle::Audit::Advisory#unaffected_versions}.
7
- * Added {Bundle::Audit::Advisory#unaffected?}.
8
- * Added {Bundle::Audit::Advisory#patched?}.
9
- * Renamed `Advisory#cve` to {Bundle::Audit::Advisory#id}.
18
+ * Added {Bundler::Audit::Advisory#unaffected_versions}.
19
+ * Added {Bundler::Audit::Advisory#unaffected?}.
20
+ * Added {Bundler::Audit::Advisory#patched?}.
21
+ * Renamed `Advisory#cve` to {Bundler::Audit::Advisory#id}.
10
22
 
11
23
  ### 0.1.2 / 2013-02-17
12
24
 
data/README.md CHANGED
@@ -23,6 +23,7 @@ Patch-level verification for [Bundler][bundler].
23
23
 
24
24
  Audit a projects `Gemfile.lock`:
25
25
 
26
+ $ bundle-audit
26
27
  Name: actionpack
27
28
  Version: 3.2.10
28
29
  Advisory: OSVDB-91452
@@ -81,6 +82,32 @@ Audit a projects `Gemfile.lock`:
81
82
 
82
83
  Unpatched versions found!
83
84
 
85
+ Update the [ruby-advisory-db] that `bundle-audit` uses:
86
+
87
+ $ bundle-audit update
88
+ Updating ruby-advisory-db ...
89
+ remote: Counting objects: 44, done.
90
+ remote: Compressing objects: 100% (24/24), done.
91
+ remote: Total 39 (delta 19), reused 29 (delta 10)
92
+ Unpacking objects: 100% (39/39), done.
93
+ From https://github.com/rubysec/ruby-advisory-db
94
+ * branch master -> FETCH_HEAD
95
+ Updating 5f8225e..328ca86
96
+ Fast-forward
97
+ CONTRIBUTORS.md | 1 +
98
+ gems/actionmailer/OSVDB-98629.yml | 17 +++++++++++++++++
99
+ gems/cocaine/OSVDB-98835.yml | 15 +++++++++++++++
100
+ gems/fog-dragonfly/OSVDB-96798.yml | 13 +++++++++++++
101
+ gems/sounder/OSVDB-96278.yml | 13 +++++++++++++
102
+ gems/wicked/OSVDB-98270.yml | 14 ++++++++++++++
103
+ 6 files changed, 73 insertions(+)
104
+ create mode 100644 gems/actionmailer/OSVDB-98629.yml
105
+ create mode 100644 gems/cocaine/OSVDB-98835.yml
106
+ create mode 100644 gems/fog-dragonfly/OSVDB-96798.yml
107
+ create mode 100644 gems/sounder/OSVDB-96278.yml
108
+ create mode 100644 gems/wicked/OSVDB-98270.yml
109
+ ruby-advisory-db: 64 advisories
110
+
84
111
  ## Requirements
85
112
 
86
113
  * [bundler] ~> 1.2
data/Rakefile CHANGED
@@ -23,13 +23,16 @@ require 'rake'
23
23
  require 'rubygems/tasks'
24
24
  Gem::Tasks.new
25
25
 
26
- desc 'Updates data/ruby-advisory-db'
27
- task :update do
28
- chdir 'data/ruby-advisory-db' do
29
- sh 'git', 'pull', 'origin', 'master'
30
- end
26
+ namespace :db do
27
+ desc 'Updates data/ruby-advisory-db'
28
+ task :update do
29
+ chdir 'data/ruby-advisory-db' do
30
+ sh 'git', 'pull', 'origin', 'master'
31
+ end
31
32
 
32
- sh 'git', 'commit', 'data/ruby-advisory-db', '-m', 'Updated ruby-advisory-db'
33
+ sh 'git', 'commit', 'data/ruby-advisory-db',
34
+ '-m', 'Updated ruby-advisory-db'
35
+ end
33
36
  end
34
37
 
35
38
  require 'rspec/core/rake_task'
@@ -0,0 +1 @@
1
+ Gemfile.lock
@@ -11,3 +11,4 @@ Thanks,
11
11
  * [Oliver Legg](https://github.com/olly)
12
12
  * [Larry W. Cashdollar](http://vapid.dhs.org/)
13
13
  * [Michael Grosser](https://github.com/grosser)
14
+ * [Sascha Korth](https://github.com/skorth)
@@ -14,15 +14,12 @@ The Ruby Advisory Database aims to compile all advisories that are relevant to R
14
14
  The database is a list of directories that match the names of Ruby libraries on
15
15
  [rubygems.org]. Within each directory are one or more advisory files
16
16
  for the Ruby library. These advisory files are typically named using
17
- the advisories [CVE] identifier number.
17
+ the advisories [OSVDB] identifier number.
18
18
 
19
19
  gems/:
20
20
  actionpack/:
21
- CVE-2012-1099.yml CVE-2012-3463.yml CVE-2013-0156.yml
22
- CVE-2013-1857.yml CVE-2012-3424.yml CVE-2012-3465.yml
23
- CVE-2013-1855.yml
24
-
25
- If an advisory does not yet have a [CVE], [requesting a CVE][1] is easy.
21
+ OSVDB-79727.yml OSVDB-84513.yml OSVDB-89026.yml OSVDB-91454.yml
22
+ OSVDB-84243.yml OSVDB-84515.yml OSVDB-91452.yml
26
23
 
27
24
  ## Format
28
25
 
@@ -78,9 +75,8 @@ developed by the Open Security Foundation (OSF) and its contributors.
78
75
 
79
76
  [rubygems.org]: https://rubygems.org/
80
77
  [CVE]: http://cve.mitre.org/
78
+ [OSVDB]: http://www.osvdb.org/
81
79
  [CVSSv2]: http://www.first.org/cvss/cvss-guide.html
82
80
  [OSVDB]: http://www.osvdb.org/
83
81
  [YAML]: http://www.yaml.org/
84
82
  [CONTRIBUTORS.md]: https://github.com/rubysec/ruby-advisory-db/blob/master/CONTRIBUTORS.md
85
-
86
- [1]: http://people.redhat.com/kseifrie/CVE-OpenSource-Request-HOWTO.html
@@ -0,0 +1,17 @@
1
+ ---
2
+ gem: actionmailer
3
+ cve: 2013-4389
4
+ osvdb: 98629
5
+ url: http://www.osvdb.org/show/osvdb/98629
6
+ title: Action Mailer Gem for Ruby contains a possible DoS Vulnerability
7
+ date: 2013-10-16
8
+ description: Action Mailer Gem for Ruby contains a format string flaw in
9
+ the Log Subscriber component. The issue is triggered as format string
10
+ specifiers (e.g. %s and %x) are not properly sanitized in user-supplied
11
+ input when handling email addresses. This may allow a remote attacker
12
+ to cause a denial of service
13
+ cvss_v2: 4.3
14
+ unaffected_versions:
15
+ - ~> 2.3.2
16
+ patched_versions:
17
+ - '>= 3.2.15'
@@ -0,0 +1,15 @@
1
+ ---
2
+ gem: cocaine
3
+ cve: 2013-4457
4
+ osvdb: 98835
5
+ url: http://www.osvdb.org/show/osvdb/98835
6
+ title: Cocaine Gem for Ruby contains a flaw
7
+ date: 2013-10-22
8
+ description: Cocaine Gem for Ruby contains a flaw that is due to the method
9
+ of variable interpolation used by the program. With a specially crafted
10
+ object, a context-dependent attacker can execute arbitrary commands.
11
+ cvss_v2:
12
+ unaffected_versions:
13
+ - ~> 0.3.0
14
+ patched_versions:
15
+ - '>= 0.5.3'
@@ -0,0 +1,13 @@
1
+ ---
2
+ gem: fog-dragonfly
3
+ cve: 2013-5671
4
+ osvdb: 96798
5
+ url: http://www.osvdb.org/show/osvdb/96798
6
+ title: fog-dragonfly Gem for Ruby imagemagickutils.rb Remote Command Execution
7
+ date: 2013-09-03
8
+ description: fog-dragonfly Gem for Ruby contains a flaw that is due to the program
9
+ failing to properly sanitize input passed via the imagemagickutils.rb script. This
10
+ may allow a remote attacker to execute arbitrary commands.
11
+ cvss_v2:
12
+ patched_versions:
13
+ - ">= 0.8.4"
@@ -0,0 +1,16 @@
1
+ ---
2
+ gem: redis-namespace
3
+ osvdb: 96425
4
+ url: http://www.osvdb.org/show/osvdb/96425
5
+ title: redis-namespace Gem for Ruby contains a flaw in the method_missing implementation
6
+ date: 2013-08-03
7
+ description: |
8
+ redis-namespace Gem for Ruby contains a flaw in the method_missing implementation.
9
+ The issue is triggered when handling exec commands called via send(). This may allow a
10
+ remote attacker to execute arbitrary commands.
11
+ cvss_v2:
12
+ patched_versions:
13
+ - ">= 1.3.1"
14
+ - ">= 1.2.2"
15
+ - ">= 1.1.1"
16
+ - ">= 1.0.4"
@@ -0,0 +1,13 @@
1
+ ---
2
+ gem: sounder
3
+ cve: 2013-5647
4
+ osvdb: 96278
5
+ url: http://www.osvdb.org/show/osvdb/96278
6
+ title: Sounder Gem for Ruby File Name Handling Arbitrary Command Execution
7
+ date: 2013-08-14
8
+ description: Sounder Gem for Ruby contains a flaw that is triggered during the handling
9
+ of file names. This may allow a context-dependent attacker to execute arbitrary
10
+ commands.
11
+ cvss_v2: 7.5
12
+ patched_versions:
13
+ - '>= 1.0.2'
@@ -0,0 +1,14 @@
1
+ ---
2
+ gem: wicked
3
+ cve: 2013-4413
4
+ osvdb: 98270
5
+ url: http://www.osvdb.org/show/osvdb/98270
6
+ title: Wicked Gem for Ruby contains a flaw
7
+ date: 2013-10-08
8
+ description: Wicked Gem for Ruby contains a flaw that is due to the program
9
+ failing to properly sanitize input passed via the 'the_step' parameter
10
+ upon submission to the render_redirect.rb script.
11
+ This may allow a remote attacker to gain access to arbitrary files.
12
+ cvss_v2:
13
+ patched_versions:
14
+ - '>= 1.0.1'
@@ -82,7 +82,7 @@ module Bundler
82
82
  # Checks whether the version is not affected by the advisory.
83
83
  #
84
84
  # @param [Gem::Version] version
85
- # The version to compare against {#unaffected_version}.
85
+ # The version to compare against {#unaffected_versions}.
86
86
  #
87
87
  # @return [Boolean]
88
88
  # Specifies whether the version is not affected by the advisory.
@@ -99,7 +99,7 @@ module Bundler
99
99
  # Checks whether the version is patched against the advisory.
100
100
  #
101
101
  # @param [Gem::Version] version
102
- # The version to compare against {#patched_version}.
102
+ # The version to compare against {#patched_versions}.
103
103
  #
104
104
  # @return [Boolean]
105
105
  # Specifies whether the version is patched against the advisory.
@@ -55,6 +55,14 @@ module Bundler
55
55
  end
56
56
  end
57
57
 
58
+ desc 'update', 'Updates the ruby-advisory-db'
59
+ def update
60
+ say "Updating ruby-advisory-db ..."
61
+
62
+ Database.update!
63
+ puts "ruby-advisory-db: #{Database.new.size} advisories"
64
+ end
65
+
58
66
  desc 'version', 'Prints the bundler-audit version'
59
67
  def version
60
68
  database = Database.new
@@ -17,6 +17,7 @@
17
17
 
18
18
  require 'bundler/audit/advisory'
19
19
 
20
+ require 'time'
20
21
  require 'yaml'
21
22
 
22
23
  module Bundler
@@ -27,8 +28,14 @@ module Bundler
27
28
  #
28
29
  class Database
29
30
 
30
- # directory containing advisories
31
- PATH = File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','data','ruby-advisory-db','gems'))
31
+ # Git URL of the ruby-advisory-db
32
+ URL = 'https://github.com/rubysec/ruby-advisory-db.git'
33
+
34
+ # Default path to the ruby-advisory-db
35
+ VENDORED_PATH = File.expand_path(File.join(File.dirname(__FILE__),'..','..','..','data','ruby-advisory-db'))
36
+
37
+ # Path to the user's copy of the ruby-advisory-db
38
+ USER_PATH = File.join(Gem.user_home,'.local','share','ruby-advisory-db')
32
39
 
33
40
  # The path to the advisory database
34
41
  attr_reader :path
@@ -42,7 +49,7 @@ module Bundler
42
49
  # @raise [ArgumentError]
43
50
  # The path was not a directory.
44
51
  #
45
- def initialize(path=PATH)
52
+ def initialize(path=self.class.path)
46
53
  unless File.directory?(path)
47
54
  raise(ArgumentError,"#{path.dump} is not a directory")
48
55
  end
@@ -50,6 +57,46 @@ module Bundler
50
57
  @path = path
51
58
  end
52
59
 
60
+ #
61
+ # The default path for the database.
62
+ #
63
+ # @return [String]
64
+ # The path to the database directory.
65
+ #
66
+ def self.path
67
+ if File.directory?(USER_PATH)
68
+ t1 = Dir.chdir(USER_PATH) { Time.parse(`git log --pretty="%cd" -1`) }
69
+ t2 = File.ctime(VENDORED_PATH)
70
+
71
+ if t1 >= t2 then USER_PATH
72
+ else VENDORED_PATH
73
+ end
74
+ else
75
+ VENDORED_PATH
76
+ end
77
+ end
78
+
79
+ #
80
+ # Updates the ruby-advisory-db.
81
+ #
82
+ # @return [Boolean]
83
+ # Specifies whether the update was successful.
84
+ #
85
+ # @note
86
+ # Requires network access.
87
+ #
88
+ # @since 0.3.0
89
+ #
90
+ def self.update!
91
+ if File.directory?(USER_PATH)
92
+ Dir.chdir(USER_PATH) do
93
+ system 'git', 'pull', 'origin', 'master'
94
+ end
95
+ else
96
+ system 'git', 'clone', URL, USER_PATH
97
+ end
98
+ end
99
+
53
100
  #
54
101
  # Enumerates over every advisory in the database.
55
102
  #
@@ -161,7 +208,7 @@ module Bundler
161
208
  # A path to an advisory `.yml` file.
162
209
  #
163
210
  def each_advisory_path(&block)
164
- Dir.glob(File.join(@path,'*','*.yml'),&block)
211
+ Dir.glob(File.join(@path,'gems','*','*.yml'),&block)
165
212
  end
166
213
 
167
214
  #
@@ -177,7 +224,7 @@ module Bundler
177
224
  # A path to an advisory `.yml` file.
178
225
  #
179
226
  def each_advisory_path_for(name,&block)
180
- Dir.glob(File.join(@path,name,'*.yml'),&block)
227
+ Dir.glob(File.join(@path,'gems',name,'*.yml'),&block)
181
228
  end
182
229
 
183
230
  end
@@ -18,6 +18,6 @@
18
18
  module Bundler
19
19
  module Audit
20
20
  # bundler-audit version
21
- VERSION = '0.2.0'
21
+ VERSION = '0.3.0'
22
22
  end
23
23
  end
@@ -3,10 +3,10 @@ require 'bundler/audit/database'
3
3
  require 'bundler/audit/advisory'
4
4
 
5
5
  describe Bundler::Audit::Advisory do
6
- let(:root) { Bundler::Audit::Database::PATH }
6
+ let(:root) { Bundler::Audit::Database::VENDORED_PATH }
7
7
  let(:gem) { 'actionpack' }
8
8
  let(:id) { 'OSVDB-84243' }
9
- let(:path) { File.join(root,gem,"#{id}.yml") }
9
+ let(:path) { File.join(root,'gems',gem,"#{id}.yml") }
10
10
 
11
11
  describe "load" do
12
12
  let(:data) { YAML.load_file(path) }
@@ -1,6 +1,6 @@
1
1
  source 'https://rubygems.org'
2
2
 
3
- gem 'rails', '3.2.14'
3
+ gem 'rails', '3.2.15'
4
4
 
5
5
  # Bundle edge Rails instead:
6
6
  # gem 'rails', :git => 'git://github.com/rails/rails.git'
@@ -3,8 +3,8 @@ require 'bundler/audit/database'
3
3
  require 'tmpdir'
4
4
 
5
5
  describe Bundler::Audit::Database do
6
- describe "PATH" do
7
- subject { described_class::PATH }
6
+ describe "path" do
7
+ subject { described_class.path }
8
8
 
9
9
  it "it should be a directory" do
10
10
  File.directory?(subject).should be_true
@@ -15,8 +15,8 @@ describe Bundler::Audit::Database do
15
15
  context "when given no arguments" do
16
16
  subject { described_class.new }
17
17
 
18
- it "should default path to PATH" do
19
- subject.path.should == described_class::PATH
18
+ it "should default path to path" do
19
+ subject.path.should == described_class.path
20
20
  end
21
21
  end
22
22
 
@@ -21,6 +21,14 @@ describe "CLI" do
21
21
 
22
22
  it "should print advisory information for the vulnerable gems" do
23
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
+
24
32
  Name: actionpack
25
33
  Version: 3.2.10
26
34
  Advisory: OSVDB-91452
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bundler-audit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Postmodern
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-27 00:00:00.000000000 Z
11
+ date: 2013-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -63,6 +63,7 @@ files:
63
63
  - spec/integration_spec.rb
64
64
  - spec/scanner_spec.rb
65
65
  - spec/spec_helper.rb
66
+ - data/ruby-advisory-db/.gitignore
66
67
  - data/ruby-advisory-db/.rspec
67
68
  - data/ruby-advisory-db/CONTRIBUTING.md
68
69
  - data/ruby-advisory-db/CONTRIBUTORS.md
@@ -70,6 +71,7 @@ files:
70
71
  - data/ruby-advisory-db/LICENSE.txt
71
72
  - data/ruby-advisory-db/README.md
72
73
  - data/ruby-advisory-db/Rakefile
74
+ - data/ruby-advisory-db/gems/actionmailer/OSVDB-98629.yml
73
75
  - data/ruby-advisory-db/gems/actionpack/OSVDB-79727.yml
74
76
  - data/ruby-advisory-db/gems/actionpack/OSVDB-84243.yml
75
77
  - data/ruby-advisory-db/gems/actionpack/OSVDB-84513.yml
@@ -87,6 +89,7 @@ files:
87
89
  - data/ruby-advisory-db/gems/activesupport/OSVDB-84516.yml
88
90
  - data/ruby-advisory-db/gems/activesupport/OSVDB-89594.yml
89
91
  - data/ruby-advisory-db/gems/activesupport/OSVDB-91451.yml
92
+ - data/ruby-advisory-db/gems/cocaine/OSVDB-98835.yml
90
93
  - data/ruby-advisory-db/gems/command_wrap/OSVDB-91450.yml
91
94
  - data/ruby-advisory-db/gems/crack/OSVDB-90742.yml
92
95
  - data/ruby-advisory-db/gems/cremefraiche/OSVDB-93395.yml
@@ -100,6 +103,7 @@ files:
100
103
  - data/ruby-advisory-db/gems/fileutils/OSVDB-90716.yml
101
104
  - data/ruby-advisory-db/gems/fileutils/OSVDB-90717.yml
102
105
  - data/ruby-advisory-db/gems/flash_tool/OSVDB-90829.yml
106
+ - data/ruby-advisory-db/gems/fog-dragonfly/OSVDB-96798.yml
103
107
  - data/ruby-advisory-db/gems/ftpd/OSVDB-90784.yml
104
108
  - data/ruby-advisory-db/gems/gtk2/OSVDB-40774.yml
105
109
  - data/ruby-advisory-db/gems/httparty/OSVDB-90741.yml
@@ -121,13 +125,16 @@ files:
121
125
  - data/ruby-advisory-db/gems/rack-cache/OSVDB-83077.yml
122
126
  - data/ruby-advisory-db/gems/rack/OSVDB-89939.yml
123
127
  - data/ruby-advisory-db/gems/rdoc/OSVDB-90004.yml
128
+ - data/ruby-advisory-db/gems/redis-namespace/OSVDB-96425.yml
124
129
  - data/ruby-advisory-db/gems/rgpg/OSVDB-95948.yml
125
130
  - data/ruby-advisory-db/gems/ruby_parser/OSVDB-90561.yml
131
+ - data/ruby-advisory-db/gems/sounder/OSVDB-96278.yml
126
132
  - data/ruby-advisory-db/gems/spree/OSVDB-91216.yml
127
133
  - data/ruby-advisory-db/gems/spree/OSVDB-91217.yml
128
134
  - data/ruby-advisory-db/gems/spree/OSVDB-91218.yml
129
135
  - data/ruby-advisory-db/gems/spree/OSVDB-91219.yml
130
136
  - data/ruby-advisory-db/gems/thumbshooter/OSVDB-91839.yml
137
+ - data/ruby-advisory-db/gems/wicked/OSVDB-98270.yml
131
138
  - data/ruby-advisory-db/lib/scrape.rb
132
139
  - data/ruby-advisory-db/spec/advisory_example.rb
133
140
  - data/ruby-advisory-db/spec/gems_spec.rb
@@ -152,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
152
159
  version: 1.8.0
153
160
  requirements: []
154
161
  rubyforge_project:
155
- rubygems_version: 2.0.5
162
+ rubygems_version: 2.0.12
156
163
  signing_key:
157
164
  specification_version: 4
158
165
  summary: Patch-level verification for Bundler