Skip to content
This repository has been archived by the owner on Jul 24, 2021. It is now read-only.

Commit

Permalink
Remove nodesecurity and allow manually added vulnerabilities
Browse files Browse the repository at this point in the history
  • Loading branch information
rtfpessoa committed Oct 21, 2018
1 parent 2c1348e commit fbf325b
Show file tree
Hide file tree
Showing 13 changed files with 58 additions and 229 deletions.
4 changes: 2 additions & 2 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
yavdb (0.2.1)
yavdb (0.3.0)
json (~> 2.1)
kramdown (~> 1.17)
oga (~> 2.15)
Expand Down Expand Up @@ -82,4 +82,4 @@ DEPENDENCIES
yavdb!

BUNDLED WITH
1.16.3
1.16.6
9 changes: 3 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ developers identify and fix know vulnerabilities in their apps.
The sources for this database include
[Rubysec](https://rubysec.com/),
[snyk](https://snyk.io/),
[OSSIndex](https://ossindex.net/),
[NodeSecurity](https://nodesecurity.io/),
[OSSIndex (deprecated)](https://ossindex.net/),
[NodeSecurity (deprecated)](https://nodesecurity.io/),
[Friends of PHP](https://github.com/FriendsOfPHP/security-advisories),
[Magento Related Security Advisories](https://github.com/victims/victims-cve-db),
[Victims CVE Database](https://github.com/victims/victims-cve-db)
Expand All @@ -25,11 +25,9 @@ The sources for this database include
## Installation

```sh
gem install yavdb --pre
gem install yavdb
```

> Notice the `--pre` in the end
## TODO:

#### Tests
Expand All @@ -38,7 +36,6 @@ gem install yavdb --pre
- [ ] [Rubysec](lib/yavdb/sources/ruby_advisory.rb)
- [X] [snyk](lib/yavdb/sources/snyk_io.rb)
- [ ] [OSSIndex](lib/yavdb/sources/ossindex.rb)
- [X] [NodeSecurity](lib/yavdb/sources/nodesecurity_io.rb)
- [ ] [Friends of PHP and Magento Related Security Advisories](lib/yavdb/sources/friends_of_php.rb)
- [ ] [Victims CVE Database](lib/yavdb/sources/victims.rb)
* Others
Expand Down
8 changes: 7 additions & 1 deletion lib/yavdb/database.rb
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,18 @@ def group_by_package_manager(vulns)
def save_to_file(database_path, vulns)
vulns.map do |package_manager, vunerabilities_by_pm|
vunerabilities_by_pm.map do |package, vunerabilities_by_p|
previous_vulnerabilities = search(database_path, package_manager, package)

package_path = package_path(database_path, package_manager, package)
package_path_directory = File.dirname(package_path)
FileUtils.mkdir_p(package_path_directory) unless File.exist?(package_path_directory)

uniq_vunerabilities_by_p = Hash[previous_vulnerabilities.concat(vunerabilities_by_p).map { |vuln| [vuln.id, vuln] }].values

next unless uniq_vunerabilities_by_p.any?

File.open(package_path, 'wb') do |file|
package_vulns_yml_str = vunerabilities_by_p
package_vulns_yml_str = uniq_vunerabilities_by_p
.sort_by(&:id)
.map(&:to_map)
.to_yaml(
Expand Down
6 changes: 3 additions & 3 deletions lib/yavdb/dtos/advisory.rb
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,9 @@ def self.load(path)
def to_map
map = {}
members.each do |m|
next unless self[m] && (
(self[m].is_a?(String) && !self[m].empty?) ||
(self[m].is_a?(Array) && self[m].any?))
next if !self[m] ||
(self[m].is_a?(String) && self[m].empty?) ||
(self[m].is_a?(Array) && self[m].none?)

map[m.to_s] = self[m] if self[m]
end
Expand Down
10 changes: 8 additions & 2 deletions lib/yavdb/sources/friends_of_php.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,9 +54,15 @@ def self.create(url, advisory_hash)
info['versions'].join(' ')
end.flatten

cves = [advisory_hash['cve']].reject { |cve| cve == '~' }

package_name = advisory_hash['reference'].gsub(%r{composer:\/\/(.*)}, '\1')

vuln_id_stamp = (cves && cves[0]) || date
vuln_id = "friendsofphp:packagist:#{package_name}:#{vuln_id_stamp}"

YAVDB::Advisory.new(
"friendsofphp:packagist:#{package_name}:#{date}",
vuln_id,
advisory_hash['title'],
nil, #:description
package_name,
Expand All @@ -65,7 +71,7 @@ def self.create(url, advisory_hash)
nil, #:patched_versions
nil, #:severity
PACKAGE_MANAGER,
[advisory_hash['cve']].reject { |cve| cve == '~' },
cves,
nil, #:cwe
nil, #:osvdb
nil, #:cvss_v2_vector
Expand Down
120 changes: 0 additions & 120 deletions lib/yavdb/sources/nodesecurity_io.rb

This file was deleted.

5 changes: 4 additions & 1 deletion lib/yavdb/sources/ossindex.rb
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,11 @@ def create(package_manager, package, advisory)
.reject { |v| v == '-' }
versions = ['*'] unless versions.any?

vuln_id_stamp = (cve && cve[0]) || published_date
vuln_id = "ossindex:#{package_manager}:#{package_name}:#{vuln_id_stamp}"

YAVDB::Advisory.new(
"ossindex:#{package_manager}:#{package_name}:#{published_date}",
vuln_id,
advisory['title'],
advisory['description'],
package_name,
Expand Down
5 changes: 4 additions & 1 deletion lib/yavdb/sources/ruby_advisory.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,11 @@ def create(advisory_hash)
['*']
end

vuln_id_stamp = (cve && cve[0]) || date
vuln_id = "rubyadvisory:rubygems:#{advisory_hash['gem']}:#{vuln_id_stamp}"

YAVDB::Advisory.new(
"rubyadvisory:rubygems:#{advisory_hash['gem']}:#{date}",
vuln_id,
advisory_hash['title'],
advisory_hash['description'],
advisory_hash['gem'],
Expand Down
8 changes: 6 additions & 2 deletions lib/yavdb/sources/snyk_io.rb
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,13 @@ def create(advisory_url, advisory_page)
published_date
end

vuln_id_stamp = (sidebar_data[:cve] && sidebar_data[:cve][0]) ||
sidebar_data[:id].split(%r{-|:}).last ||
disclosed_date
vuln_id = "snykio:#{package_manager}:#{affected_package}:#{vuln_id_stamp}"

YAVDB::Advisory.new(
"snykio:#{package_manager}:#{affected_package}:#{disclosed_date}",
vuln_id,
title,
body_data[:description],
affected_package,
Expand Down Expand Up @@ -157,7 +162,6 @@ def parse_body(advisory_page)
last_elem = description_sections.last
new_body = last_elem[:body].push(field)
last_elem[:body] = new_body
description_sections.push(last_elem)
end
end

Expand Down
5 changes: 4 additions & 1 deletion lib/yavdb/sources/victims.rb
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,11 @@ def language_glob(language)

def create(advisory_hash, language, url)
advisory_hash['affected'].map do |affected_package|
vuln_id_stamp = advisory_hash['cve'] || 'date'
vuln_id = "victims:#{language.package_manager}:#{language.name_parser[affected_package]}:#{vuln_id_stamp}"

YAVDB::Advisory.new(
"victims:#{language.package_manager}:#{language.name_parser[affected_package]}:date",
vuln_id,
advisory_hash['title'],
advisory_hash['description'],
language.name_parser[affected_package],
Expand Down
2 changes: 1 addition & 1 deletion lib/yavdb/version.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,6 @@

module YAVDB

VERSION = '0.2.1'
VERSION = '0.3.0'

end
73 changes: 0 additions & 73 deletions spec/nodesecurity_io_spec.rb

This file was deleted.

Loading

0 comments on commit fbf325b

Please sign in to comment.