dawnscanner 1.6.9 → 2.0.0.rc1
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 +4 -4
- data/.ruby-version +1 -1
- data/Changelog.md +8 -0
- data/LICENSE.txt +1 -1
- data/Rakefile +6 -239
- data/VERSION +1 -1
- data/bin/dawn +6 -46
- data/dawnscanner.gemspec +6 -1
- data/doc/change.sh +13 -0
- data/doc/knowledge_base.rb +650 -0
- data/lib/dawn/cli/dawn_cli.rb +103 -0
- data/lib/dawn/engine.rb +9 -11
- data/lib/dawn/gemfile_lock.rb +2 -2
- data/lib/dawn/kb/basic_check.rb +1 -0
- data/lib/dawn/kb/combo_check.rb +1 -1
- data/lib/dawn/kb/dependency_check.rb +1 -1
- data/lib/dawn/kb/pattern_match_check.rb +1 -1
- 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/version_check.rb +25 -25
- data/lib/dawn/knowledge_base.rb +211 -588
- data/lib/dawn/utils.rb +5 -2
- data/lib/dawn/version.rb +5 -5
- data/lib/dawnscanner.rb +4 -3
- metadata +23 -450
- 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 -59
- 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
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
require 'thor'
|
|
2
|
+
|
|
3
|
+
module Dawn
|
|
4
|
+
module Cli
|
|
5
|
+
|
|
6
|
+
# This class is responsible for the "dawn kb" command and related
|
|
7
|
+
# subcommands.
|
|
8
|
+
class Kb < Thor
|
|
9
|
+
desc "search", "Searches the knowledge base for a given security test"
|
|
10
|
+
def search(string)
|
|
11
|
+
kb = Dawn::KnowledgeBase.instance
|
|
12
|
+
kb.find(string)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
desc "status", "Checks the status of the knowledge base"
|
|
16
|
+
def status
|
|
17
|
+
$logger.helo APPNAME, Dawn::VERSION
|
|
18
|
+
Dawn::KnowledgeBase.path="/home/thesp0nge/src/hacking/dawnscanner/db"
|
|
19
|
+
Dawn::KnowledgeBase.enabled_checks=[:bulletin, :generic_check]
|
|
20
|
+
kb = Dawn::KnowledgeBase.instance
|
|
21
|
+
kb.load
|
|
22
|
+
if kb.is_packed?
|
|
23
|
+
$logger.error "The knowledge base is packed. It must be unpacked with the 'unpack' command before it can be used"
|
|
24
|
+
else
|
|
25
|
+
if kb.is_valid?
|
|
26
|
+
$logger.info "Good Knowledge base found"
|
|
27
|
+
else
|
|
28
|
+
$logger.error "Invalid knowledge base found"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
$logger.bye
|
|
32
|
+
Kernel.exit(0)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
class DawnCli < Thor
|
|
37
|
+
class_option :verbose, :type=>:boolean
|
|
38
|
+
|
|
39
|
+
map %w[--version -v] => :__print_version
|
|
40
|
+
|
|
41
|
+
desc "--version, -v", "Prints the dawnscanner version"
|
|
42
|
+
def __print_version
|
|
43
|
+
puts Dawn::VERSION
|
|
44
|
+
Kernel.exit(0)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
desc "kb SUBCOMMAND ... ARGS", "Interacts with the knowledge base"
|
|
48
|
+
subcommand "kb", Dawn::Cli::Kb
|
|
49
|
+
|
|
50
|
+
desc "scan", "scans a folder for security issues"
|
|
51
|
+
option :gemfile, :type=>:boolean
|
|
52
|
+
option :exit_on_warn, :type=>:boolean
|
|
53
|
+
option :debug, :type=>:boolean
|
|
54
|
+
option :verbose, :type=>:boolean
|
|
55
|
+
option :count, :type=>:boolean
|
|
56
|
+
option :output
|
|
57
|
+
|
|
58
|
+
def scan(target)
|
|
59
|
+
$logger.helo APPNAME, Dawn::VERSION
|
|
60
|
+
$logger.debug "scanning #{target}"
|
|
61
|
+
trap("INT") { $logger.die('[INTERRUPTED]') }
|
|
62
|
+
|
|
63
|
+
$logger.die("invalid directory (#{target})") unless Dawn::Core.is_good_target?(target)
|
|
64
|
+
|
|
65
|
+
$debug = true if options[:debug]
|
|
66
|
+
$verbose = true if options[:verbose]
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
engine = Dawn::GemfileLock.new(target) if options[:gemfile]
|
|
70
|
+
|
|
71
|
+
if engine.nil?
|
|
72
|
+
$logger.error("MVC detection failure. Please open an issue at https://github.com/thesp0nge/dawnscanner/issues")
|
|
73
|
+
$logger.die('ruby framework auto detect failed.')
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
if options[:exit_on_warn]
|
|
77
|
+
Kernel.at_exit do
|
|
78
|
+
if engine.count_vulnerabilities != 0
|
|
79
|
+
Kernel.exit(engine.count_vulnerabilities)
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
engine.load_knowledge_base
|
|
86
|
+
ret = engine.apply_all
|
|
87
|
+
if options[:output]
|
|
88
|
+
STDERR.puts (ret)? engine.vulnerabilities.count : "-1" unless options[:output] == "json"
|
|
89
|
+
STDERR.puts (ret)? {:status=>"OK", :vulnerabilities_count=>engine.count_vulnerabilities}.to_json : {:status=>"KO", :vulnerabilities_count=>-1}.to_json if options[:output] == "json"
|
|
90
|
+
|
|
91
|
+
# r.do_save({:target=>engine.target, :scan_started=>engine.scan_start, :scan_duration => engine.scan_time.round(3), :issues_found=>engine.vulnerabilities.count, :output_dir=>engine.output_dir_name, :scan_status=>:completed})
|
|
92
|
+
$logger.bye
|
|
93
|
+
Kernel.exit(0)
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
Dawn::Reporter.new({:engine=>engine, :apply_all_code=>ret}).report
|
|
97
|
+
|
|
98
|
+
Kernel.exit(0)
|
|
99
|
+
|
|
100
|
+
end
|
|
101
|
+
end
|
|
102
|
+
end
|
|
103
|
+
end
|
data/lib/dawn/engine.rb
CHANGED
|
@@ -61,8 +61,6 @@ module Dawn
|
|
|
61
61
|
@applied = []
|
|
62
62
|
@reflected_xss = []
|
|
63
63
|
@engine_error = false
|
|
64
|
-
@debug = false
|
|
65
|
-
@debug = options[:debug] unless options[:debug].nil?
|
|
66
64
|
@applied_checks = 0
|
|
67
65
|
@skipped_checks = 0
|
|
68
66
|
@gemfile_lock_sudo = false
|
|
@@ -83,7 +81,6 @@ module Dawn
|
|
|
83
81
|
require 'logger'
|
|
84
82
|
$logger = Logger.new(STDOUT)
|
|
85
83
|
$logger.helo "dawn-engine", Dawn::VERSION
|
|
86
|
-
|
|
87
84
|
end
|
|
88
85
|
$logger.warn "pattern matching security checks are disabled for Gemfile.lock scan" if @name == "Gemfile.lock"
|
|
89
86
|
$logger.warn "combo security checks are disabled for Gemfile.lock scan" if @name == "Gemfile.lock"
|
|
@@ -169,13 +166,13 @@ module Dawn
|
|
|
169
166
|
|
|
170
167
|
def load_knowledge_base(enabled_checks=[])
|
|
171
168
|
debug_me("load_knowledge_base called. Enabled checks are: #{enabled_checks}")
|
|
172
|
-
if @name == "Gemfile.lock"
|
|
173
|
-
@checks = Dawn::KnowledgeBase.new({:enabled_checks=>enabled_checks}).all if @force.empty?
|
|
174
|
-
@checks = Dawn::KnowledgeBase.new({:enabled_checks=>enabled_checks}).all_by_mvc(@force) unless @force.empty?
|
|
175
|
-
else
|
|
176
|
-
@checks = Dawn::KnowledgeBase.new({:enabled_checks=>enabled_checks}).all_by_mvc(@name)
|
|
177
169
|
|
|
178
|
-
|
|
170
|
+
Dawn::KnowledgeBase.path="/home/thesp0nge/src/hacking/dawnscanner/db"
|
|
171
|
+
Dawn::KnowledgeBase.enabled_checks=[:bulletin, :generic_check]
|
|
172
|
+
kb = Dawn::KnowledgeBase.instance
|
|
173
|
+
$logger.warn "KB path is forced @ /home/thesp0nge/src/hacking/dawnscanner/db"
|
|
174
|
+
|
|
175
|
+
@checks=kb.load
|
|
179
176
|
debug_me("#{@checks.count} checks loaded")
|
|
180
177
|
@checks
|
|
181
178
|
end
|
|
@@ -306,6 +303,7 @@ module Dawn
|
|
|
306
303
|
return false
|
|
307
304
|
end
|
|
308
305
|
if @checks.empty?
|
|
306
|
+
$logger.warn "no security checks found. This is strange"
|
|
309
307
|
@scan_stop = Time.now
|
|
310
308
|
debug_me("SCAN STOPPED: #{@scan_stop}")
|
|
311
309
|
return false
|
|
@@ -373,13 +371,13 @@ module Dawn
|
|
|
373
371
|
def get_rvm_ruby_ver
|
|
374
372
|
return {:version=>"", :patchlevel=>""} unless File.exist?(File.join(@target, ".ruby-version"))
|
|
375
373
|
hash = File.read(File.join(@target, '.ruby-version')).split('-')
|
|
376
|
-
return {:version=>hash[0], :patchlevel=>hash[1]}
|
|
374
|
+
return {:version=>hash[0].chop, :patchlevel=>hash[1]}
|
|
377
375
|
end
|
|
378
376
|
def _do_apply(check)
|
|
379
377
|
unless ((check.kind == Dawn::KnowledgeBase::PATTERN_MATCH_CHECK || check.kind == Dawn::KnowledgeBase::COMBO_CHECK ) && @gemfile_lock_sudo)
|
|
380
378
|
|
|
381
379
|
@applied << { :name => name }
|
|
382
|
-
debug_me "applying check #{check.name}"
|
|
380
|
+
debug_me "applying check #{check.name} - #{check.kind}"
|
|
383
381
|
@applied_checks += 1
|
|
384
382
|
|
|
385
383
|
check.ruby_version = @ruby_version[:version]
|
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
|
@@ -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
|
|
@@ -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?
|
|
@@ -54,12 +54,12 @@ module Dawn
|
|
|
54
54
|
break
|
|
55
55
|
end
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
debug_verbosely "vuln?: limited check_versions: #{check_versions.inspect}"
|
|
58
58
|
check_versions ||= @safe
|
|
59
|
-
|
|
59
|
+
debug_verbosely "vuln?: fallback check_versions: #{check_versions.inspect}"
|
|
60
60
|
|
|
61
61
|
check_versions.sort.each do |s|
|
|
62
|
-
|
|
62
|
+
debug_verbosely "vuln?: evaluating #{@detected} against save version: #{s}"
|
|
63
63
|
|
|
64
64
|
@save_minor_fix = save_minor_fix
|
|
65
65
|
@save_major_fix = save_major_fix
|
|
@@ -67,7 +67,7 @@ module Dawn
|
|
|
67
67
|
|
|
68
68
|
vuln = is_vulnerable_version?(s, @detected)
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
debug_verbosely "DETECTED #{@detected} is marked VULN=#{vuln} against #{s} ( SAVE_MINOR_FIX=#{@save_minor_fix} SAVE_MAJOR_FIX=#{@save_major_fix})"
|
|
71
71
|
return true if vuln
|
|
72
72
|
end
|
|
73
73
|
|
|
@@ -84,7 +84,7 @@ module Dawn
|
|
|
84
84
|
def is_detected_highest?
|
|
85
85
|
higher= @detected
|
|
86
86
|
@safe.sort.each do |s|
|
|
87
|
-
|
|
87
|
+
debug_verbosely("higher is #{higher}")
|
|
88
88
|
higher=s if is_higher?(s, higher)
|
|
89
89
|
end
|
|
90
90
|
return (higher == @detected)
|
|
@@ -137,7 +137,7 @@ module Dawn
|
|
|
137
137
|
ret = ver && beta && rc unless same
|
|
138
138
|
ret = beta && rc if same
|
|
139
139
|
|
|
140
|
-
|
|
140
|
+
debug_verbosely("is_higher? a=#{a}, b=#{b} VER=#{ver} - BETA=#{beta} - RC=#{rc} - SAME=#{same} - a>b? = (#{ret})")
|
|
141
141
|
return ret
|
|
142
142
|
end
|
|
143
143
|
|
|
@@ -146,7 +146,7 @@ module Dawn
|
|
|
146
146
|
dva = version_string_to_array(@detected)[:version]
|
|
147
147
|
@safe.sort.each do |s|
|
|
148
148
|
sva = version_string_to_array(s)[:version]
|
|
149
|
-
|
|
149
|
+
debug_verbosely "is_there_an_higher_major_version? DVA=#{dva} - SVA=#{sva}"
|
|
150
150
|
return debug_me_and_return_true("is_there_an_higher_major_version? is returning true for #{@detected}") if dva[0] < sva[0]
|
|
151
151
|
end
|
|
152
152
|
return debug_me_and_return_false("is_there_an_higher_major_version? is returning false")
|
|
@@ -188,8 +188,8 @@ module Dawn
|
|
|
188
188
|
sva = version_string_to_array(s)[:version]
|
|
189
189
|
sM = is_same_major?(sva, dva)
|
|
190
190
|
sm = is_same_minor?(sva, dva)
|
|
191
|
-
|
|
192
|
-
|
|
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}")
|
|
193
193
|
return true if sM and sm and dva[2] >= sva[2] && hm
|
|
194
194
|
return true if sM and hm
|
|
195
195
|
end
|
|
@@ -229,7 +229,7 @@ module Dawn
|
|
|
229
229
|
return (safe_version[2] > detected_version[2])
|
|
230
230
|
end
|
|
231
231
|
def is_vulnerable_aux_patch?(safe_version, detected_version)
|
|
232
|
-
|
|
232
|
+
debug_verbosely "is_vulnerable_aux_patch?: SV[3]=#{safe_version[3]}, DV[3]=#{detected_version[3]}"
|
|
233
233
|
return true if detected_version[3].nil? and ! safe_version[3].nil?
|
|
234
234
|
return false if safe_version[3].nil? || detected_version[3].nil?
|
|
235
235
|
return (safe_version[3] > detected_version[3])
|
|
@@ -272,11 +272,11 @@ module Dawn
|
|
|
272
272
|
# eg. in case of a beta release, the array is [5,0,0,1] meaning
|
|
273
273
|
# 5.0.0.beta1. Of course it must be handled in a different way than
|
|
274
274
|
# 5.0.0.1 release that it will result in the same array
|
|
275
|
-
|
|
275
|
+
debug_verbosely "is_same_version? with limit=TRUE"
|
|
276
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])
|
|
277
277
|
end
|
|
278
278
|
|
|
279
|
-
|
|
279
|
+
debug_verbosely "is_same_version? SVA=#{safe_version_array} DVA=#{detected_version_array} RET=#{ret}"
|
|
280
280
|
|
|
281
281
|
return ret
|
|
282
282
|
end
|
|
@@ -293,7 +293,7 @@ module Dawn
|
|
|
293
293
|
# if the safe_version_beta is 0 then the detected_version_beta is
|
|
294
294
|
# vulnerable by design, since the safe version is a stable and we
|
|
295
295
|
# detected a beta.
|
|
296
|
-
|
|
296
|
+
debug_verbosely("is_vulnerable_beta?: safe_version_beta=#{safe_version_beta} - detected_version_beta=#{detected_version_beta}")
|
|
297
297
|
return debug_me_and_return_false("is_vulnerable_beta? = FALSE") if safe_version_beta != -1 and detected_version_beta == -1
|
|
298
298
|
return debug_me_and_return_true("is_vulnerable_beta? = TRUE") if safe_version_beta == -1 and detected_version_beta != -1
|
|
299
299
|
return debug_me_and_return_true("is_vulnerable_beta? = TRUE") if safe_version_beta == 0 && detected_version_beta != -1
|
|
@@ -317,7 +317,7 @@ module Dawn
|
|
|
317
317
|
# if the safe_version_rc is 0 then the detected_version_rc is
|
|
318
318
|
# vulnerable by design, since the safe version is a stable and we
|
|
319
319
|
# detected a rc.
|
|
320
|
-
|
|
320
|
+
debug_verbosely "entering is_vulnerable_rc?: s=#{safe_version_rc}, d=#{detected_version_rc}"
|
|
321
321
|
return debug_me_and_return_false("is_vulnerable_rc? = FALSE") if detected_version_rc == -1
|
|
322
322
|
|
|
323
323
|
return debug_me_and_return_false("is_vulnerable_rc? = FALSE") if safe_version_rc != -1 and detected_version_rc == -1
|
|
@@ -357,8 +357,8 @@ module Dawn
|
|
|
357
357
|
def is_vulnerable_version?(safe_version, detected_version)
|
|
358
358
|
sva = version_string_to_array(safe_version)
|
|
359
359
|
dva = version_string_to_array(detected_version)
|
|
360
|
-
|
|
361
|
-
|
|
360
|
+
debug_verbosely("SVA=#{sva.inspect}")
|
|
361
|
+
debug_verbosely("DVA=#{dva.inspect}")
|
|
362
362
|
safe_version_array = sva[:version]
|
|
363
363
|
detected_version_array = dva[:version]
|
|
364
364
|
|
|
@@ -370,7 +370,7 @@ module Dawn
|
|
|
370
370
|
patch = is_vulnerable_patch?(safe_version_array, detected_version_array)
|
|
371
371
|
aux_patch = is_vulnerable_aux_patch?(safe_version_array, detected_version_array)
|
|
372
372
|
|
|
373
|
-
|
|
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}"
|
|
374
374
|
|
|
375
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
|
|
376
376
|
|
|
@@ -417,7 +417,7 @@ module Dawn
|
|
|
417
417
|
# I'll support also nonsense checks.
|
|
418
418
|
|
|
419
419
|
$logger.warn "Setting the predicate #{dep} will mark all versions as deprecated" unless self.enable_warning.nil?
|
|
420
|
-
|
|
420
|
+
debug_verbosely "You kindly mark #{detected_version} as deprecated with this predicate #{dep}"
|
|
421
421
|
return true
|
|
422
422
|
end
|
|
423
423
|
|
data/lib/dawn/knowledge_base.rb
CHANGED
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
require 'singleton'
|
|
2
|
+
|
|
3
|
+
# For HTTPS communication to check for KB updates and to fetch them
|
|
4
|
+
require 'net/http'
|
|
5
|
+
require 'uri'
|
|
6
|
+
|
|
7
|
+
require 'yaml'
|
|
8
|
+
require 'digest'
|
|
9
|
+
|
|
10
|
+
require 'date'
|
|
11
|
+
|
|
1
12
|
# Core KB
|
|
2
13
|
require "dawn/kb/basic_check"
|
|
3
14
|
require "dawn/kb/pattern_match_check"
|
|
@@ -7,298 +18,51 @@ require "dawn/kb/operating_system_check"
|
|
|
7
18
|
require "dawn/kb/combo_check"
|
|
8
19
|
require "dawn/kb/version_check"
|
|
9
20
|
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
|
-
|
|
21
|
+
require "dawn/kb/rubygem_check"
|
|
296
22
|
|
|
297
23
|
module Dawn
|
|
298
|
-
#
|
|
24
|
+
# This is the YAML powered experimental knowledge base
|
|
25
|
+
#
|
|
26
|
+
# When the old KB format, using Ruby classes will be marked as deprecated,
|
|
27
|
+
# than this one will be the official.
|
|
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_experimental"
|
|
50
|
+
#
|
|
51
|
+
# ...
|
|
52
|
+
#
|
|
53
|
+
# d = Dawn::KnowledgeBase.instance
|
|
54
|
+
# d.update if d.update?
|
|
55
|
+
# d.load
|
|
56
|
+
#
|
|
57
|
+
# Last update: gio 29 nov 2018, 17.34.57, CET
|
|
299
58
|
class KnowledgeBase
|
|
300
|
-
|
|
301
59
|
include Dawn::Utils
|
|
60
|
+
include Singleton
|
|
61
|
+
|
|
62
|
+
@@path = ""
|
|
63
|
+
@@error = ""
|
|
64
|
+
@@enabled_checks = [:generic_check, :code_quality, :bulletin, :code_style, :owasp_top_10]
|
|
65
|
+
|
|
302
66
|
|
|
303
67
|
GEM_CHECK = :rubygem_check
|
|
304
68
|
DEPENDENCY_CHECK = :dependency_check
|
|
@@ -308,330 +72,129 @@ module Dawn
|
|
|
308
72
|
COMBO_CHECK = :combo_check
|
|
309
73
|
CUSTOM_CHECK = :custom_check
|
|
310
74
|
|
|
75
|
+
REMOTE_KB_URL_PREFIX = "https://dawnscanner.org/data/"
|
|
76
|
+
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)
|
|
77
|
+
|
|
78
|
+
VERSION = "0.0.1"
|
|
79
|
+
|
|
80
|
+
attr_reader :security_checks
|
|
81
|
+
attr_reader :descriptor
|
|
82
|
+
attr_reader :path
|
|
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=@@path
|
|
91
|
+
@enabled_checks = @@enabled_checks
|
|
314
92
|
|
|
315
|
-
|
|
93
|
+
$logger.debug "KB root path is #{@path}"
|
|
316
94
|
end
|
|
317
95
|
|
|
318
|
-
def self.
|
|
319
|
-
|
|
320
|
-
|
|
96
|
+
def self.enabled_checks= checks
|
|
97
|
+
@@enabled_checks=checks
|
|
98
|
+
end
|
|
321
99
|
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
nil
|
|
100
|
+
|
|
101
|
+
def self.path= path_name
|
|
102
|
+
@@path=path_name
|
|
326
103
|
end
|
|
327
104
|
|
|
328
|
-
def
|
|
329
|
-
|
|
105
|
+
def is_packed?
|
|
106
|
+
return __packed?
|
|
330
107
|
end
|
|
331
108
|
|
|
332
|
-
def
|
|
333
|
-
|
|
109
|
+
def is_valid?
|
|
110
|
+
return __valid?
|
|
334
111
|
end
|
|
335
112
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
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
|
|
113
|
+
|
|
114
|
+
def find(name)
|
|
115
|
+
$logger.debug "I'm asked to find #{name}"
|
|
349
116
|
end
|
|
350
117
|
|
|
351
|
-
def
|
|
352
|
-
|
|
118
|
+
def unpack
|
|
119
|
+
$logger.warn "unpack is not yet implemented"
|
|
120
|
+
|
|
353
121
|
end
|
|
354
122
|
|
|
355
|
-
def
|
|
356
|
-
|
|
123
|
+
def self.kb_descriptor
|
|
124
|
+
{:kb=>{:version=>VERSION, :revision=>Time.now.strftime("%Y%m%d"), :api=>Dawn::VERSION}}.to_yaml
|
|
357
125
|
end
|
|
358
126
|
|
|
359
|
-
def
|
|
360
|
-
|
|
127
|
+
def update?
|
|
128
|
+
FileUtils.mkdir_p("tmp")
|
|
129
|
+
begin
|
|
130
|
+
response = Net::HTTP.get URI(REMOTE_KB_URL_PREFIX + "kb.yaml")
|
|
131
|
+
open("tmp/kb.yaml", "w") do |f|
|
|
132
|
+
f.puts(response)
|
|
133
|
+
end
|
|
134
|
+
response = Net::HTTP.get URI(REMOTE_KB_URL_PREFIX + "kb.yaml.sig")
|
|
135
|
+
open("tmp/kb.yaml.sig", "w") do |f|
|
|
136
|
+
f.puts(response)
|
|
137
|
+
end
|
|
138
|
+
rescue Exception => e
|
|
139
|
+
$logger.error e.to_s
|
|
140
|
+
return false
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
# Verify kb.yaml signature
|
|
144
|
+
|
|
145
|
+
YAML.load(response)
|
|
361
146
|
end
|
|
362
147
|
|
|
363
|
-
def
|
|
364
|
-
|
|
148
|
+
def all
|
|
149
|
+
@security_checks
|
|
365
150
|
end
|
|
366
151
|
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
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
|
|
152
|
+
# Load security checks from db/ folder.
|
|
153
|
+
#
|
|
154
|
+
# Returns an array of security checks, matching the mvc to be reviewed and
|
|
155
|
+
# the enabled check list or an empty array if an error occured.
|
|
156
|
+
def load
|
|
157
|
+
@security_checks = []
|
|
158
|
+
# $path = File.join(Dir.pwd, "db")
|
|
159
|
+
|
|
160
|
+
unless __valid?
|
|
161
|
+
@@error = "An invalid library it has been found. Please use --recovery flag to force fresh install from dawnscanner.org"
|
|
162
|
+
return []
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
unless __load?
|
|
166
|
+
@@error = "The library must be consumed with dawnscanner up to v#{@descriptor[:kb][:api]}. You are using dawnscanner v#{Dawn::VERSION}"
|
|
167
|
+
return []
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
@enabled_checks.each do |d|
|
|
171
|
+
|
|
172
|
+
dir = File.join(@path, d.to_s)
|
|
173
|
+
|
|
174
|
+
# Please note that if we enter in this branch, it means someone
|
|
175
|
+
# tampered the KB between the previous __valid? check and this point.
|
|
176
|
+
# Of course this is a very rare situation, but we must handle it.
|
|
177
|
+
unless Dir.exists?(dir)
|
|
178
|
+
$logger.warn "Missing check directory #{dir}"
|
|
179
|
+
else
|
|
180
|
+
Dir.glob(dir+"/**/*.yml").each do |f|
|
|
181
|
+
data = YAML.load_file(f)
|
|
182
|
+
@security_checks << data
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
end
|
|
189
|
+
|
|
190
|
+
$logger.debug "#{@security_checks.count}"
|
|
191
|
+
return @security_checks
|
|
629
192
|
end
|
|
630
193
|
|
|
631
|
-
def
|
|
194
|
+
def dump(verbose=false)
|
|
632
195
|
puts "Security checks currently supported:"
|
|
633
196
|
i=0
|
|
634
|
-
|
|
197
|
+
KnowledgeBase.instance.all.each do |check|
|
|
635
198
|
i+=1
|
|
636
199
|
if verbose
|
|
637
200
|
puts "Name: #{check.name}\tCVSS: #{check.cvss_score}\tReleased: #{check.release_date}"
|
|
@@ -644,6 +207,66 @@ module Dawn
|
|
|
644
207
|
puts "-----\nTotal: #{i}"
|
|
645
208
|
|
|
646
209
|
end
|
|
647
|
-
end
|
|
648
210
|
|
|
211
|
+
private
|
|
212
|
+
|
|
213
|
+
def __verify_hash(original, computed)
|
|
214
|
+
t=original.split(' ')
|
|
215
|
+
return false if t.length != 2
|
|
216
|
+
return (t[0] == computed)
|
|
217
|
+
end
|
|
218
|
+
|
|
219
|
+
def __valid?
|
|
220
|
+
|
|
221
|
+
lines = ""
|
|
222
|
+
|
|
223
|
+
unless File.exists?(File.join(@path, "kb.yaml"))
|
|
224
|
+
$logger.error "Missing kb.yaml in #{path}. Giving up"
|
|
225
|
+
return false
|
|
226
|
+
end
|
|
227
|
+
|
|
228
|
+
unless File.exists?(File.join(@path, "kb.yaml.sig"))
|
|
229
|
+
$logger.error "Missing kb.yaml signature in #{path}. Giving up"
|
|
230
|
+
return false
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
lines = File.read(File.join(@path, "kb.yaml"))
|
|
234
|
+
hash_file = Digest::SHA256.hexdigest lines
|
|
235
|
+
hash_orig = File.read(File.join(@path, "kb.yaml.sig"))
|
|
236
|
+
|
|
237
|
+
v = __verify_hash(hash_orig, hash_file)
|
|
238
|
+
if v
|
|
239
|
+
$logger.info("good kb.yaml file found. Reading knowledge base descriptor")
|
|
240
|
+
@descriptor = YAML.load(lines)
|
|
241
|
+
else
|
|
242
|
+
$logger.error("kb.yaml signature mismatch. Found #{hash_file} while expecting #{hash_orig}. Giving up")
|
|
243
|
+
return false
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
return true
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
# Check if the local KB is packet or not.
|
|
250
|
+
#
|
|
251
|
+
# Returns true if at least one KB tarball file it has been found in the
|
|
252
|
+
# local DB path
|
|
253
|
+
def __packed?
|
|
254
|
+
FILES.each do |fn|
|
|
255
|
+
return true if fn.end_with? 'tar.gz' and File.exists?(File.join(@path, fn))
|
|
256
|
+
end
|
|
257
|
+
return false
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def __load?
|
|
261
|
+
api = @descriptor[:kb][:api]
|
|
262
|
+
v = Dawn::VERSION
|
|
263
|
+
require "dawn/kb/version_check"
|
|
264
|
+
|
|
265
|
+
vc = Dawn::Kb::VersionCheck.new
|
|
266
|
+
return true if vc.is_higher?(api, v) # => true if v > api
|
|
267
|
+
return false
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
end
|
|
649
272
|
end
|