ChangeLog.md
### 0.9.2 / 2024-08-22
* Officially support Ruby 3.2 and 3.3.
* Corrected the gemspec license to indicate GPL-3.0 *or* later.
#### CLI
* Correctly handle {Bundler::Audit::Database::UpdateFailed} exceptions in
`bundle-audit update`.
* Changed wording from "upgrade to" to "update to" in `bundle-audit check`
output.
#### Rake Task
* Fixed empty `bundle:audit:update` rake task.
### 0.9.1 / 2022-05-19
* Opt into rubygems.org MFA requirement.
#### CLI
* Improve the readability of the suggested gem versions to upgrade to
(pull #331).
#### Rake Task
* Fixed a regression introduced in 0.9.0 where the `bundler:audit` rake task
was not exiting with an error status code if vulnerabilities were found.
Now when the `bundler-audit` command fails, the rake task will also exit with
the `bundler-audit` command's error code.
* If the `bundler-audit` command could not be found for some reason raise the
{Bundler::Audit::Task::CommandNotFound} exception.
### 0.9.0.1 / 2021-08-31
* Add a workaround for Psych < 3.1.0 to support running on Ruby < 2.6.
(issue #319)
* Although, Ruby 2.5 and prior have all reached [End-of-Life] and
are no longer receiving security updates. It is strongly advised that you
should upgrade to a currently supported version of Ruby.
[End-of-Life]: https://www.ruby-lang.org/en/downloads/branches/
### 0.9.0 / 2021-08-31
* Load advisory metadata using `YAML.safe_load`. (issue #302)
* Explicitly permit the `Date` class for Psych >= 4.0.0 and Ruby >= 3.1.0.
* Added {Bundler::Audit::Advisory#to_h}. (pull #310)
* Added {Bundler::Audit::Database#commit_id}.
#### CLI
* Added the `--config` option. (pull #306)
* Added the `junit` output format (ex: `--format junit`). (pull #314)
* Add missing output for CVSSv3 criticality information. (pull #302)
* Include criticality information in the JSON output as well. (pull #310)
* `bundle-audit stats` now prints the commit ID of the ruby-advisory-db.
* Fixed a deprecation warning from Thor. (issue #317)
#### Rake Task
* Add the `bundle:audit:update` task for updating the [ruby-advisory-db].
(pull #296)
* Aliased `bundle:audit` to `bundle:audit:check`.
* Aliased `bundler:audit:*` to `bundle:audit:*`.
* Rake tasks now execute `bundle-audit` command as a subprocess to ensure
isolation.
### 0.8.0 / 2021-03-10
* No longer vendor [ruby-advisory-db].
* Added {Bundler::Audit::Configuration}.
* Supports loading YAML configuration data from a `.bundler-audit.yml` file.
* Added {Bundler::Audit::Results}.
* Added {Bundler::Audit::Report}.
* Added {Bundler::Audit::CLI::Formats}.
* Added {Bundler::Audit::CLI::Formats::Text}.
* Added {Bundler::Audit::CLI::Formats::JSON}.
* Added {Bundler::Audit::Database::DEFAULT_PATH}.
* Added {Bundler::Audit::Database.exists?}.
* Added {Bundler::Audit::Database#git?}.
* Added {Bundler::Audit::Database#update!}.
* Will raise a {Bundler::Audit::Database::UpdateFailed UpdateFailed}
exception, if the `git pull` command fails.
* Added {Bundler::Audit::Database#last_updated_at}.
* Added {Bundler::Audit::Scanner#report}.
* {Bundler::Audit::Database::USER_PATH} is now `Gem.user_home` aware.
* `Gem.user_home` will try to infer `HOME`, even if it is not set.
* {Bundler::Audit::Database#download} will now raise a
{Bundler::Audit::Database::DownloadFailed DownloadFailed} exception, if the
`git clone` command fails.
* {Bundler::Audit::Scanner#initialize}:
* Now accepts an additional `database` and `config_dot_file` arguments.
* Will now raise a `Bundler::GemfileLockNotFound` exception,
if the given `Gemfile.lock` file cannot be found.
* {Bundler::Audit::Scanner#scan_sources} will now ignore any source with a
`127.0.0.0/8` or `::1/128` IP address.
* {Bundler::Audit::Scanner#scan_specs} will ignore any advisories listed in
{Bundler::Audit::Configuration#ignore}, which is loaded from the
`.bundler-audit.yml` file.
* Deprecated {Bundler::Audit::Database.update!} in favor of
{Bundler::Audit::Database#update! #update!}.
* Removed `Bundler::Audit::Database::VENDORED_PATH`.
* Removed `Bundler::Audit::Database::VENDORED_TIMESTAMP`.
#### CLI
* Require [thor] ~> 1.0.
* Added `bundler-audit stats`.
* Added `bundler-audit download`.
* `bundler-audit check`:
* Now accepts a optional `DIR` argument for the project directory.
* `bundler-audit check` will now print an explicit error message and exit,
if the given `DIR` does not exist.
* Will now auto-download [ruby-advisory-db] to ensure the latest advisory
information is used on first run.
* Now supports a `--database` option for specifying a path
to an alternative [ruby-advisory-db] copy.
* Now supports a `--gemfile-lock` option for specifying a
custom `Gemfile.lock` file within the project directory.
* Now supports a `--format` option for specifying the
desired format. `text` and `json` are supported, but other custom formats
can be loaded. See {Bundler::Audit::CLI::Formats}.
* Now supports a `--output` option for writing the report output to a file.
* Prints both CVE and GHSA IDs.
* Print all error messages to stderr.
* No longer print number of advisories in `bundler-audit version`.
### 0.7.0.1 / 2020-06-12
* Forgot to populate `data/ruby-advisory-db`.
### 0.7.0 / 2020-06-12
* Require [thor] >= 0.18, < 2.
* Added {Bundler::Audit::Advisory#ghsa} (@rschultheis).
* Added {Bundler::Audit::Advisory#cvss_v3} (@ahamlin-nr).
* Added {Bundler::Audit::Advisory#identifiers} (@rschultheis).
* Updated {Bundler::Audit::Advisory#criticality} ranges (@reedloden).
* Avoid rebasing the ruby-advisory-db when updating (@nicknovitski).
* Fixed issue with Bundler 2.x where source URIs are no longer parsed as
`URI::HTTP` objects, but as `Bundler::URI::HTTP` objects. (@milgner)
* Make it more explicit that git is required for database updates (@fatkodima)
### 0.6.1 / 2019-01-17
* Require bundler `>= 1.2.0, < 3` to support [bundler] 2.0.
### 0.6.0 / 2017-07-18
* Added `--quiet` option to `check` and `update` commands (@jaredbeck).
* Added `bin/bundler-audit` which will be executed when `bundle audit` is ran
(@vassilevsky).
### 0.5.0 / 2016-02-28
* Added {Bundler::Audit::Task}.
* Added {Bundler::Audit::Advisory#date}.
* Added {Bundler::Audit::Advisory#cve_id}.
* Added {Bundler::Audit::Advisory#osvdb_id}.
* Allow insecure gem sources (`http://` and `git://`), if they are hosted on a
private network.
#### CLI
* Added the `--update` option to `bundler-audit check`.
* `bundler-audit update` now returns a non-zero exit status on error.
* `bundler-audit update` only updates `~/.local/share/ruby-advisory-db`, if it is a git
repository.
### 0.4.0 / 2015-06-30
* Require ruby >= 1.9.3 due to i18n gem deprecating < 1.9.3.
* Added {Bundler::Audit::Advisory#osvdb}.
* Resolve the IP addresses of gem sources and ignore intranet gem sources.
(PR #90)
* Use ISO8601 date format when querying the git timestamp of ruby-advisory-db.
(PR #92)
#### CLI
* Print the CVE or OSVDB id.
* No longer print "Unpatched versions found!" when an insecure gem source
is detected. (PR #84)
### 0.3.1 / 2014-04-20
* Added thor ~> 0.18 as a dependency.
* No longer rely on the vendored version of thor within bundler.
* Store the timestamp of when `data/ruby-advisory-db` was last updated in
`data/ruby-advisory-db.ts`.
* Use `data/ruby-advisory-db.ts` instead of the creation time of the
`dataruby-advisory-db` directory, which is always the install time
of the rubygem.
### 0.3.0 / 2013-10-31
* Added {Bundler::Audit::Database.update!} which uses `git` to download
[ruby-advisory-db] to `~/.local/share/ruby-advisory-db`.
* {Bundler::Audit::Database.path} now returns the path to either
`~/.local/share/ruby-advisory-db` or the vendored copy, depending on which
is more recent.
#### CLI
* Added the `bundler-audit update` sub-command.
### 0.2.0 / 2013-03-05
* Require RubyGems >= 1.8.0. Prior versions of RubyGems could not correctly
parse approximate version requirements (`~> 1.2.3`).
* Updated the [ruby-advisory-db].
* Added {Bundler::Audit::Advisory#unaffected_versions}.
* Added {Bundler::Audit::Advisory#unaffected?}.
* Added {Bundler::Audit::Advisory#patched?}.
* Renamed `Advisory#cve` to {Bundler::Audit::Advisory#id}.
### 0.1.2 / 2013-02-17
* Require [bundler] ~> 1.2.
* Vendor a full copy of the [ruby-advisory-db].
* Added {Bundler::Audit::Advisory#path} for debugging purposes.
* Added {Bundler::Audit::Advisory#to_s} for debugging purposes.
#### CLI
* Simply parse the `Gemfile.lock` instead of loading the bundle (@grosser).
* Exit with non-zero status on failure (@grosser).
### 0.1.1 / 2013-02-12
* Fixed a Ruby 1.8 syntax error.
### Advisories
* Imported advisories from the [Ruby Advisory DB][ruby-advisory-db].
* [CVE-2011-0739](http://www.osvdb.org/show/osvdb/70667)
* [CVE-2012-2139](http://www.osvdb.org/show/osvdb/81631)
* [CVE-2012-2140](http://www.osvdb.org/show/osvdb/81632)
* [CVE-2012-267](http://osvdb.org/83077)
* [CVE-2012-1098](http://osvdb.org/79726)
* [CVE-2012-1099](http://www.osvdb.org/show/osvdb/79727)
* [CVE-2012-2660](http://www.osvdb.org/show/osvdb/82610)
* [CVE-2012-2661](http://www.osvdb.org/show/osvdb/82403)
* [CVE-2012-3424](http://www.osvdb.org/show/osvdb/84243)
* [CVE-2012-3463](http://osvdb.org/84515)
* [CVE-2012-3464](http://www.osvdb.org/show/osvdb/84516)
* [CVE-2012-3465](http://www.osvdb.org/show/osvdb/84513)
### CLI
* If the advisory has no `patched_versions`, recommend removing or disabling
the gem until a patch is made available.
### 0.1.0 / 2013-02-11
* Initial release:
* Checks for vulnerable versions of gems in `Gemfile.lock`.
* Prints advisory information.
* Does not require a network connection.
#### Advisories
* [CVE-2013-0269](http://direct.osvdb.org/show/osvdb/90074)
* [CVE-2013-0263](http://osvdb.org/show/osvdb/89939)
* [CVE-2013-0155](http://osvdb.org/show/osvdb/89025)
* [CVE-2013-0156](http://osvdb.org/show/osvdb/89026)
* [CVE-2013-0276](http://direct.osvdb.org/show/osvdb/90072)
* [CVE-2013-0277](http://direct.osvdb.org/show/osvdb/90073)
* [CVE-2013-0333](http://osvdb.org/show/osvdb/89594)
[bundler]: http://gembundler.com/
[thor]: http://whatisthor.com/
[ruby-advisory-db]: https://github.com/rubysec/ruby-advisory-db#readme