dawnscanner 1.6.8 → 2.0.0.rc4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.ruby-version +1 -1
- data/Changelog.md +27 -1
- data/LICENSE.txt +1 -1
- data/README.md +59 -57
- data/Rakefile +10 -242
- data/Roadmap.md +15 -23
- data/VERSION +1 -1
- data/bin/dawn +17 -273
- data/checksum/dawnscanner-1.6.8.gem.sha1 +1 -0
- data/checksum/dawnscanner-2.0.0.rc1.gem.sha1 +1 -0
- data/checksum/dawnscanner-2.0.0.rc2.gem.sha1 +1 -0
- data/checksum/dawnscanner-2.0.0.rc3.gem.sha1 +1 -0
- data/dawnscanner.gemspec +10 -9
- data/doc/change.sh +13 -0
- data/doc/kickstart_kb.tar.gz +0 -0
- data/doc/knowledge_base.rb +650 -0
- data/docs/.placeholder +0 -0
- data/docs/CNAME +1 -0
- data/docs/_config.yml +1 -0
- data/lib/dawn/cli/dawn_cli.rb +139 -0
- data/lib/dawn/core.rb +8 -7
- data/lib/dawn/engine.rb +93 -34
- data/lib/dawn/gemfile_lock.rb +2 -2
- data/lib/dawn/kb/basic_check.rb +1 -2
- data/lib/dawn/kb/combo_check.rb +1 -1
- data/lib/dawn/kb/dependency_check.rb +1 -1
- data/lib/dawn/kb/operating_system_check.rb +1 -1
- data/lib/dawn/kb/pattern_match_check.rb +10 -9
- data/lib/dawn/kb/ruby_version_check.rb +11 -10
- data/lib/dawn/kb/{gem_check.rb → rubygem_check.rb} +1 -1
- data/lib/dawn/kb/unsafe_depedency_check.rb +44 -0
- data/lib/dawn/kb/version_check.rb +41 -24
- data/lib/dawn/knowledge_base.rb +259 -595
- data/lib/dawn/reporter.rb +2 -1
- data/lib/dawn/utils.rb +5 -2
- data/lib/dawn/version.rb +5 -5
- data/lib/dawnscanner.rb +7 -6
- data/spec/lib/kb/codesake_unsafe_dependency_check_spec.rb +29 -0
- data/spec/lib/kb/dependency_check.yml +29 -0
- metadata +30 -496
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/certs/paolo_at_dawnscanner_dot_org.pem +0 -21
- data/lib/dawn/kb/cve_2004_0755.rb +0 -33
- data/lib/dawn/kb/cve_2004_0983.rb +0 -31
- data/lib/dawn/kb/cve_2005_1992.rb +0 -31
- data/lib/dawn/kb/cve_2005_2337.rb +0 -33
- data/lib/dawn/kb/cve_2006_1931.rb +0 -30
- data/lib/dawn/kb/cve_2006_2582.rb +0 -28
- data/lib/dawn/kb/cve_2006_3694.rb +0 -31
- data/lib/dawn/kb/cve_2006_4112.rb +0 -27
- data/lib/dawn/kb/cve_2006_5467.rb +0 -28
- data/lib/dawn/kb/cve_2006_6303.rb +0 -28
- data/lib/dawn/kb/cve_2006_6852.rb +0 -27
- data/lib/dawn/kb/cve_2006_6979.rb +0 -29
- data/lib/dawn/kb/cve_2007_0469.rb +0 -29
- data/lib/dawn/kb/cve_2007_5162.rb +0 -28
- data/lib/dawn/kb/cve_2007_5379.rb +0 -27
- data/lib/dawn/kb/cve_2007_5380.rb +0 -29
- data/lib/dawn/kb/cve_2007_5770.rb +0 -30
- data/lib/dawn/kb/cve_2007_6077.rb +0 -31
- data/lib/dawn/kb/cve_2007_6612.rb +0 -30
- data/lib/dawn/kb/cve_2008_1145.rb +0 -38
- data/lib/dawn/kb/cve_2008_1891.rb +0 -38
- data/lib/dawn/kb/cve_2008_2376.rb +0 -30
- data/lib/dawn/kb/cve_2008_2662.rb +0 -33
- data/lib/dawn/kb/cve_2008_2663.rb +0 -32
- data/lib/dawn/kb/cve_2008_2664.rb +0 -33
- data/lib/dawn/kb/cve_2008_2725.rb +0 -31
- data/lib/dawn/kb/cve_2008_3655.rb +0 -37
- data/lib/dawn/kb/cve_2008_3657.rb +0 -37
- data/lib/dawn/kb/cve_2008_3790.rb +0 -30
- data/lib/dawn/kb/cve_2008_3905.rb +0 -36
- data/lib/dawn/kb/cve_2008_4094.rb +0 -27
- data/lib/dawn/kb/cve_2008_4310.rb +0 -100
- data/lib/dawn/kb/cve_2008_5189.rb +0 -27
- data/lib/dawn/kb/cve_2008_7248.rb +0 -27
- data/lib/dawn/kb/cve_2009_4078.rb +0 -29
- data/lib/dawn/kb/cve_2009_4124.rb +0 -30
- data/lib/dawn/kb/cve_2009_4214.rb +0 -27
- data/lib/dawn/kb/cve_2010_1330.rb +0 -28
- data/lib/dawn/kb/cve_2010_2489.rb +0 -60
- data/lib/dawn/kb/cve_2010_3933.rb +0 -27
- data/lib/dawn/kb/cve_2011_0188.rb +0 -67
- data/lib/dawn/kb/cve_2011_0446.rb +0 -28
- data/lib/dawn/kb/cve_2011_0447.rb +0 -28
- data/lib/dawn/kb/cve_2011_0739.rb +0 -28
- data/lib/dawn/kb/cve_2011_0995.rb +0 -61
- data/lib/dawn/kb/cve_2011_1004.rb +0 -34
- data/lib/dawn/kb/cve_2011_1005.rb +0 -31
- data/lib/dawn/kb/cve_2011_2197.rb +0 -27
- data/lib/dawn/kb/cve_2011_2686.rb +0 -29
- data/lib/dawn/kb/cve_2011_2705.rb +0 -32
- data/lib/dawn/kb/cve_2011_2929.rb +0 -27
- data/lib/dawn/kb/cve_2011_2930.rb +0 -28
- data/lib/dawn/kb/cve_2011_2931.rb +0 -30
- data/lib/dawn/kb/cve_2011_2932.rb +0 -27
- data/lib/dawn/kb/cve_2011_3009.rb +0 -28
- data/lib/dawn/kb/cve_2011_3186.rb +0 -29
- data/lib/dawn/kb/cve_2011_3187.rb +0 -29
- data/lib/dawn/kb/cve_2011_4319.rb +0 -30
- data/lib/dawn/kb/cve_2011_4815.rb +0 -28
- data/lib/dawn/kb/cve_2011_5036.rb +0 -26
- data/lib/dawn/kb/cve_2012_1098.rb +0 -30
- data/lib/dawn/kb/cve_2012_1099.rb +0 -27
- data/lib/dawn/kb/cve_2012_1241.rb +0 -27
- data/lib/dawn/kb/cve_2012_2139.rb +0 -26
- data/lib/dawn/kb/cve_2012_2140.rb +0 -27
- data/lib/dawn/kb/cve_2012_2660.rb +0 -28
- data/lib/dawn/kb/cve_2012_2661.rb +0 -27
- data/lib/dawn/kb/cve_2012_2671.rb +0 -28
- data/lib/dawn/kb/cve_2012_2694.rb +0 -30
- data/lib/dawn/kb/cve_2012_2695.rb +0 -27
- data/lib/dawn/kb/cve_2012_3424.rb +0 -29
- data/lib/dawn/kb/cve_2012_3463.rb +0 -27
- data/lib/dawn/kb/cve_2012_3464.rb +0 -27
- data/lib/dawn/kb/cve_2012_3465.rb +0 -26
- data/lib/dawn/kb/cve_2012_4464.rb +0 -27
- data/lib/dawn/kb/cve_2012_4466.rb +0 -27
- data/lib/dawn/kb/cve_2012_4481.rb +0 -26
- data/lib/dawn/kb/cve_2012_4522.rb +0 -27
- data/lib/dawn/kb/cve_2012_5370.rb +0 -27
- data/lib/dawn/kb/cve_2012_5371.rb +0 -27
- data/lib/dawn/kb/cve_2012_5380.rb +0 -28
- data/lib/dawn/kb/cve_2012_6109.rb +0 -25
- data/lib/dawn/kb/cve_2012_6134.rb +0 -27
- data/lib/dawn/kb/cve_2012_6496.rb +0 -28
- data/lib/dawn/kb/cve_2012_6497.rb +0 -28
- data/lib/dawn/kb/cve_2012_6684.rb +0 -28
- data/lib/dawn/kb/cve_2013_0155.rb +0 -29
- data/lib/dawn/kb/cve_2013_0156.rb +0 -27
- data/lib/dawn/kb/cve_2013_0162.rb +0 -28
- data/lib/dawn/kb/cve_2013_0175.rb +0 -27
- data/lib/dawn/kb/cve_2013_0183.rb +0 -25
- data/lib/dawn/kb/cve_2013_0184.rb +0 -25
- data/lib/dawn/kb/cve_2013_0233.rb +0 -26
- data/lib/dawn/kb/cve_2013_0256.rb +0 -59
- data/lib/dawn/kb/cve_2013_0262.rb +0 -26
- data/lib/dawn/kb/cve_2013_0263.rb +0 -26
- data/lib/dawn/kb/cve_2013_0269.rb +0 -27
- data/lib/dawn/kb/cve_2013_0276.rb +0 -28
- data/lib/dawn/kb/cve_2013_0277.rb +0 -25
- data/lib/dawn/kb/cve_2013_0284.rb +0 -27
- data/lib/dawn/kb/cve_2013_0285.rb +0 -27
- data/lib/dawn/kb/cve_2013_0333.rb +0 -28
- data/lib/dawn/kb/cve_2013_0334.rb +0 -25
- data/lib/dawn/kb/cve_2013_1607.rb +0 -25
- data/lib/dawn/kb/cve_2013_1655.rb +0 -65
- data/lib/dawn/kb/cve_2013_1656.rb +0 -28
- data/lib/dawn/kb/cve_2013_1756.rb +0 -26
- data/lib/dawn/kb/cve_2013_1800.rb +0 -26
- data/lib/dawn/kb/cve_2013_1801.rb +0 -27
- data/lib/dawn/kb/cve_2013_1802.rb +0 -27
- data/lib/dawn/kb/cve_2013_1812.rb +0 -27
- data/lib/dawn/kb/cve_2013_1821.rb +0 -28
- data/lib/dawn/kb/cve_2013_1854.rb +0 -26
- data/lib/dawn/kb/cve_2013_1855.rb +0 -25
- data/lib/dawn/kb/cve_2013_1856.rb +0 -26
- data/lib/dawn/kb/cve_2013_1857.rb +0 -27
- data/lib/dawn/kb/cve_2013_1875.rb +0 -27
- data/lib/dawn/kb/cve_2013_1898.rb +0 -27
- data/lib/dawn/kb/cve_2013_1911.rb +0 -28
- data/lib/dawn/kb/cve_2013_1933.rb +0 -27
- data/lib/dawn/kb/cve_2013_1947.rb +0 -27
- data/lib/dawn/kb/cve_2013_1948.rb +0 -27
- data/lib/dawn/kb/cve_2013_2065.rb +0 -29
- data/lib/dawn/kb/cve_2013_2090.rb +0 -28
- data/lib/dawn/kb/cve_2013_2105.rb +0 -26
- data/lib/dawn/kb/cve_2013_2119.rb +0 -27
- data/lib/dawn/kb/cve_2013_2512.rb +0 -26
- data/lib/dawn/kb/cve_2013_2513.rb +0 -25
- data/lib/dawn/kb/cve_2013_2516.rb +0 -26
- data/lib/dawn/kb/cve_2013_2615.rb +0 -27
- data/lib/dawn/kb/cve_2013_2616.rb +0 -27
- data/lib/dawn/kb/cve_2013_2617.rb +0 -28
- data/lib/dawn/kb/cve_2013_3221.rb +0 -27
- data/lib/dawn/kb/cve_2013_4164.rb +0 -30
- data/lib/dawn/kb/cve_2013_4203.rb +0 -25
- data/lib/dawn/kb/cve_2013_4389.rb +0 -26
- data/lib/dawn/kb/cve_2013_4413.rb +0 -27
- data/lib/dawn/kb/cve_2013_4457.rb +0 -29
- data/lib/dawn/kb/cve_2013_4478.rb +0 -26
- data/lib/dawn/kb/cve_2013_4479.rb +0 -26
- data/lib/dawn/kb/cve_2013_4489.rb +0 -28
- data/lib/dawn/kb/cve_2013_4491.rb +0 -29
- data/lib/dawn/kb/cve_2013_4492.rb +0 -29
- data/lib/dawn/kb/cve_2013_4562.rb +0 -27
- data/lib/dawn/kb/cve_2013_4593.rb +0 -27
- data/lib/dawn/kb/cve_2013_5647.rb +0 -29
- data/lib/dawn/kb/cve_2013_5671.rb +0 -26
- data/lib/dawn/kb/cve_2013_6414.rb +0 -30
- data/lib/dawn/kb/cve_2013_6415.rb +0 -29
- data/lib/dawn/kb/cve_2013_6416.rb +0 -29
- data/lib/dawn/kb/cve_2013_6417.rb +0 -30
- data/lib/dawn/kb/cve_2013_6421.rb +0 -28
- data/lib/dawn/kb/cve_2013_6459.rb +0 -28
- data/lib/dawn/kb/cve_2013_6460.rb +0 -53
- data/lib/dawn/kb/cve_2013_6461.rb +0 -57
- data/lib/dawn/kb/cve_2013_7086.rb +0 -27
- data/lib/dawn/kb/cve_2014_0036.rb +0 -27
- data/lib/dawn/kb/cve_2014_0080.rb +0 -29
- data/lib/dawn/kb/cve_2014_0081.rb +0 -27
- data/lib/dawn/kb/cve_2014_0082.rb +0 -27
- data/lib/dawn/kb/cve_2014_0130.rb +0 -27
- data/lib/dawn/kb/cve_2014_1233.rb +0 -27
- data/lib/dawn/kb/cve_2014_1234.rb +0 -26
- data/lib/dawn/kb/cve_2014_2322.rb +0 -28
- data/lib/dawn/kb/cve_2014_2525.rb +0 -59
- data/lib/dawn/kb/cve_2014_2538.rb +0 -26
- data/lib/dawn/kb/cve_2014_3482.rb +0 -28
- data/lib/dawn/kb/cve_2014_3483.rb +0 -28
- data/lib/dawn/kb/cve_2014_3916.rb +0 -29
- data/lib/dawn/kb/cve_2014_4975.rb +0 -28
- data/lib/dawn/kb/cve_2014_7818.rb +0 -27
- data/lib/dawn/kb/cve_2014_7819.rb +0 -31
- data/lib/dawn/kb/cve_2014_7829.rb +0 -30
- data/lib/dawn/kb/cve_2014_8090.rb +0 -30
- data/lib/dawn/kb/cve_2014_9490.rb +0 -29
- data/lib/dawn/kb/cve_2015_1819.rb +0 -34
- data/lib/dawn/kb/cve_2015_1840/cve_2015_1840_a.rb +0 -28
- data/lib/dawn/kb/cve_2015_1840/cve_2015_1840_b.rb +0 -28
- data/lib/dawn/kb/cve_2015_2963.rb +0 -27
- data/lib/dawn/kb/cve_2015_3224.rb +0 -26
- data/lib/dawn/kb/cve_2015_3225.rb +0 -28
- data/lib/dawn/kb/cve_2015_3226.rb +0 -27
- data/lib/dawn/kb/cve_2015_3227.rb +0 -28
- data/lib/dawn/kb/cve_2015_3448.rb +0 -29
- data/lib/dawn/kb/cve_2015_4020.rb +0 -34
- data/lib/dawn/kb/cve_2015_5312.rb +0 -30
- data/lib/dawn/kb/cve_2015_7497.rb +0 -32
- data/lib/dawn/kb/cve_2015_7498.rb +0 -32
- data/lib/dawn/kb/cve_2015_7499.rb +0 -32
- data/lib/dawn/kb/cve_2015_7500.rb +0 -32
- data/lib/dawn/kb/cve_2015_7519.rb +0 -31
- data/lib/dawn/kb/cve_2015_7541.rb +0 -31
- data/lib/dawn/kb/cve_2015_7576.rb +0 -35
- data/lib/dawn/kb/cve_2015_7577.rb +0 -34
- data/lib/dawn/kb/cve_2015_7578.rb +0 -30
- data/lib/dawn/kb/cve_2015_7579.rb +0 -30
- data/lib/dawn/kb/cve_2015_7581.rb +0 -33
- data/lib/dawn/kb/cve_2015_8241.rb +0 -32
- data/lib/dawn/kb/cve_2015_8242.rb +0 -32
- data/lib/dawn/kb/cve_2015_8317.rb +0 -32
- data/lib/dawn/kb/cve_2016_0751.rb +0 -32
- data/lib/dawn/kb/cve_2016_0752.rb +0 -35
- data/lib/dawn/kb/cve_2016_0753.rb +0 -31
- data/lib/dawn/kb/cve_2016_2097.rb +0 -35
- data/lib/dawn/kb/cve_2016_2098.rb +0 -35
- data/lib/dawn/kb/cve_2016_5697.rb +0 -30
- data/lib/dawn/kb/cve_2016_6316.rb +0 -33
- data/lib/dawn/kb/cve_2016_6317.rb +0 -32
- data/lib/dawn/kb/cve_2016_6582.rb +0 -43
- data/lib/dawn/kb/not_revised_code.rb +0 -22
- data/lib/dawn/kb/osvdb_105971.rb +0 -29
- data/lib/dawn/kb/osvdb_108530.rb +0 -27
- data/lib/dawn/kb/osvdb_108563.rb +0 -28
- data/lib/dawn/kb/osvdb_108569.rb +0 -28
- data/lib/dawn/kb/osvdb_108570.rb +0 -27
- data/lib/dawn/kb/osvdb_115654.rb +0 -33
- data/lib/dawn/kb/osvdb_116010.rb +0 -30
- data/lib/dawn/kb/osvdb_117903.rb +0 -30
- data/lib/dawn/kb/osvdb_118579.rb +0 -31
- data/lib/dawn/kb/osvdb_118830.rb +0 -32
- data/lib/dawn/kb/osvdb_118954.rb +0 -33
- data/lib/dawn/kb/osvdb_119878.rb +0 -32
- data/lib/dawn/kb/osvdb_119927.rb +0 -33
- data/lib/dawn/kb/osvdb_120415.rb +0 -31
- data/lib/dawn/kb/osvdb_120857.rb +0 -34
- data/lib/dawn/kb/osvdb_121701.rb +0 -30
- data/lib/dawn/kb/osvdb_132234.rb +0 -34
- data/lib/dawn/kb/owasp_ror_cheatsheet.rb +0 -33
- data/lib/dawn/kb/owasp_ror_cheatsheet/check_for_backup_files.rb +0 -18
- data/lib/dawn/kb/owasp_ror_cheatsheet/check_for_safe_redirect_and_forward.rb +0 -57
- data/lib/dawn/kb/owasp_ror_cheatsheet/command_injection.rb +0 -28
- data/lib/dawn/kb/owasp_ror_cheatsheet/csrf.rb +0 -29
- data/lib/dawn/kb/owasp_ror_cheatsheet/mass_assignment_in_model.rb +0 -33
- data/lib/dawn/kb/owasp_ror_cheatsheet/security_related_headers.rb +0 -35
- data/lib/dawn/kb/owasp_ror_cheatsheet/sensitive_files.rb +0 -29
- data/lib/dawn/kb/owasp_ror_cheatsheet/session_stored_in_database.rb +0 -31
- data/lib/dawn/kb/simpleform_xss_20131129.rb +0 -28
- data/lib/dawn/knowledge_base_experimental.rb +0 -245
- data/spec/lib/kb/cve_2011_2705_spec.rb +0 -35
- data/spec/lib/kb/cve_2011_2930_spec.rb +0 -31
- data/spec/lib/kb/cve_2011_3009_spec.rb +0 -25
- data/spec/lib/kb/cve_2011_3187_spec.rb +0 -24
- data/spec/lib/kb/cve_2011_4319_spec.rb +0 -44
- data/spec/lib/kb/cve_2011_5036_spec.rb +0 -95
- data/spec/lib/kb/cve_2012_1098_spec.rb +0 -36
- data/spec/lib/kb/cve_2012_2139_spec.rb +0 -20
- data/spec/lib/kb/cve_2012_2671_spec.rb +0 -23
- data/spec/lib/kb/cve_2012_6109_spec.rb +0 -112
- data/spec/lib/kb/cve_2012_6684_spec.rb +0 -16
- data/spec/lib/kb/cve_2013_0162_spec.rb +0 -23
- data/spec/lib/kb/cve_2013_0183_spec.rb +0 -54
- data/spec/lib/kb/cve_2013_0184_spec.rb +0 -115
- data/spec/lib/kb/cve_2013_0256_spec.rb +0 -34
- data/spec/lib/kb/cve_2013_0262_spec.rb +0 -44
- data/spec/lib/kb/cve_2013_0263_spec.rb +0 -11
- data/spec/lib/kb/cve_2013_0334_spec.rb +0 -35
- data/spec/lib/kb/cve_2013_1607_spec.rb +0 -15
- data/spec/lib/kb/cve_2013_1655_spec.rb +0 -31
- data/spec/lib/kb/cve_2013_1756_spec.rb +0 -23
- data/spec/lib/kb/cve_2013_2090_spec.rb +0 -15
- data/spec/lib/kb/cve_2013_2105_spec.rb +0 -11
- data/spec/lib/kb/cve_2013_2119_spec.rb +0 -27
- data/spec/lib/kb/cve_2013_2512_spec.rb +0 -15
- data/spec/lib/kb/cve_2013_2513_spec.rb +0 -15
- data/spec/lib/kb/cve_2013_2516_spec.rb +0 -15
- data/spec/lib/kb/cve_2013_4203_spec.rb +0 -15
- data/spec/lib/kb/cve_2013_4413_spec.rb +0 -16
- data/spec/lib/kb/cve_2013_4489_spec.rb +0 -63
- data/spec/lib/kb/cve_2013_4491_spec.rb +0 -16
- data/spec/lib/kb/cve_2013_4593_spec.rb +0 -16
- data/spec/lib/kb/cve_2013_5647_spec.rb +0 -19
- data/spec/lib/kb/cve_2013_5671_spec.rb +0 -27
- data/spec/lib/kb/cve_2013_6414_spec.rb +0 -26
- data/spec/lib/kb/cve_2013_6416_spec.rb +0 -31
- data/spec/lib/kb/cve_2013_6459_spec.rb +0 -15
- data/spec/lib/kb/cve_2013_7086_spec.rb +0 -22
- data/spec/lib/kb/cve_2014_0036_spec.rb +0 -15
- data/spec/lib/kb/cve_2014_0080_spec.rb +0 -33
- data/spec/lib/kb/cve_2014_0081_spec.rb +0 -50
- data/spec/lib/kb/cve_2014_0082_spec.rb +0 -52
- data/spec/lib/kb/cve_2014_0130_spec.rb +0 -19
- data/spec/lib/kb/cve_2014_1233_spec.rb +0 -15
- data/spec/lib/kb/cve_2014_1234_spec.rb +0 -16
- data/spec/lib/kb/cve_2014_2322_spec.rb +0 -15
- data/spec/lib/kb/cve_2014_2538_spec.rb +0 -15
- data/spec/lib/kb/cve_2014_3482_spec.rb +0 -15
- data/spec/lib/kb/cve_2014_3483_spec.rb +0 -27
- data/spec/lib/kb/cve_2014_7818_spec.rb +0 -42
- data/spec/lib/kb/cve_2014_7819_spec.rb +0 -139
- data/spec/lib/kb/cve_2014_7829_spec.rb +0 -50
- data/spec/lib/kb/cve_2014_9490_spec.rb +0 -17
- data/spec/lib/kb/cve_2015_1819_spec.rb +0 -16
- data/spec/lib/kb/cve_2015_1840_spec.rb +0 -39
- data/spec/lib/kb/cve_2015_2963_spec.rb +0 -17
- data/spec/lib/kb/cve_2015_3224_spec.rb +0 -16
- data/spec/lib/kb/cve_2015_3225_spec.rb +0 -27
- data/spec/lib/kb/cve_2015_3226_spec.rb +0 -35
- data/spec/lib/kb/cve_2015_3227_spec.rb +0 -31
- data/spec/lib/kb/cve_2015_3448_spec.rb +0 -16
- data/spec/lib/kb/cve_2015_4020_spec.rb +0 -24
- data/spec/lib/kb/cve_2015_5312_spec.rb +0 -31
- data/spec/lib/kb/cve_2015_7497_spec.rb +0 -31
- data/spec/lib/kb/cve_2015_7498_spec.rb +0 -31
- data/spec/lib/kb/cve_2015_7499_spec.rb +0 -31
- data/spec/lib/kb/cve_2015_7500_spec.rb +0 -31
- data/spec/lib/kb/cve_2015_7519_spec.rb +0 -23
- data/spec/lib/kb/cve_2015_7541_spec.rb +0 -15
- data/spec/lib/kb/cve_2015_7576_spec.rb +0 -51
- data/spec/lib/kb/cve_2015_7577_spec.rb +0 -63
- data/spec/lib/kb/cve_2015_7578_spec.rb +0 -15
- data/spec/lib/kb/cve_2015_7579_spec.rb +0 -23
- data/spec/lib/kb/cve_2015_7581_spec.rb +0 -51
- data/spec/lib/kb/cve_2015_8241_spec.rb +0 -31
- data/spec/lib/kb/cve_2015_8242_spec.rb +0 -31
- data/spec/lib/kb/cve_2015_8317_spec.rb +0 -31
- data/spec/lib/kb/cve_2016_0751_spec.rb +0 -55
- data/spec/lib/kb/cve_2016_0752_spec.rb +0 -51
- data/spec/lib/kb/cve_2016_0753_spec.rb +0 -51
- data/spec/lib/kb/cve_2016_2097_spec.rb +0 -35
- data/spec/lib/kb/cve_2016_2098_spec.rb +0 -55
- data/spec/lib/kb/cve_2016_5697_spec.rb +0 -15
- data/spec/lib/kb/cve_2016_6316_spec.rb +0 -44
- data/spec/lib/kb/cve_2016_6317_spec.rb +0 -35
- data/spec/lib/kb/cve_2016_6582_spec.rb +0 -29
- data/spec/lib/kb/osvdb_105971_spec.rb +0 -15
- data/spec/lib/kb/osvdb_108530_spec.rb +0 -22
- data/spec/lib/kb/osvdb_108563_spec.rb +0 -18
- data/spec/lib/kb/osvdb_108569_spec.rb +0 -17
- data/spec/lib/kb/osvdb_108570_spec.rb +0 -17
- data/spec/lib/kb/osvdb_115654_spec.rb +0 -15
- data/spec/lib/kb/osvdb_116010_spec.rb +0 -15
- data/spec/lib/kb/osvdb_117903_spec.rb +0 -23
- data/spec/lib/kb/osvdb_118579_spec.rb +0 -8
- data/spec/lib/kb/osvdb_118830_spec.rb +0 -16
- data/spec/lib/kb/osvdb_118954_spec.rb +0 -20
- data/spec/lib/kb/osvdb_119878_spec.rb +0 -92
- data/spec/lib/kb/osvdb_119927_spec.rb +0 -16
- data/spec/lib/kb/osvdb_120415_spec.rb +0 -16
- data/spec/lib/kb/osvdb_120857_spec.rb +0 -32
- data/spec/lib/kb/osvdb_121701_spec.rb +0 -15
- data/spec/lib/kb/osvdb_132234_spec.rb +0 -15
- metadata.gz.sig +0 -0
data/lib/dawn/gemfile_lock.rb
CHANGED
|
@@ -2,8 +2,8 @@ module Dawn
|
|
|
2
2
|
class GemfileLock
|
|
3
3
|
include Dawn::Engine
|
|
4
4
|
|
|
5
|
-
def initialize(dir = "./"
|
|
6
|
-
super(dir, "Gemfile.lock", {:gemfile_name=>
|
|
5
|
+
def initialize(dir = "./")
|
|
6
|
+
super(dir, "Gemfile.lock", {:gemfile_name=>"Gemfile.lock", :guessed_mvc=>Dawn::Core.guess_mvc(File.join(dir, "Gemfile.lock"))})
|
|
7
7
|
end
|
|
8
8
|
|
|
9
9
|
end
|
data/lib/dawn/kb/basic_check.rb
CHANGED
data/lib/dawn/kb/combo_check.rb
CHANGED
|
@@ -2,7 +2,7 @@ require 'ptools'
|
|
|
2
2
|
|
|
3
3
|
module Dawn
|
|
4
4
|
module Kb
|
|
5
|
-
|
|
5
|
+
class PatternMatchCheck
|
|
6
6
|
include BasicCheck
|
|
7
7
|
|
|
8
8
|
|
|
@@ -25,7 +25,7 @@ module Dawn
|
|
|
25
25
|
|
|
26
26
|
EXCLUSION_LIST = [
|
|
27
27
|
"tags",
|
|
28
|
-
"vendor/bundle",
|
|
28
|
+
"vendor/bundle",
|
|
29
29
|
"features",
|
|
30
30
|
"specs",
|
|
31
31
|
"test"
|
|
@@ -38,10 +38,10 @@ module Dawn
|
|
|
38
38
|
@attack_pattern_is_regex = false
|
|
39
39
|
@glob = "**"
|
|
40
40
|
@attack_pattern = options[:attack_pattern] unless options[:attack_pattern].nil?
|
|
41
|
-
@negative_search = options[:negative_search] unless options[:negative_search].nil?
|
|
42
|
-
@avoid_comments = options[:avoid_comments] unless options[:avoid_comments].nil?
|
|
43
|
-
@evidences = options[:evidences] unless options[:evidences].nil?
|
|
44
|
-
@attack_pattern_is_regex = options[:attack_pattern_is_regex] unless options[:attack_pattern_is_regex].nil?
|
|
41
|
+
@negative_search = options[:negative_search] unless options[:negative_search].nil?
|
|
42
|
+
@avoid_comments = options[:avoid_comments] unless options[:avoid_comments].nil?
|
|
43
|
+
@evidences = options[:evidences] unless options[:evidences].nil?
|
|
44
|
+
@attack_pattern_is_regex = options[:attack_pattern_is_regex] unless options[:attack_pattern_is_regex].nil?
|
|
45
45
|
@glob = File.join(@glob, options[:glob]) unless options[:glob].nil?
|
|
46
46
|
debug_me("EVIDENCES ARE #{@evidences.inspect}")
|
|
47
47
|
end
|
|
@@ -60,6 +60,7 @@ module Dawn
|
|
|
60
60
|
Dir.glob(File.join("#{root_dir}", @glob)).each do |filename|
|
|
61
61
|
debug_me("#{File.basename(__FILE__)}@#{__LINE__}: analyzing #{filename}: search is #{@negative_search}")
|
|
62
62
|
matches = []
|
|
63
|
+
raise ArgumentError.new("skipping empty file") if File.zero?(filename)
|
|
63
64
|
begin
|
|
64
65
|
matches = run(load_file(filename)) if File.exists?(filename) && File.file?(filename) && ! File.binary?(filename) && ! must_exclude?(filename)
|
|
65
66
|
found = ! matches.empty?
|
|
@@ -84,17 +85,17 @@ module Dawn
|
|
|
84
85
|
return ret_value
|
|
85
86
|
end
|
|
86
87
|
|
|
87
|
-
private
|
|
88
|
+
private
|
|
88
89
|
def string_to_array(par)
|
|
89
90
|
return par if par.class == Array
|
|
90
|
-
%w(par)
|
|
91
|
+
%w(par)
|
|
91
92
|
end
|
|
92
93
|
|
|
93
94
|
def load_file(filename)
|
|
94
95
|
|
|
95
96
|
f = File.open(filename)
|
|
96
97
|
lines = f.readlines
|
|
97
|
-
f.close
|
|
98
|
+
f.close
|
|
98
99
|
|
|
99
100
|
lines
|
|
100
101
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module Dawn
|
|
2
2
|
module Kb
|
|
3
|
-
|
|
3
|
+
class RubyVersionCheck
|
|
4
4
|
include BasicCheck
|
|
5
5
|
# Array of hashes in the {:engine=>"ruby", :version=>"1.9.3", :patchlevel=>"p342"} form
|
|
6
6
|
attr_accessor :safe_rubies
|
|
@@ -29,9 +29,9 @@ module Dawn
|
|
|
29
29
|
ve = self.is_same_version?(detected_ruby[:version], vv_a)
|
|
30
30
|
vp = is_vulnerable_patchlevel?(detected_ruby[:version], detected_ruby[:patchlevel])
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
debug_verbosely("#{__FILE__}@#{__LINE__}: check: #{self.name}, engine is vulnerable?=#{vengine}, version is vulnerable?=#{vv}, is same version?=#{ve}, is_vulnerable_patchlevel?=#{vp}->#{vv && vengine}, #{(ve && vp && vengine )}")
|
|
33
|
+
debug_verbosely("#{__FILE__}@#{__LINE__}: safe ruby is: #{@safe_rubies}")
|
|
34
|
+
debug_verbosely("#{__FILE__}@#{__LINE__}: detected ruby is: #{@detected_ruby}")
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
|
|
@@ -42,7 +42,7 @@ module Dawn
|
|
|
42
42
|
@status = (ve && vp && vengine )
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
-
|
|
45
|
+
debug_verbosely("STATUS:#{@status}")
|
|
46
46
|
self.evidences << "#{@detected_ruby[:engine]} v#{@detected_ruby[:version]}-#{@detected_ruby[:patchlevel]} detected" if @status
|
|
47
47
|
return @status
|
|
48
48
|
|
|
@@ -58,7 +58,7 @@ module Dawn
|
|
|
58
58
|
|
|
59
59
|
def is_same_version?(target, fixes = [])
|
|
60
60
|
fixes.each do |f|
|
|
61
|
-
|
|
61
|
+
debug_verbosely("F=#{f}, TARGET=#{target}")
|
|
62
62
|
return true if f == target
|
|
63
63
|
end
|
|
64
64
|
false
|
|
@@ -66,23 +66,24 @@ module Dawn
|
|
|
66
66
|
|
|
67
67
|
def is_vulnerable_patchlevel?(version, patchlevel)
|
|
68
68
|
fixes = []
|
|
69
|
-
|
|
69
|
+
debug_verbosely "is_vulnerable_patchlevel? called with VERSION=#{version} and PLEVEL=#{patchlevel}"
|
|
70
70
|
@safe_rubies.each do |ss|
|
|
71
71
|
fixes << ss[:patchlevel].split("p")[1].to_i if ss[:version] == version
|
|
72
72
|
end
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
debug_verbosely "FIXES IS EMPTY" if fixes.empty?
|
|
75
|
+
debug_verbosely "FIXES LIST IS #{fixes}" unless fixes.empty?
|
|
76
76
|
return true if fixes.empty?
|
|
77
77
|
|
|
78
78
|
t = patchlevel.split("p")[1].to_i if patchlevel.include? 'p'
|
|
79
79
|
t = patchlevel.to_i unless patchlevel.include? 'p'
|
|
80
80
|
fixes.each do |f|
|
|
81
|
-
|
|
81
|
+
debug_verbosely "PATCHLEVEL FIXES = #{f}, PATCHLEVEL TARGET = #{t}"
|
|
82
82
|
return true if f > t
|
|
83
83
|
end
|
|
84
84
|
false
|
|
85
85
|
end
|
|
86
|
+
|
|
86
87
|
end
|
|
87
88
|
end
|
|
88
89
|
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Dawn
|
|
2
|
+
module Kb
|
|
3
|
+
# While working on the KB rebase, fetching data from NVD API, I suddenly
|
|
4
|
+
# realize I must change the way a vulnerable dependency must be handled.
|
|
5
|
+
# Instead of changing what is working right now, I'll add a new dependency
|
|
6
|
+
# check ruby class
|
|
7
|
+
# NVD bulletins lists versions that are vulnerable and it would break
|
|
8
|
+
# automatism adding a post data fetching step to realize which is the first
|
|
9
|
+
# safe version.
|
|
10
|
+
#
|
|
11
|
+
# This class will handle a dependency name, the version found in
|
|
12
|
+
# Gemfile.lock and an array of vulnerable versions. If the version found is
|
|
13
|
+
# in the array, than the vuln? method returns true.
|
|
14
|
+
# This is an approach far more easy rathern than the one chosen in the past.
|
|
15
|
+
class UnsafeDependencyCheck
|
|
16
|
+
include BasicCheck
|
|
17
|
+
|
|
18
|
+
attr_accessor :dependencies
|
|
19
|
+
attr_accessor :vulnerable_version_array
|
|
20
|
+
|
|
21
|
+
def initialize(options)
|
|
22
|
+
super(options)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def vuln?
|
|
26
|
+
ret = false
|
|
27
|
+
|
|
28
|
+
# 20210325: I know... a single check handles a single dependency so,
|
|
29
|
+
# this should not be an array. This involves too many underlying
|
|
30
|
+
# changes one day I'll make.
|
|
31
|
+
@dependencies.each do |dep|
|
|
32
|
+
unless @vulnerable_version_array.nil? or @vulnerable_version_array.empty?
|
|
33
|
+
if dep[:name] == @vulnerable_version_array[0][:name]
|
|
34
|
+
return false if @vulnerable_version_array[0][:version].nil? or @vulnerable_version_array[0][:version].empty?
|
|
35
|
+
return true if @vulnerable_version_array[0][:version].include? dep[:version]
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
return false
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -23,16 +23,16 @@ module Dawn
|
|
|
23
23
|
@save_major ||= options[:save_major]
|
|
24
24
|
@debug ||= options[:debug]
|
|
25
25
|
@enable_warning ||= options[:enable_warning]
|
|
26
|
-
|
|
26
|
+
debug_verbosely "VersionCheck initialized"
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def vuln?
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
debug_verbosely "Detected version is #{@detected}"
|
|
31
|
+
debug_verbosely "Safe versions array is #{@safe}"
|
|
32
|
+
debug_verbosely "Deprecated versions array is #{@deprecated}. I'll mark them as vulnerable" unless @deprecated.nil?
|
|
33
|
+
debug_verbosely "Excluded versions array is #{@excluded}. I'll mark them as not vulnerable" unless @excluded.nil?
|
|
34
|
+
debug_verbosely "SAVE_MINOR FLAG = #{@save_minor}"
|
|
35
|
+
debug_verbosely "SAVE_MAJOR FLAG = #{@save_major}"
|
|
36
36
|
|
|
37
37
|
@status = :deprecated if is_detected_deprecated?
|
|
38
38
|
return debug_me_and_return_false("detected version #{detected} is marked to be excluded for vulnerable ones") if is_detected_excluded?
|
|
@@ -41,8 +41,25 @@ module Dawn
|
|
|
41
41
|
return debug_me_and_return_false("detected version #{@detected} found as is in safe array") if is_detected_in_safe?
|
|
42
42
|
return debug_me_and_return_false("detected version #{@detected} is higher than all version marked safe") if is_detected_highest?
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
check_versions = nil
|
|
45
|
+
@safe.each do |safe_version|
|
|
46
|
+
|
|
47
|
+
sva = version_string_to_array(safe_version)
|
|
48
|
+
dva = version_string_to_array(@detected)
|
|
49
|
+
|
|
50
|
+
next unless is_same_version?(sva[:version], dva[:version], true)
|
|
51
|
+
next unless sva[:version].count == dva[:version].count || is_beta_check?(sva[:beta], dva[:beta]) || is_rc_check?(sva[:rc], dva[:rc]) || is_pre_check?(sva[:pre], dva[:pre])
|
|
52
|
+
|
|
53
|
+
check_versions = [safe_version]
|
|
54
|
+
break
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
debug_verbosely "vuln?: limited check_versions: #{check_versions.inspect}"
|
|
58
|
+
check_versions ||= @safe
|
|
59
|
+
debug_verbosely "vuln?: fallback check_versions: #{check_versions.inspect}"
|
|
60
|
+
|
|
61
|
+
check_versions.sort.each do |s|
|
|
62
|
+
debug_verbosely "vuln?: evaluating #{@detected} against save version: #{s}"
|
|
46
63
|
|
|
47
64
|
@save_minor_fix = save_minor_fix
|
|
48
65
|
@save_major_fix = save_major_fix
|
|
@@ -50,7 +67,7 @@ module Dawn
|
|
|
50
67
|
|
|
51
68
|
vuln = is_vulnerable_version?(s, @detected)
|
|
52
69
|
|
|
53
|
-
|
|
70
|
+
debug_verbosely "DETECTED #{@detected} is marked VULN=#{vuln} against #{s} ( SAVE_MINOR_FIX=#{@save_minor_fix} SAVE_MAJOR_FIX=#{@save_major_fix})"
|
|
54
71
|
return true if vuln
|
|
55
72
|
end
|
|
56
73
|
|
|
@@ -67,7 +84,7 @@ module Dawn
|
|
|
67
84
|
def is_detected_highest?
|
|
68
85
|
higher= @detected
|
|
69
86
|
@safe.sort.each do |s|
|
|
70
|
-
|
|
87
|
+
debug_verbosely("higher is #{higher}")
|
|
71
88
|
higher=s if is_higher?(s, higher)
|
|
72
89
|
end
|
|
73
90
|
return (higher == @detected)
|
|
@@ -120,7 +137,7 @@ module Dawn
|
|
|
120
137
|
ret = ver && beta && rc unless same
|
|
121
138
|
ret = beta && rc if same
|
|
122
139
|
|
|
123
|
-
|
|
140
|
+
debug_verbosely("is_higher? a=#{a}, b=#{b} VER=#{ver} - BETA=#{beta} - RC=#{rc} - SAME=#{same} - a>b? = (#{ret})")
|
|
124
141
|
return ret
|
|
125
142
|
end
|
|
126
143
|
|
|
@@ -129,7 +146,7 @@ module Dawn
|
|
|
129
146
|
dva = version_string_to_array(@detected)[:version]
|
|
130
147
|
@safe.sort.each do |s|
|
|
131
148
|
sva = version_string_to_array(s)[:version]
|
|
132
|
-
|
|
149
|
+
debug_verbosely "is_there_an_higher_major_version? DVA=#{dva} - SVA=#{sva}"
|
|
133
150
|
return debug_me_and_return_true("is_there_an_higher_major_version? is returning true for #{@detected}") if dva[0] < sva[0]
|
|
134
151
|
end
|
|
135
152
|
return debug_me_and_return_false("is_there_an_higher_major_version? is returning false")
|
|
@@ -171,8 +188,8 @@ module Dawn
|
|
|
171
188
|
sva = version_string_to_array(s)[:version]
|
|
172
189
|
sM = is_same_major?(sva, dva)
|
|
173
190
|
sm = is_same_minor?(sva, dva)
|
|
174
|
-
|
|
175
|
-
|
|
191
|
+
debug_verbosely("save_minor_fix: SVA=#{sva};DVA=#{dva};SAME_MAJOR? = #{sM}; SAME_MINOR?=#{sm}; ( dva[2] >= sva[2] )=#{(dva[2] >= sva[2])}")
|
|
192
|
+
debug_verbosely("save_minor_fix: is_there_higher_minor_version? = #{hm}")
|
|
176
193
|
return true if sM and sm and dva[2] >= sva[2] && hm
|
|
177
194
|
return true if sM and hm
|
|
178
195
|
end
|
|
@@ -212,7 +229,7 @@ module Dawn
|
|
|
212
229
|
return (safe_version[2] > detected_version[2])
|
|
213
230
|
end
|
|
214
231
|
def is_vulnerable_aux_patch?(safe_version, detected_version)
|
|
215
|
-
|
|
232
|
+
debug_verbosely "is_vulnerable_aux_patch?: SV[3]=#{safe_version[3]}, DV[3]=#{detected_version[3]}"
|
|
216
233
|
return true if detected_version[3].nil? and ! safe_version[3].nil?
|
|
217
234
|
return false if safe_version[3].nil? || detected_version[3].nil?
|
|
218
235
|
return (safe_version[3] > detected_version[3])
|
|
@@ -255,11 +272,11 @@ module Dawn
|
|
|
255
272
|
# eg. in case of a beta release, the array is [5,0,0,1] meaning
|
|
256
273
|
# 5.0.0.beta1. Of course it must be handled in a different way than
|
|
257
274
|
# 5.0.0.1 release that it will result in the same array
|
|
258
|
-
|
|
275
|
+
debug_verbosely "is_same_version? with limit=TRUE"
|
|
259
276
|
ret = true if (safe_version_array[0] == detected_version_array[0]) && (safe_version_array[1] == detected_version_array[1]) && (safe_version_array[2] == detected_version_array[2])
|
|
260
277
|
end
|
|
261
278
|
|
|
262
|
-
|
|
279
|
+
debug_verbosely "is_same_version? SVA=#{safe_version_array} DVA=#{detected_version_array} RET=#{ret}"
|
|
263
280
|
|
|
264
281
|
return ret
|
|
265
282
|
end
|
|
@@ -276,7 +293,7 @@ module Dawn
|
|
|
276
293
|
# if the safe_version_beta is 0 then the detected_version_beta is
|
|
277
294
|
# vulnerable by design, since the safe version is a stable and we
|
|
278
295
|
# detected a beta.
|
|
279
|
-
|
|
296
|
+
debug_verbosely("is_vulnerable_beta?: safe_version_beta=#{safe_version_beta} - detected_version_beta=#{detected_version_beta}")
|
|
280
297
|
return debug_me_and_return_false("is_vulnerable_beta? = FALSE") if safe_version_beta != -1 and detected_version_beta == -1
|
|
281
298
|
return debug_me_and_return_true("is_vulnerable_beta? = TRUE") if safe_version_beta == -1 and detected_version_beta != -1
|
|
282
299
|
return debug_me_and_return_true("is_vulnerable_beta? = TRUE") if safe_version_beta == 0 && detected_version_beta != -1
|
|
@@ -300,7 +317,7 @@ module Dawn
|
|
|
300
317
|
# if the safe_version_rc is 0 then the detected_version_rc is
|
|
301
318
|
# vulnerable by design, since the safe version is a stable and we
|
|
302
319
|
# detected a rc.
|
|
303
|
-
|
|
320
|
+
debug_verbosely "entering is_vulnerable_rc?: s=#{safe_version_rc}, d=#{detected_version_rc}"
|
|
304
321
|
return debug_me_and_return_false("is_vulnerable_rc? = FALSE") if detected_version_rc == -1
|
|
305
322
|
|
|
306
323
|
return debug_me_and_return_false("is_vulnerable_rc? = FALSE") if safe_version_rc != -1 and detected_version_rc == -1
|
|
@@ -340,8 +357,8 @@ module Dawn
|
|
|
340
357
|
def is_vulnerable_version?(safe_version, detected_version)
|
|
341
358
|
sva = version_string_to_array(safe_version)
|
|
342
359
|
dva = version_string_to_array(detected_version)
|
|
343
|
-
|
|
344
|
-
|
|
360
|
+
debug_verbosely("SVA=#{sva.inspect}")
|
|
361
|
+
debug_verbosely("DVA=#{dva.inspect}")
|
|
345
362
|
safe_version_array = sva[:version]
|
|
346
363
|
detected_version_array = dva[:version]
|
|
347
364
|
|
|
@@ -353,7 +370,7 @@ module Dawn
|
|
|
353
370
|
patch = is_vulnerable_patch?(safe_version_array, detected_version_array)
|
|
354
371
|
aux_patch = is_vulnerable_aux_patch?(safe_version_array, detected_version_array)
|
|
355
372
|
|
|
356
|
-
|
|
373
|
+
debug_verbosely "is_vulnerable_version? SAVE_VERSION=#{safe_version},DETECTED=#{detected_version} -> IS_VULN_MAJOR?=#{major} IS_VULN_MINOR?=#{minor} IS_VULN_PATCH?=#{patch} IS_VULN_AUX_PATCH=#{aux_patch} SAVE_MINOR_FIX=#{@save_minor_fix} SAVE_MAJOR_FIX=#{@save_major_fix}"
|
|
357
374
|
|
|
358
375
|
return debug_me_and_return_false("#{detected_version} doesn't have a vulnerable MAJOR number") if is_higher_major?(detected_version, safe_version) #and minor and patch
|
|
359
376
|
|
|
@@ -400,7 +417,7 @@ module Dawn
|
|
|
400
417
|
# I'll support also nonsense checks.
|
|
401
418
|
|
|
402
419
|
$logger.warn "Setting the predicate #{dep} will mark all versions as deprecated" unless self.enable_warning.nil?
|
|
403
|
-
|
|
420
|
+
debug_verbosely "You kindly mark #{detected_version} as deprecated with this predicate #{dep}"
|
|
404
421
|
return true
|
|
405
422
|
end
|
|
406
423
|
|
data/lib/dawn/knowledge_base.rb
CHANGED
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
require 'singleton'
|
|
2
|
+
|
|
3
|
+
require 'rubygems/package'
|
|
4
|
+
|
|
5
|
+
# For HTTPS communication to check for KB updates and to fetch them
|
|
6
|
+
require 'net/http'
|
|
7
|
+
require 'uri'
|
|
8
|
+
|
|
9
|
+
require 'yaml'
|
|
10
|
+
require 'digest'
|
|
11
|
+
|
|
12
|
+
require 'date'
|
|
13
|
+
|
|
1
14
|
# Core KB
|
|
2
15
|
require "dawn/kb/basic_check"
|
|
3
16
|
require "dawn/kb/pattern_match_check"
|
|
@@ -7,631 +20,222 @@ require "dawn/kb/operating_system_check"
|
|
|
7
20
|
require "dawn/kb/combo_check"
|
|
8
21
|
require "dawn/kb/version_check"
|
|
9
22
|
require "dawn/kb/deprecation_check"
|
|
10
|
-
require "dawn/kb/
|
|
11
|
-
|
|
12
|
-
# Q&A related checks
|
|
13
|
-
## Not revised code
|
|
14
|
-
require "dawn/kb/not_revised_code"
|
|
15
|
-
|
|
16
|
-
## Owasp ROR Cheatsheet
|
|
17
|
-
require 'dawn/kb/owasp_ror_cheatsheet/command_injection'
|
|
18
|
-
require 'dawn/kb/owasp_ror_cheatsheet/csrf'
|
|
19
|
-
require 'dawn/kb/owasp_ror_cheatsheet/session_stored_in_database'
|
|
20
|
-
require 'dawn/kb/owasp_ror_cheatsheet/mass_assignment_in_model'
|
|
21
|
-
require 'dawn/kb/owasp_ror_cheatsheet/security_related_headers'
|
|
22
|
-
require 'dawn/kb/owasp_ror_cheatsheet/check_for_safe_redirect_and_forward'
|
|
23
|
-
require 'dawn/kb/owasp_ror_cheatsheet/sensitive_files'
|
|
24
|
-
|
|
25
|
-
# Security checks with no or pending CVE
|
|
26
|
-
|
|
27
|
-
# A XSS issue on Simple Form gem reported by Rafael Mendonça França on
|
|
28
|
-
# November, 29 2013
|
|
29
|
-
#
|
|
30
|
-
# https://groups.google.com/forum/#!topic/ruby-security-ann/flHbLMb07tE
|
|
31
|
-
require "dawn/kb/simpleform_xss_20131129"
|
|
32
|
-
|
|
33
|
-
# CVE - 2004
|
|
34
|
-
require "dawn/kb/cve_2004_0755"
|
|
35
|
-
require "dawn/kb/cve_2004_0983"
|
|
36
|
-
|
|
37
|
-
# CVE - 2005
|
|
38
|
-
require "dawn/kb/cve_2005_1992"
|
|
39
|
-
require "dawn/kb/cve_2005_2337"
|
|
40
|
-
|
|
41
|
-
# CVE - 2006
|
|
42
|
-
require "dawn/kb/cve_2006_1931"
|
|
43
|
-
require "dawn/kb/cve_2006_2582"
|
|
44
|
-
require "dawn/kb/cve_2006_3694"
|
|
45
|
-
require "dawn/kb/cve_2006_4112"
|
|
46
|
-
require "dawn/kb/cve_2006_5467"
|
|
47
|
-
require "dawn/kb/cve_2006_6303"
|
|
48
|
-
require "dawn/kb/cve_2006_6852"
|
|
49
|
-
require "dawn/kb/cve_2006_6979"
|
|
50
|
-
|
|
51
|
-
# CVE - 2007
|
|
52
|
-
require "dawn/kb/cve_2007_0469"
|
|
53
|
-
require "dawn/kb/cve_2007_5162"
|
|
54
|
-
require "dawn/kb/cve_2007_5379"
|
|
55
|
-
require "dawn/kb/cve_2007_5380"
|
|
56
|
-
require "dawn/kb/cve_2007_5770"
|
|
57
|
-
require "dawn/kb/cve_2007_6077"
|
|
58
|
-
require "dawn/kb/cve_2007_6612"
|
|
59
|
-
|
|
60
|
-
# CVE - 2008
|
|
61
|
-
|
|
62
|
-
require "dawn/kb/cve_2008_1145"
|
|
63
|
-
require "dawn/kb/cve_2008_1891"
|
|
64
|
-
require "dawn/kb/cve_2008_2376"
|
|
65
|
-
require "dawn/kb/cve_2008_2662"
|
|
66
|
-
require "dawn/kb/cve_2008_2663"
|
|
67
|
-
require "dawn/kb/cve_2008_2664"
|
|
68
|
-
require "dawn/kb/cve_2008_2725"
|
|
69
|
-
require "dawn/kb/cve_2008_3655"
|
|
70
|
-
require "dawn/kb/cve_2008_3657"
|
|
71
|
-
require "dawn/kb/cve_2008_3790"
|
|
72
|
-
require "dawn/kb/cve_2008_3905"
|
|
73
|
-
require "dawn/kb/cve_2008_4094"
|
|
74
|
-
require "dawn/kb/cve_2008_4310"
|
|
75
|
-
require "dawn/kb/cve_2008_5189"
|
|
76
|
-
require "dawn/kb/cve_2008_7248"
|
|
77
|
-
|
|
78
|
-
# CVE - 2009
|
|
79
|
-
require "dawn/kb/cve_2009_4078"
|
|
80
|
-
require "dawn/kb/cve_2009_4124"
|
|
81
|
-
require "dawn/kb/cve_2009_4214"
|
|
82
|
-
|
|
83
|
-
# CVE - 2010
|
|
84
|
-
require "dawn/kb/cve_2010_1330"
|
|
85
|
-
require "dawn/kb/cve_2010_2489"
|
|
86
|
-
require "dawn/kb/cve_2010_3933"
|
|
87
|
-
|
|
88
|
-
# CVE - 2011
|
|
89
|
-
require "dawn/kb/cve_2011_0188"
|
|
90
|
-
require "dawn/kb/cve_2011_0446"
|
|
91
|
-
require "dawn/kb/cve_2011_0447"
|
|
92
|
-
require "dawn/kb/cve_2011_0739"
|
|
93
|
-
require "dawn/kb/cve_2011_0995"
|
|
94
|
-
require "dawn/kb/cve_2011_1004"
|
|
95
|
-
require "dawn/kb/cve_2011_1005"
|
|
96
|
-
require "dawn/kb/cve_2011_2197"
|
|
97
|
-
require "dawn/kb/cve_2011_2686"
|
|
98
|
-
require "dawn/kb/cve_2011_2705"
|
|
99
|
-
require "dawn/kb/cve_2011_2929"
|
|
100
|
-
require "dawn/kb/cve_2011_2930"
|
|
101
|
-
require "dawn/kb/cve_2011_2931"
|
|
102
|
-
require "dawn/kb/cve_2011_2932"
|
|
103
|
-
require "dawn/kb/cve_2011_3009"
|
|
104
|
-
require "dawn/kb/cve_2011_3186"
|
|
105
|
-
require "dawn/kb/cve_2011_3187"
|
|
106
|
-
require "dawn/kb/cve_2011_4319"
|
|
107
|
-
require "dawn/kb/cve_2011_4815"
|
|
108
|
-
require "dawn/kb/cve_2011_5036"
|
|
109
|
-
|
|
110
|
-
# CVE - 2012
|
|
111
|
-
require "dawn/kb/cve_2012_1098"
|
|
112
|
-
require "dawn/kb/cve_2012_1099"
|
|
113
|
-
require "dawn/kb/cve_2012_1241"
|
|
114
|
-
require "dawn/kb/cve_2012_2139"
|
|
115
|
-
require "dawn/kb/cve_2012_2140"
|
|
116
|
-
require "dawn/kb/cve_2012_2660"
|
|
117
|
-
require "dawn/kb/cve_2012_2661"
|
|
118
|
-
require "dawn/kb/cve_2012_2671"
|
|
119
|
-
require "dawn/kb/cve_2012_2694"
|
|
120
|
-
require "dawn/kb/cve_2012_2695"
|
|
121
|
-
require "dawn/kb/cve_2012_3424"
|
|
122
|
-
require "dawn/kb/cve_2012_3463"
|
|
123
|
-
require "dawn/kb/cve_2012_3464"
|
|
124
|
-
require "dawn/kb/cve_2012_3465"
|
|
125
|
-
require "dawn/kb/cve_2012_4464"
|
|
126
|
-
require "dawn/kb/cve_2012_4466"
|
|
127
|
-
require "dawn/kb/cve_2012_4481"
|
|
128
|
-
require "dawn/kb/cve_2012_4522"
|
|
129
|
-
require "dawn/kb/cve_2012_5370"
|
|
130
|
-
require "dawn/kb/cve_2012_5371"
|
|
131
|
-
require "dawn/kb/cve_2012_5380"
|
|
132
|
-
require "dawn/kb/cve_2012_6109"
|
|
133
|
-
require "dawn/kb/cve_2012_6134"
|
|
134
|
-
require "dawn/kb/cve_2012_6496"
|
|
135
|
-
require "dawn/kb/cve_2012_6497"
|
|
136
|
-
require "dawn/kb/cve_2012_6684"
|
|
137
|
-
|
|
138
|
-
# CVE - 2013
|
|
139
|
-
require "dawn/kb/cve_2013_0155"
|
|
140
|
-
require "dawn/kb/cve_2013_0156"
|
|
141
|
-
require "dawn/kb/cve_2013_0162"
|
|
142
|
-
require "dawn/kb/cve_2013_0175"
|
|
143
|
-
require "dawn/kb/cve_2013_0183"
|
|
144
|
-
require "dawn/kb/cve_2013_0184"
|
|
145
|
-
require "dawn/kb/cve_2013_0233"
|
|
146
|
-
require "dawn/kb/cve_2013_0256"
|
|
147
|
-
require "dawn/kb/cve_2013_0262"
|
|
148
|
-
require "dawn/kb/cve_2013_0263"
|
|
149
|
-
require "dawn/kb/cve_2013_0269"
|
|
150
|
-
require "dawn/kb/cve_2013_0276"
|
|
151
|
-
require "dawn/kb/cve_2013_0277"
|
|
152
|
-
require "dawn/kb/cve_2013_0284"
|
|
153
|
-
require "dawn/kb/cve_2013_0285"
|
|
154
|
-
require "dawn/kb/cve_2013_0333"
|
|
155
|
-
require "dawn/kb/cve_2013_0334"
|
|
156
|
-
require "dawn/kb/cve_2013_1607"
|
|
157
|
-
require "dawn/kb/cve_2013_1655"
|
|
158
|
-
require "dawn/kb/cve_2013_1656"
|
|
159
|
-
require "dawn/kb/cve_2013_1756"
|
|
160
|
-
require "dawn/kb/cve_2013_1800"
|
|
161
|
-
require "dawn/kb/cve_2013_1801"
|
|
162
|
-
require "dawn/kb/cve_2013_1802"
|
|
163
|
-
require "dawn/kb/cve_2013_1812"
|
|
164
|
-
require "dawn/kb/cve_2013_1821"
|
|
165
|
-
require "dawn/kb/cve_2013_1854"
|
|
166
|
-
require "dawn/kb/cve_2013_1855"
|
|
167
|
-
require "dawn/kb/cve_2013_1856"
|
|
168
|
-
require "dawn/kb/cve_2013_1857"
|
|
169
|
-
require "dawn/kb/cve_2013_1875"
|
|
170
|
-
require "dawn/kb/cve_2013_1898"
|
|
171
|
-
require "dawn/kb/cve_2013_1911"
|
|
172
|
-
require "dawn/kb/cve_2013_1933"
|
|
173
|
-
require "dawn/kb/cve_2013_1947"
|
|
174
|
-
require "dawn/kb/cve_2013_1948"
|
|
175
|
-
require "dawn/kb/cve_2013_2065"
|
|
176
|
-
require "dawn/kb/cve_2013_2090"
|
|
177
|
-
require "dawn/kb/cve_2013_2105"
|
|
178
|
-
require "dawn/kb/cve_2013_2119"
|
|
179
|
-
require "dawn/kb/cve_2013_2512"
|
|
180
|
-
require "dawn/kb/cve_2013_2513"
|
|
181
|
-
require "dawn/kb/cve_2013_2516"
|
|
182
|
-
require "dawn/kb/cve_2013_2615"
|
|
183
|
-
require "dawn/kb/cve_2013_2616"
|
|
184
|
-
require "dawn/kb/cve_2013_2617"
|
|
185
|
-
require "dawn/kb/cve_2013_3221"
|
|
186
|
-
require "dawn/kb/cve_2013_4164"
|
|
187
|
-
require "dawn/kb/cve_2013_4203"
|
|
188
|
-
require "dawn/kb/cve_2013_4389"
|
|
189
|
-
require "dawn/kb/cve_2013_4413"
|
|
190
|
-
require "dawn/kb/cve_2013_4457"
|
|
191
|
-
require "dawn/kb/cve_2013_4478"
|
|
192
|
-
require "dawn/kb/cve_2013_4479"
|
|
193
|
-
require "dawn/kb/cve_2013_4489"
|
|
194
|
-
require "dawn/kb/cve_2013_4491"
|
|
195
|
-
require "dawn/kb/cve_2013_4492"
|
|
196
|
-
require "dawn/kb/cve_2013_4562"
|
|
197
|
-
require "dawn/kb/cve_2013_4593"
|
|
198
|
-
require "dawn/kb/cve_2013_5647"
|
|
199
|
-
require "dawn/kb/cve_2013_5671"
|
|
200
|
-
require "dawn/kb/cve_2013_6414"
|
|
201
|
-
require "dawn/kb/cve_2013_6415"
|
|
202
|
-
require "dawn/kb/cve_2013_6416"
|
|
203
|
-
require "dawn/kb/cve_2013_6417"
|
|
204
|
-
require "dawn/kb/cve_2013_6421"
|
|
205
|
-
require "dawn/kb/cve_2013_6459"
|
|
206
|
-
require "dawn/kb/cve_2013_6460"
|
|
207
|
-
require "dawn/kb/cve_2013_6461"
|
|
208
|
-
require "dawn/kb/cve_2013_7086"
|
|
209
|
-
|
|
210
|
-
# CVE - 2014
|
|
211
|
-
|
|
212
|
-
require "dawn/kb/cve_2014_0036"
|
|
213
|
-
require "dawn/kb/cve_2014_0080"
|
|
214
|
-
require "dawn/kb/cve_2014_0081"
|
|
215
|
-
require "dawn/kb/cve_2014_0082"
|
|
216
|
-
require "dawn/kb/cve_2014_0130"
|
|
217
|
-
require "dawn/kb/cve_2014_1233"
|
|
218
|
-
require "dawn/kb/cve_2014_1234"
|
|
219
|
-
require "dawn/kb/cve_2014_2322"
|
|
220
|
-
require "dawn/kb/cve_2014_2525"
|
|
221
|
-
require "dawn/kb/cve_2014_2538"
|
|
222
|
-
require "dawn/kb/cve_2014_3482"
|
|
223
|
-
require "dawn/kb/cve_2014_3483"
|
|
224
|
-
require "dawn/kb/cve_2014_3916"
|
|
225
|
-
require "dawn/kb/cve_2014_4975"
|
|
226
|
-
require "dawn/kb/cve_2014_7818"
|
|
227
|
-
require "dawn/kb/cve_2014_7819"
|
|
228
|
-
require "dawn/kb/cve_2014_7829"
|
|
229
|
-
require "dawn/kb/cve_2014_8090"
|
|
230
|
-
require "dawn/kb/cve_2014_9490"
|
|
231
|
-
|
|
232
|
-
# CVE - 2015
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
require "dawn/kb/cve_2015_1819"
|
|
236
|
-
# CVE-2015-1840 is spread in two classes because a single CVE is assigned to a
|
|
237
|
-
# vulnerability affecting two differents but related gems.
|
|
238
|
-
require "dawn/kb/cve_2015_1840/cve_2015_1840_a"
|
|
239
|
-
require "dawn/kb/cve_2015_1840/cve_2015_1840_b"
|
|
240
|
-
require "dawn/kb/cve_2015_2963"
|
|
241
|
-
require "dawn/kb/cve_2015_3224"
|
|
242
|
-
require "dawn/kb/cve_2015_3225"
|
|
243
|
-
require "dawn/kb/cve_2015_3226"
|
|
244
|
-
require "dawn/kb/cve_2015_3227"
|
|
245
|
-
require "dawn/kb/cve_2015_3448"
|
|
246
|
-
require "dawn/kb/cve_2015_4020"
|
|
247
|
-
require "dawn/kb/cve_2015_5312"
|
|
248
|
-
require "dawn/kb/cve_2015_7497"
|
|
249
|
-
require "dawn/kb/cve_2015_7498"
|
|
250
|
-
require "dawn/kb/cve_2015_7499"
|
|
251
|
-
require "dawn/kb/cve_2015_7500"
|
|
252
|
-
require "dawn/kb/cve_2015_7519"
|
|
253
|
-
require "dawn/kb/cve_2015_7541"
|
|
254
|
-
require "dawn/kb/cve_2015_7576"
|
|
255
|
-
require "dawn/kb/cve_2015_7577"
|
|
256
|
-
require "dawn/kb/cve_2015_7578"
|
|
257
|
-
require "dawn/kb/cve_2015_7579"
|
|
258
|
-
require "dawn/kb/cve_2015_7581"
|
|
259
|
-
require "dawn/kb/cve_2015_8241"
|
|
260
|
-
require "dawn/kb/cve_2015_8242"
|
|
261
|
-
require "dawn/kb/cve_2015_8317"
|
|
262
|
-
|
|
263
|
-
# CVE - 2016
|
|
264
|
-
|
|
265
|
-
require "dawn/kb/cve_2016_0751"
|
|
266
|
-
require "dawn/kb/cve_2016_0752"
|
|
267
|
-
require "dawn/kb/cve_2016_0753"
|
|
268
|
-
require "dawn/kb/cve_2016_2097"
|
|
269
|
-
require "dawn/kb/cve_2016_2098"
|
|
270
|
-
require "dawn/kb/cve_2016_5697"
|
|
271
|
-
require "dawn/kb/cve_2016_6316"
|
|
272
|
-
require "dawn/kb/cve_2016_6317"
|
|
273
|
-
require "dawn/kb/cve_2016_6582"
|
|
274
|
-
|
|
275
|
-
# OSVDB
|
|
276
|
-
|
|
277
|
-
require "dawn/kb/osvdb_105971"
|
|
278
|
-
require "dawn/kb/osvdb_108569"
|
|
279
|
-
require "dawn/kb/osvdb_108570"
|
|
280
|
-
require "dawn/kb/osvdb_108530"
|
|
281
|
-
require "dawn/kb/osvdb_108563"
|
|
282
|
-
require "dawn/kb/osvdb_115654"
|
|
283
|
-
require "dawn/kb/osvdb_116010"
|
|
284
|
-
require "dawn/kb/osvdb_117903"
|
|
285
|
-
require "dawn/kb/osvdb_118579"
|
|
286
|
-
require "dawn/kb/osvdb_118830"
|
|
287
|
-
require "dawn/kb/osvdb_118954"
|
|
288
|
-
require "dawn/kb/osvdb_119878"
|
|
289
|
-
require "dawn/kb/osvdb_119927"
|
|
290
|
-
require "dawn/kb/osvdb_120415"
|
|
291
|
-
require "dawn/kb/osvdb_120857"
|
|
292
|
-
require "dawn/kb/osvdb_121701"
|
|
293
|
-
require "dawn/kb/osvdb_132234"
|
|
294
|
-
|
|
295
|
-
|
|
23
|
+
require "dawn/kb/rubygem_check"
|
|
24
|
+
require "dawn/kb/unsafe_depedency_check"
|
|
296
25
|
|
|
297
26
|
module Dawn
|
|
298
|
-
#
|
|
27
|
+
# This is the YAML powered knowledge base
|
|
28
|
+
#
|
|
29
|
+
# Dawnscanner KB will be a bunch of YAML file, stored in a hierachy of
|
|
30
|
+
# directories resembling security checks family. A digital signature will be
|
|
31
|
+
# also available to prevent KB tampering.
|
|
32
|
+
#
|
|
33
|
+
# This class will be accountable for:
|
|
34
|
+
# + check for KB upgrade
|
|
35
|
+
# + fetching the KB file from the Internet
|
|
36
|
+
# + verifying the database signature
|
|
37
|
+
# + reading YAML file, creating the security check array
|
|
38
|
+
#
|
|
39
|
+
# Another big change will be the MVC passed as constructor parameter, so only
|
|
40
|
+
# the checks regarding the particular app, will be loaded in the security
|
|
41
|
+
# check array. This should speed up BasicCheck internal routines.
|
|
42
|
+
#
|
|
43
|
+
# Class usage will be very simple. After getting the singleton instance, you
|
|
44
|
+
# will load the KB content. The load method will be also responsible about
|
|
45
|
+
# all relevant checks.
|
|
46
|
+
#
|
|
47
|
+
# Example
|
|
48
|
+
#
|
|
49
|
+
# require "dawn/knowledge_base"
|
|
50
|
+
#
|
|
51
|
+
# ...
|
|
52
|
+
#
|
|
53
|
+
# d = Dawn::KnowledgeBase.instance
|
|
54
|
+
# d.update if d.update?
|
|
55
|
+
# d.load
|
|
56
|
+
#
|
|
57
|
+
# Last update: Mon Mar 22 05:08:55 PM CET 2021
|
|
299
58
|
class KnowledgeBase
|
|
59
|
+
include Singleton
|
|
60
|
+
|
|
61
|
+
@error = ""
|
|
62
|
+
@@enabled_checks = [:generic_check, :code_quality, :bulletin, :code_style, :owasp_top_10]
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
GEM_CHECK = :rubygem_check
|
|
66
|
+
DEPENDENCY_CHECK = :dependency_check
|
|
67
|
+
UNSAFE_DEPENDENCY_CHECK = :unsafe_dependency_check
|
|
68
|
+
PATTERN_MATCH_CHECK = :pattern_match_check
|
|
69
|
+
RUBY_VERSION_CHECK = :ruby_version_check
|
|
70
|
+
OS_CHECK = :os_check
|
|
71
|
+
COMBO_CHECK = :combo_check
|
|
72
|
+
CUSTOM_CHECK = :custom_check
|
|
300
73
|
|
|
301
|
-
|
|
74
|
+
REMOTE_KB_URL_PREFIX = "https://dawnscanner.org/data/"
|
|
75
|
+
FILES = %w(kb.yaml bulletin.tar.gz generic_check.tar.gz owasp_ror_cheatsheet.tar.gz code_style.tar.gz code_quality.tar.gz owasp_top_10.tar.gz signatures.tar.gz)
|
|
302
76
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
CUSTOM_CHECK = :custom_check
|
|
77
|
+
VERSION = "0.0.1"
|
|
78
|
+
|
|
79
|
+
attr_reader :security_checks
|
|
80
|
+
attr_reader :descriptor
|
|
81
|
+
attr_reader :path
|
|
82
|
+
attr_reader :error
|
|
310
83
|
|
|
311
84
|
def initialize(options={})
|
|
312
|
-
|
|
313
|
-
|
|
85
|
+
if $logger.nil?
|
|
86
|
+
require 'dawn/logger'
|
|
87
|
+
$logger = Logger.new(STDOUT)
|
|
88
|
+
$logger.helo "knowledge-base-experimental", Dawn::VERSION
|
|
89
|
+
end
|
|
90
|
+
@path = default_path
|
|
91
|
+
@path = options[:path] if options[:path]
|
|
92
|
+
FileUtils.mkdir_p(@path)
|
|
93
|
+
|
|
94
|
+
@enabled_checks = @@enabled_checks
|
|
314
95
|
|
|
315
|
-
|
|
96
|
+
debug_me "KB root path is #{@path}"
|
|
316
97
|
end
|
|
317
98
|
|
|
318
|
-
def self.
|
|
319
|
-
|
|
320
|
-
|
|
99
|
+
def self.enabled_checks= checks
|
|
100
|
+
@@enabled_checks=checks
|
|
101
|
+
end
|
|
321
102
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
nil
|
|
103
|
+
def default_path
|
|
104
|
+
@path = File.join(Dir.home, 'dawnscanner', 'kb')
|
|
105
|
+
return @path
|
|
326
106
|
end
|
|
327
107
|
|
|
328
|
-
def
|
|
329
|
-
|
|
108
|
+
def self.path= path_name
|
|
109
|
+
@path=path_name
|
|
330
110
|
end
|
|
331
111
|
|
|
332
|
-
def
|
|
333
|
-
|
|
112
|
+
def is_packed?
|
|
113
|
+
return __packed?
|
|
334
114
|
end
|
|
335
115
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
# So to match Semantic Version, it must bring to a major version bump.
|
|
339
|
-
# MVC name should be passed as constructor option, so the all_by_mvc can
|
|
340
|
-
#
|
|
341
|
-
# be called without parameter, having a nice-to-read code.
|
|
342
|
-
# @checks = Dawn::KnowledgeBase.new({:enabled_checks=>@enabled_checks}).all_by_mvc(@name)
|
|
343
|
-
def all_by_mvc(mvc)
|
|
344
|
-
ret = []
|
|
345
|
-
@security_checks.each do |sc|
|
|
346
|
-
ret << sc if sc.applies_to?(mvc)
|
|
347
|
-
end
|
|
348
|
-
ret
|
|
116
|
+
def is_valid?
|
|
117
|
+
return __valid?
|
|
349
118
|
end
|
|
350
119
|
|
|
351
|
-
|
|
352
|
-
|
|
120
|
+
|
|
121
|
+
def find(name)
|
|
122
|
+
debug_me "I'm asked to find #{name}"
|
|
353
123
|
end
|
|
354
124
|
|
|
355
|
-
def
|
|
356
|
-
|
|
125
|
+
def unpack
|
|
126
|
+
# https://weblog.jamisbuck.org/2015/7/23/tar-gz-in-ruby.html
|
|
127
|
+
FILES.each do |f|
|
|
128
|
+
full_name = File.join(path,f)
|
|
129
|
+
if File.file?(full_name) and File.extname(full_name).eql?('.gz')
|
|
130
|
+
File.open(full_name, "rb") do |file|
|
|
131
|
+
Zlib::GzipReader.wrap(file) do |gz|
|
|
132
|
+
Gem::Package::TarReader.new(gz) do |tar|
|
|
133
|
+
tar.each do |entry|
|
|
134
|
+
if entry.file?
|
|
135
|
+
FileUtils.mkdir_p(File.dirname(File.join(path, entry.full_name)))
|
|
136
|
+
File.open(File.join(path, entry.full_name), "wb") do |f|
|
|
137
|
+
f.write(entry.read)
|
|
138
|
+
end
|
|
139
|
+
File.chmod(entry.header.mode, File.join(path,entry.full_name))
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
else
|
|
146
|
+
$logger.warn("can't open " + f)
|
|
147
|
+
end
|
|
148
|
+
end
|
|
357
149
|
end
|
|
358
150
|
|
|
359
|
-
def
|
|
360
|
-
|
|
151
|
+
def self.kb_descriptor
|
|
152
|
+
{:kb=>{:version=>VERSION, :revision=>Time.now.strftime("%Y%m%d"), :api=>Dawn::VERSION}}.to_yaml
|
|
361
153
|
end
|
|
362
154
|
|
|
363
|
-
def
|
|
364
|
-
|
|
155
|
+
def update?
|
|
156
|
+
FileUtils.mkdir_p("tmp")
|
|
157
|
+
begin
|
|
158
|
+
response = Net::HTTP.get URI(REMOTE_KB_URL_PREFIX + "kb.yaml")
|
|
159
|
+
open("tmp/kb.yaml", "w") do |f|
|
|
160
|
+
f.puts(response)
|
|
161
|
+
end
|
|
162
|
+
response = Net::HTTP.get URI(REMOTE_KB_URL_PREFIX + "kb.yaml.sig")
|
|
163
|
+
open("tmp/kb.yaml.sig", "w") do |f|
|
|
164
|
+
f.puts(response)
|
|
165
|
+
end
|
|
166
|
+
rescue Exception => e
|
|
167
|
+
$logger.error e.to_s
|
|
168
|
+
return false
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
# Verify kb.yaml signature
|
|
172
|
+
|
|
173
|
+
YAML.load(response)
|
|
365
174
|
end
|
|
366
175
|
|
|
367
|
-
def
|
|
368
|
-
|
|
369
|
-
# START @cve_security_checks array
|
|
370
|
-
@cve_security_checks =
|
|
371
|
-
[
|
|
372
|
-
Dawn::Kb::CVE_2004_0755.new,
|
|
373
|
-
Dawn::Kb::CVE_2004_0983.new,
|
|
374
|
-
Dawn::Kb::CVE_2005_1992.new,
|
|
375
|
-
Dawn::Kb::CVE_2005_2337.new,
|
|
376
|
-
Dawn::Kb::CVE_2006_1931.new,
|
|
377
|
-
Dawn::Kb::CVE_2006_2582.new,
|
|
378
|
-
Dawn::Kb::CVE_2006_3694.new,
|
|
379
|
-
Dawn::Kb::CVE_2006_4112.new,
|
|
380
|
-
Dawn::Kb::CVE_2006_5467.new,
|
|
381
|
-
Dawn::Kb::CVE_2006_6303.new,
|
|
382
|
-
Dawn::Kb::CVE_2006_6852.new,
|
|
383
|
-
Dawn::Kb::CVE_2006_6979.new,
|
|
384
|
-
Dawn::Kb::CVE_2007_0469.new,
|
|
385
|
-
Dawn::Kb::CVE_2007_5162.new,
|
|
386
|
-
Dawn::Kb::CVE_2007_5379.new,
|
|
387
|
-
Dawn::Kb::CVE_2007_5380.new,
|
|
388
|
-
Dawn::Kb::CVE_2007_5770.new,
|
|
389
|
-
Dawn::Kb::CVE_2007_6077.new,
|
|
390
|
-
Dawn::Kb::CVE_2007_6612.new,
|
|
391
|
-
Dawn::Kb::CVE_2008_1145.new,
|
|
392
|
-
Dawn::Kb::CVE_2008_1891.new,
|
|
393
|
-
Dawn::Kb::CVE_2008_2376.new,
|
|
394
|
-
Dawn::Kb::CVE_2008_2662.new,
|
|
395
|
-
Dawn::Kb::CVE_2008_2663.new,
|
|
396
|
-
Dawn::Kb::CVE_2008_2664.new,
|
|
397
|
-
Dawn::Kb::CVE_2008_2725.new,
|
|
398
|
-
Dawn::Kb::CVE_2008_3655.new,
|
|
399
|
-
Dawn::Kb::CVE_2008_3657.new,
|
|
400
|
-
Dawn::Kb::CVE_2008_3790.new,
|
|
401
|
-
Dawn::Kb::CVE_2008_3905.new,
|
|
402
|
-
Dawn::Kb::CVE_2008_4094.new,
|
|
403
|
-
Dawn::Kb::CVE_2008_4310.new,
|
|
404
|
-
Dawn::Kb::CVE_2008_5189.new,
|
|
405
|
-
Dawn::Kb::CVE_2008_7248.new,
|
|
406
|
-
Dawn::Kb::CVE_2009_4078.new,
|
|
407
|
-
Dawn::Kb::CVE_2009_4124.new,
|
|
408
|
-
Dawn::Kb::CVE_2009_4214.new,
|
|
409
|
-
Dawn::Kb::CVE_2010_1330.new,
|
|
410
|
-
Dawn::Kb::CVE_2010_2489.new,
|
|
411
|
-
Dawn::Kb::CVE_2010_3933.new,
|
|
412
|
-
Dawn::Kb::CVE_2011_0188.new,
|
|
413
|
-
Dawn::Kb::CVE_2011_0446.new,
|
|
414
|
-
Dawn::Kb::CVE_2011_0447.new,
|
|
415
|
-
Dawn::Kb::CVE_2011_0739.new,
|
|
416
|
-
Dawn::Kb::CVE_2011_0995.new,
|
|
417
|
-
Dawn::Kb::CVE_2011_1004.new,
|
|
418
|
-
Dawn::Kb::CVE_2011_1005.new,
|
|
419
|
-
Dawn::Kb::CVE_2011_2197.new,
|
|
420
|
-
Dawn::Kb::CVE_2011_2686.new,
|
|
421
|
-
Dawn::Kb::CVE_2011_2705.new,
|
|
422
|
-
Dawn::Kb::CVE_2011_2929.new,
|
|
423
|
-
Dawn::Kb::CVE_2011_2930.new,
|
|
424
|
-
Dawn::Kb::CVE_2011_2931.new,
|
|
425
|
-
Dawn::Kb::CVE_2011_2932.new,
|
|
426
|
-
Dawn::Kb::CVE_2011_3009.new,
|
|
427
|
-
Dawn::Kb::CVE_2011_3186.new,
|
|
428
|
-
Dawn::Kb::CVE_2011_3187.new,
|
|
429
|
-
Dawn::Kb::CVE_2011_4319.new,
|
|
430
|
-
Dawn::Kb::CVE_2011_4815.new,
|
|
431
|
-
Dawn::Kb::CVE_2011_5036.new,
|
|
432
|
-
Dawn::Kb::CVE_2012_1098.new,
|
|
433
|
-
Dawn::Kb::CVE_2012_1099.new,
|
|
434
|
-
Dawn::Kb::CVE_2012_1241.new,
|
|
435
|
-
Dawn::Kb::CVE_2012_2139.new,
|
|
436
|
-
Dawn::Kb::CVE_2012_2140.new,
|
|
437
|
-
Dawn::Kb::CVE_2012_2660.new,
|
|
438
|
-
Dawn::Kb::CVE_2012_2661.new,
|
|
439
|
-
Dawn::Kb::CVE_2012_2671.new,
|
|
440
|
-
Dawn::Kb::CVE_2012_2694.new,
|
|
441
|
-
Dawn::Kb::CVE_2012_2695.new,
|
|
442
|
-
Dawn::Kb::CVE_2012_3424.new,
|
|
443
|
-
Dawn::Kb::CVE_2012_3463.new,
|
|
444
|
-
Dawn::Kb::CVE_2012_3464.new,
|
|
445
|
-
Dawn::Kb::CVE_2012_3465.new,
|
|
446
|
-
Dawn::Kb::CVE_2012_4464.new,
|
|
447
|
-
Dawn::Kb::CVE_2012_4466.new,
|
|
448
|
-
Dawn::Kb::CVE_2012_4481.new,
|
|
449
|
-
Dawn::Kb::CVE_2012_4522.new,
|
|
450
|
-
Dawn::Kb::CVE_2012_5370.new,
|
|
451
|
-
Dawn::Kb::CVE_2012_5371.new,
|
|
452
|
-
Dawn::Kb::CVE_2012_5380.new,
|
|
453
|
-
Dawn::Kb::CVE_2012_6109.new,
|
|
454
|
-
Dawn::Kb::CVE_2012_6134.new,
|
|
455
|
-
Dawn::Kb::CVE_2012_6496.new,
|
|
456
|
-
Dawn::Kb::CVE_2012_6497.new,
|
|
457
|
-
Dawn::Kb::CVE_2012_6684.new,
|
|
458
|
-
Dawn::Kb::CVE_2013_0155.new,
|
|
459
|
-
Dawn::Kb::CVE_2013_0156.new,
|
|
460
|
-
Dawn::Kb::CVE_2013_0162.new,
|
|
461
|
-
Dawn::Kb::CVE_2013_0175.new,
|
|
462
|
-
Dawn::Kb::CVE_2013_0183.new,
|
|
463
|
-
Dawn::Kb::CVE_2013_0184.new,
|
|
464
|
-
Dawn::Kb::CVE_2013_0233.new,
|
|
465
|
-
Dawn::Kb::CVE_2013_0256.new,
|
|
466
|
-
Dawn::Kb::CVE_2013_0262.new,
|
|
467
|
-
Dawn::Kb::CVE_2013_0263.new,
|
|
468
|
-
Dawn::Kb::CVE_2013_0269.new,
|
|
469
|
-
Dawn::Kb::CVE_2013_0276.new,
|
|
470
|
-
Dawn::Kb::CVE_2013_0277.new,
|
|
471
|
-
Dawn::Kb::CVE_2013_0284.new,
|
|
472
|
-
Dawn::Kb::CVE_2013_0285.new,
|
|
473
|
-
Dawn::Kb::CVE_2013_0333.new,
|
|
474
|
-
Dawn::Kb::CVE_2013_0334.new,
|
|
475
|
-
Dawn::Kb::CVE_2013_1607.new,
|
|
476
|
-
Dawn::Kb::CVE_2013_1655.new,
|
|
477
|
-
Dawn::Kb::CVE_2013_1656.new,
|
|
478
|
-
Dawn::Kb::CVE_2013_1756.new,
|
|
479
|
-
Dawn::Kb::CVE_2013_1800.new,
|
|
480
|
-
Dawn::Kb::CVE_2013_1801.new,
|
|
481
|
-
Dawn::Kb::CVE_2013_1802.new,
|
|
482
|
-
Dawn::Kb::CVE_2013_1812.new,
|
|
483
|
-
Dawn::Kb::CVE_2013_1821.new,
|
|
484
|
-
Dawn::Kb::CVE_2013_1854.new,
|
|
485
|
-
Dawn::Kb::CVE_2013_1855.new,
|
|
486
|
-
Dawn::Kb::CVE_2013_1856.new,
|
|
487
|
-
Dawn::Kb::CVE_2013_1857.new,
|
|
488
|
-
Dawn::Kb::CVE_2013_1875.new,
|
|
489
|
-
Dawn::Kb::CVE_2013_1898.new,
|
|
490
|
-
Dawn::Kb::CVE_2013_1911.new,
|
|
491
|
-
Dawn::Kb::CVE_2013_1933.new,
|
|
492
|
-
Dawn::Kb::CVE_2013_1947.new,
|
|
493
|
-
Dawn::Kb::CVE_2013_1948.new,
|
|
494
|
-
Dawn::Kb::CVE_2013_2065.new,
|
|
495
|
-
Dawn::Kb::CVE_2013_2090.new,
|
|
496
|
-
Dawn::Kb::CVE_2013_2105.new,
|
|
497
|
-
Dawn::Kb::CVE_2013_2119.new,
|
|
498
|
-
Dawn::Kb::CVE_2013_2512.new,
|
|
499
|
-
Dawn::Kb::CVE_2013_2513.new,
|
|
500
|
-
Dawn::Kb::CVE_2013_2516.new,
|
|
501
|
-
Dawn::Kb::CVE_2013_2615.new,
|
|
502
|
-
Dawn::Kb::CVE_2013_2616.new,
|
|
503
|
-
Dawn::Kb::CVE_2013_2617.new,
|
|
504
|
-
Dawn::Kb::CVE_2013_3221.new,
|
|
505
|
-
Dawn::Kb::CVE_2013_4164.new,
|
|
506
|
-
Dawn::Kb::CVE_2013_4203.new,
|
|
507
|
-
Dawn::Kb::CVE_2013_4389.new,
|
|
508
|
-
Dawn::Kb::CVE_2013_4413.new,
|
|
509
|
-
Dawn::Kb::CVE_2013_4457.new,
|
|
510
|
-
Dawn::Kb::CVE_2013_4478.new,
|
|
511
|
-
Dawn::Kb::CVE_2013_4479.new,
|
|
512
|
-
Dawn::Kb::CVE_2013_4489.new,
|
|
513
|
-
Dawn::Kb::CVE_2013_4491.new,
|
|
514
|
-
Dawn::Kb::CVE_2013_4492.new,
|
|
515
|
-
Dawn::Kb::CVE_2013_4562.new,
|
|
516
|
-
Dawn::Kb::CVE_2013_4593.new,
|
|
517
|
-
Dawn::Kb::CVE_2013_5647.new,
|
|
518
|
-
Dawn::Kb::CVE_2013_5671.new,
|
|
519
|
-
Dawn::Kb::CVE_2013_6414.new,
|
|
520
|
-
Dawn::Kb::CVE_2013_6415.new,
|
|
521
|
-
Dawn::Kb::CVE_2013_6416.new,
|
|
522
|
-
Dawn::Kb::CVE_2013_6417.new,
|
|
523
|
-
Dawn::Kb::CVE_2013_6421.new,
|
|
524
|
-
Dawn::Kb::CVE_2013_6459.new,
|
|
525
|
-
Dawn::Kb::CVE_2013_6460.new,
|
|
526
|
-
Dawn::Kb::CVE_2013_6461.new,
|
|
527
|
-
Dawn::Kb::CVE_2013_7086.new,
|
|
528
|
-
Dawn::Kb::CVE_2014_0036.new,
|
|
529
|
-
Dawn::Kb::CVE_2014_0080.new,
|
|
530
|
-
Dawn::Kb::CVE_2014_0081.new,
|
|
531
|
-
Dawn::Kb::CVE_2014_0082.new,
|
|
532
|
-
Dawn::Kb::CVE_2014_0130.new,
|
|
533
|
-
Dawn::Kb::CVE_2014_1233.new,
|
|
534
|
-
Dawn::Kb::CVE_2014_1234.new,
|
|
535
|
-
Dawn::Kb::CVE_2014_2322.new,
|
|
536
|
-
Dawn::Kb::CVE_2014_2525.new,
|
|
537
|
-
Dawn::Kb::CVE_2014_2538.new,
|
|
538
|
-
Dawn::Kb::CVE_2014_3482.new,
|
|
539
|
-
Dawn::Kb::CVE_2014_3483.new,
|
|
540
|
-
Dawn::Kb::CVE_2014_3916.new,
|
|
541
|
-
Dawn::Kb::CVE_2014_4975.new,
|
|
542
|
-
Dawn::Kb::CVE_2014_7818.new,
|
|
543
|
-
Dawn::Kb::CVE_2014_7819.new,
|
|
544
|
-
Dawn::Kb::CVE_2014_7829.new,
|
|
545
|
-
Dawn::Kb::CVE_2014_8090.new,
|
|
546
|
-
Dawn::Kb::CVE_2014_9490.new,
|
|
547
|
-
Dawn::Kb::CVE_2015_1819.new,
|
|
548
|
-
Dawn::Kb::CVE_2015_1840_a.new,
|
|
549
|
-
Dawn::Kb::CVE_2015_1840_b.new,
|
|
550
|
-
Dawn::Kb::CVE_2015_2963.new,
|
|
551
|
-
Dawn::Kb::CVE_2015_3224.new,
|
|
552
|
-
Dawn::Kb::CVE_2015_3225.new,
|
|
553
|
-
Dawn::Kb::CVE_2015_3226.new,
|
|
554
|
-
Dawn::Kb::CVE_2015_3227.new,
|
|
555
|
-
Dawn::Kb::CVE_2015_3448.new,
|
|
556
|
-
Dawn::Kb::CVE_2015_4020.new,
|
|
557
|
-
Dawn::Kb::CVE_2015_5312.new,
|
|
558
|
-
Dawn::Kb::CVE_2015_7497.new,
|
|
559
|
-
Dawn::Kb::CVE_2015_7498.new,
|
|
560
|
-
Dawn::Kb::CVE_2015_7499.new,
|
|
561
|
-
Dawn::Kb::CVE_2015_7500.new,
|
|
562
|
-
Dawn::Kb::CVE_2015_7519.new,
|
|
563
|
-
Dawn::Kb::CVE_2015_7541.new,
|
|
564
|
-
Dawn::Kb::CVE_2015_7576.new,
|
|
565
|
-
Dawn::Kb::CVE_2015_7577.new,
|
|
566
|
-
Dawn::Kb::CVE_2015_7578.new,
|
|
567
|
-
Dawn::Kb::CVE_2015_7579.new,
|
|
568
|
-
Dawn::Kb::CVE_2015_7581.new,
|
|
569
|
-
Dawn::Kb::CVE_2015_8241.new,
|
|
570
|
-
Dawn::Kb::CVE_2015_8242.new,
|
|
571
|
-
Dawn::Kb::CVE_2015_8317.new,
|
|
572
|
-
Dawn::Kb::CVE_2016_0751.new,
|
|
573
|
-
Dawn::Kb::CVE_2016_0752.new,
|
|
574
|
-
Dawn::Kb::CVE_2016_0753.new,
|
|
575
|
-
Dawn::Kb::CVE_2016_2097.new,
|
|
576
|
-
Dawn::Kb::CVE_2016_2098.new,
|
|
577
|
-
Dawn::Kb::CVE_2016_5697.new,
|
|
578
|
-
Dawn::Kb::CVE_2016_6316.new,
|
|
579
|
-
Dawn::Kb::CVE_2016_6317.new,
|
|
580
|
-
Dawn::Kb::CVE_2016_6582.new,
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
# OSVDB Checks are still here since are all about dependencies
|
|
584
|
-
Dawn::Kb::OSVDB_105971.new,
|
|
585
|
-
Dawn::Kb::OSVDB_108569.new,
|
|
586
|
-
Dawn::Kb::OSVDB_108570.new,
|
|
587
|
-
Dawn::Kb::OSVDB_108530.new,
|
|
588
|
-
Dawn::Kb::OSVDB_108563.new,
|
|
589
|
-
Dawn::Kb::OSVDB_115654.new,
|
|
590
|
-
Dawn::Kb::OSVDB_116010.new,
|
|
591
|
-
Dawn::Kb::OSVDB_117903.new,
|
|
592
|
-
Dawn::Kb::OSVDB_118579.new,
|
|
593
|
-
Dawn::Kb::OSVDB_118830.new,
|
|
594
|
-
Dawn::Kb::OSVDB_118954.new,
|
|
595
|
-
Dawn::Kb::OSVDB_119878.new,
|
|
596
|
-
Dawn::Kb::OSVDB_119927.new,
|
|
597
|
-
Dawn::Kb::OSVDB_120415.new,
|
|
598
|
-
Dawn::Kb::OSVDB_120857.new,
|
|
599
|
-
Dawn::Kb::OSVDB_121701.new,
|
|
600
|
-
Dawn::Kb::OSVDB_132234.new,
|
|
601
|
-
]
|
|
602
|
-
# END @cve_security_checks array
|
|
603
|
-
# START @owasp_ror_cheatsheet_checks array
|
|
604
|
-
@owasp_ror_cheatsheet_checks = [
|
|
605
|
-
Dawn::Kb::OwaspRorCheatSheet::CommandInjection.new,
|
|
606
|
-
Dawn::Kb::OwaspRorCheatSheet::Csrf.new,
|
|
607
|
-
Dawn::Kb::OwaspRorCheatSheet::SessionStoredInDatabase.new,
|
|
608
|
-
Dawn::Kb::OwaspRorCheatSheet::MassAssignmentInModel.new,
|
|
609
|
-
Dawn::Kb::OwaspRorCheatSheet::SecurityRelatedHeaders.new,
|
|
610
|
-
Dawn::Kb::OwaspRorCheatSheet::CheckForSafeRedirectAndForward.new,
|
|
611
|
-
Dawn::Kb::OwaspRorCheatSheet::SensitiveFiles.new,
|
|
612
|
-
]
|
|
613
|
-
# END @owasp_ror_cheatsheet_checks array
|
|
614
|
-
@code_quality_checks = [
|
|
615
|
-
Dawn::Kb::NotRevisedCode.new,
|
|
616
|
-
]
|
|
617
|
-
@aux_checks =
|
|
618
|
-
[
|
|
619
|
-
Dawn::Kb::SimpleForm_Xss_20131129.new,
|
|
620
|
-
]
|
|
621
|
-
|
|
622
|
-
ret = []
|
|
623
|
-
ret += @aux_checks
|
|
624
|
-
ret += @cve_security_checks if @enabled_checks.include?(:bulletin)
|
|
625
|
-
ret += @owasp_ror_cheatsheet_checks if @enabled_checks.include?(:owasp_ror_cheatsheet)
|
|
626
|
-
ret += @code_quality_checks if @enabled_checks.include?(:code_quality)
|
|
627
|
-
|
|
628
|
-
ret
|
|
176
|
+
def all
|
|
177
|
+
@security_checks
|
|
629
178
|
end
|
|
630
179
|
|
|
631
|
-
|
|
180
|
+
# Load security checks from db/ folder.
|
|
181
|
+
#
|
|
182
|
+
# Returns an array of security checks, matching the mvc to be reviewed and
|
|
183
|
+
# the enabled check list or an empty array if an error occured.
|
|
184
|
+
def load(lint=false)
|
|
185
|
+
good =0
|
|
186
|
+
invalid =0
|
|
187
|
+
|
|
188
|
+
@security_checks = []
|
|
189
|
+
# $path = File.join(Dir.pwd, "db")
|
|
190
|
+
|
|
191
|
+
unless __valid?
|
|
192
|
+
@error = "An invalid library it has been found. Please use --recovery flag to force fresh install from dawnscanner.org"
|
|
193
|
+
return []
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
unless __load?
|
|
197
|
+
@error = "The library must be consumed with dawnscanner up to v#{@descriptor[:kb][:api]}. You are using dawnscanner v#{Dawn::VERSION}"
|
|
198
|
+
return []
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
@enabled_checks.each do |d|
|
|
202
|
+
|
|
203
|
+
dir = File.join(@path, d.to_s)
|
|
204
|
+
|
|
205
|
+
# Please note that if we enter in this branch, it means someone
|
|
206
|
+
# tampered the KB between the previous __valid? check and this point.
|
|
207
|
+
# Of course this is a very rare situation, but we must handle it.
|
|
208
|
+
unless Dir.exists?(dir)
|
|
209
|
+
$logger.warn "Missing check directory #{dir}"
|
|
210
|
+
else
|
|
211
|
+
Dir.glob(dir+"/**/*.yml").each do |f|
|
|
212
|
+
begin
|
|
213
|
+
data = YAML.load_file(f)
|
|
214
|
+
@security_checks << data
|
|
215
|
+
good+=1
|
|
216
|
+
$logger.info("#{File.basename(f)} loaded") if lint
|
|
217
|
+
rescue Exception => e
|
|
218
|
+
$logger.error(e.message)
|
|
219
|
+
invalid+=1
|
|
220
|
+
end
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
|
|
224
|
+
if lint
|
|
225
|
+
$logger.info("#{invalid} invalid checks out of #{good+invalid}")
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
end
|
|
230
|
+
|
|
231
|
+
debug_me "#{@security_checks.count}"
|
|
232
|
+
return @security_checks
|
|
233
|
+
end
|
|
234
|
+
|
|
235
|
+
def dump(verbose=false)
|
|
632
236
|
puts "Security checks currently supported:"
|
|
633
237
|
i=0
|
|
634
|
-
|
|
238
|
+
KnowledgeBase.instance.all.each do |check|
|
|
635
239
|
i+=1
|
|
636
240
|
if verbose
|
|
637
241
|
puts "Name: #{check.name}\tCVSS: #{check.cvss_score}\tReleased: #{check.release_date}"
|
|
@@ -644,6 +248,66 @@ module Dawn
|
|
|
644
248
|
puts "-----\nTotal: #{i}"
|
|
645
249
|
|
|
646
250
|
end
|
|
647
|
-
end
|
|
648
251
|
|
|
252
|
+
private
|
|
253
|
+
|
|
254
|
+
def __verify_hash(original, computed)
|
|
255
|
+
t=original.split(' ')
|
|
256
|
+
return false if t.length != 2
|
|
257
|
+
return (t[0] == computed)
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def __valid?
|
|
261
|
+
|
|
262
|
+
lines = ""
|
|
263
|
+
|
|
264
|
+
unless File.exists?(File.join(@path, "kb.yaml"))
|
|
265
|
+
$logger.error "Missing kb.yaml in #{path}. Giving up"
|
|
266
|
+
return false
|
|
267
|
+
end
|
|
268
|
+
|
|
269
|
+
unless File.exists?(File.join(@path, "kb.yaml.sig"))
|
|
270
|
+
$logger.error "Missing kb.yaml signature in #{path}. Giving up"
|
|
271
|
+
return false
|
|
272
|
+
end
|
|
273
|
+
|
|
274
|
+
lines = File.read(File.join(@path, "kb.yaml"))
|
|
275
|
+
hash_file = Digest::SHA256.hexdigest lines
|
|
276
|
+
hash_orig = File.read(File.join(@path, "kb.yaml.sig"))
|
|
277
|
+
|
|
278
|
+
v = __verify_hash(hash_orig, hash_file)
|
|
279
|
+
if v
|
|
280
|
+
debug_me("good kb.yaml file found. Reading knowledge base descriptor")
|
|
281
|
+
@descriptor = YAML.load(lines)
|
|
282
|
+
else
|
|
283
|
+
$logger.error("kb.yaml signature mismatch. Found #{hash_file} while expecting #{hash_orig}. Giving up")
|
|
284
|
+
return false
|
|
285
|
+
end
|
|
286
|
+
|
|
287
|
+
return true
|
|
288
|
+
end
|
|
289
|
+
|
|
290
|
+
# Check if the local KB is packet or not.
|
|
291
|
+
#
|
|
292
|
+
# Returns true if at least one KB tarball file it has been found in the
|
|
293
|
+
# local DB path
|
|
294
|
+
def __packed?
|
|
295
|
+
FILES.each do |fn|
|
|
296
|
+
return true if fn.end_with? 'tar.gz' and File.exists?(File.join(@path, fn))
|
|
297
|
+
end
|
|
298
|
+
return false
|
|
299
|
+
end
|
|
300
|
+
|
|
301
|
+
def __load?
|
|
302
|
+
api = @descriptor[:kb][:api]
|
|
303
|
+
v = Dawn::VERSION
|
|
304
|
+
require "dawn/kb/version_check"
|
|
305
|
+
|
|
306
|
+
vc = Dawn::Kb::VersionCheck.new
|
|
307
|
+
return true if vc.is_higher?(v, api) # => true if v > api
|
|
308
|
+
return false
|
|
309
|
+
end
|
|
310
|
+
|
|
311
|
+
|
|
312
|
+
end
|
|
649
313
|
end
|