dawnscanner 1.2.99

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.
Files changed (306) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +4 -0
  3. data.tar.gz.sig +0 -0
  4. data/.gitignore +19 -0
  5. data/.ruby-gemset +1 -0
  6. data/.ruby-version +1 -0
  7. data/.travis.yml +8 -0
  8. data/Changelog.md +412 -0
  9. data/Gemfile +4 -0
  10. data/KnowledgeBase.md +213 -0
  11. data/LICENSE.txt +22 -0
  12. data/README.md +354 -0
  13. data/Rakefile +250 -0
  14. data/Roadmap.md +59 -0
  15. data/bin/dawn +210 -0
  16. data/certs/paolo_at_codesake_dot_com.pem +21 -0
  17. data/checksum/.placeholder +0 -0
  18. data/checksum/codesake-dawn-1.1.0.gem.sha512 +1 -0
  19. data/checksum/codesake-dawn-1.1.0.rc1.gem.sha512 +1 -0
  20. data/checksum/codesake-dawn-1.1.1.gem.sha512 +1 -0
  21. data/checksum/codesake-dawn-1.1.2.gem.sha512 +1 -0
  22. data/checksum/codesake-dawn-1.1.3.gem.sha512 +1 -0
  23. data/checksum/codesake-dawn-1.2.0.gem.sha512 +1 -0
  24. data/checksum/codesake-dawn-1.2.99.gem.sha512 +1 -0
  25. data/dawnscanner.gemspec +43 -0
  26. data/doc/codesake-dawn.yaml.sample +26 -0
  27. data/doc/dawn_1_0_announcement.md +139 -0
  28. data/doc/dawn_1_1_announcement.md +67 -0
  29. data/doc/dawn_1_2_announcement.md +69 -0
  30. data/features/dawn_complains_about_an_incorrect_command_line.feature.disabled +21 -0
  31. data/features/dawn_scan_a_secure_sinatra_app.feature.disabled +31 -0
  32. data/features/dawn_scan_a_vulnerable_sinatra_app.feature.disabled +36 -0
  33. data/features/step_definition/dawn_steps.rb +19 -0
  34. data/features/support/env.rb +1 -0
  35. data/lib/codesake-dawn.rb +12 -0
  36. data/lib/codesake/dawn/core.rb +175 -0
  37. data/lib/codesake/dawn/engine.rb +380 -0
  38. data/lib/codesake/dawn/gemfile_lock.rb +12 -0
  39. data/lib/codesake/dawn/kb/basic_check.rb +228 -0
  40. data/lib/codesake/dawn/kb/combo_check.rb +64 -0
  41. data/lib/codesake/dawn/kb/cve_2004_0755.rb +32 -0
  42. data/lib/codesake/dawn/kb/cve_2004_0983.rb +30 -0
  43. data/lib/codesake/dawn/kb/cve_2005_1992.rb +30 -0
  44. data/lib/codesake/dawn/kb/cve_2005_2337.rb +32 -0
  45. data/lib/codesake/dawn/kb/cve_2006_1931.rb +32 -0
  46. data/lib/codesake/dawn/kb/cve_2006_2582.rb +30 -0
  47. data/lib/codesake/dawn/kb/cve_2006_3694.rb +31 -0
  48. data/lib/codesake/dawn/kb/cve_2006_4112.rb +29 -0
  49. data/lib/codesake/dawn/kb/cve_2006_5467.rb +30 -0
  50. data/lib/codesake/dawn/kb/cve_2006_6303.rb +30 -0
  51. data/lib/codesake/dawn/kb/cve_2006_6852.rb +29 -0
  52. data/lib/codesake/dawn/kb/cve_2006_6979.rb +31 -0
  53. data/lib/codesake/dawn/kb/cve_2007_0469.rb +29 -0
  54. data/lib/codesake/dawn/kb/cve_2007_5162.rb +30 -0
  55. data/lib/codesake/dawn/kb/cve_2007_5379.rb +29 -0
  56. data/lib/codesake/dawn/kb/cve_2007_5380.rb +29 -0
  57. data/lib/codesake/dawn/kb/cve_2007_5770.rb +32 -0
  58. data/lib/codesake/dawn/kb/cve_2007_6077.rb +31 -0
  59. data/lib/codesake/dawn/kb/cve_2007_6612.rb +30 -0
  60. data/lib/codesake/dawn/kb/cve_2008_1145.rb +40 -0
  61. data/lib/codesake/dawn/kb/cve_2008_1891.rb +40 -0
  62. data/lib/codesake/dawn/kb/cve_2008_2376.rb +32 -0
  63. data/lib/codesake/dawn/kb/cve_2008_2662.rb +35 -0
  64. data/lib/codesake/dawn/kb/cve_2008_2663.rb +34 -0
  65. data/lib/codesake/dawn/kb/cve_2008_2664.rb +35 -0
  66. data/lib/codesake/dawn/kb/cve_2008_2725.rb +33 -0
  67. data/lib/codesake/dawn/kb/cve_2008_3655.rb +39 -0
  68. data/lib/codesake/dawn/kb/cve_2008_3657.rb +39 -0
  69. data/lib/codesake/dawn/kb/cve_2008_3790.rb +32 -0
  70. data/lib/codesake/dawn/kb/cve_2008_3905.rb +38 -0
  71. data/lib/codesake/dawn/kb/cve_2008_4094.rb +29 -0
  72. data/lib/codesake/dawn/kb/cve_2008_4310.rb +103 -0
  73. data/lib/codesake/dawn/kb/cve_2008_5189.rb +29 -0
  74. data/lib/codesake/dawn/kb/cve_2008_7248.rb +29 -0
  75. data/lib/codesake/dawn/kb/cve_2009_4078.rb +31 -0
  76. data/lib/codesake/dawn/kb/cve_2009_4124.rb +32 -0
  77. data/lib/codesake/dawn/kb/cve_2009_4214.rb +29 -0
  78. data/lib/codesake/dawn/kb/cve_2010_1330.rb +30 -0
  79. data/lib/codesake/dawn/kb/cve_2010_2489.rb +62 -0
  80. data/lib/codesake/dawn/kb/cve_2010_3933.rb +29 -0
  81. data/lib/codesake/dawn/kb/cve_2011_0188.rb +69 -0
  82. data/lib/codesake/dawn/kb/cve_2011_0446.rb +30 -0
  83. data/lib/codesake/dawn/kb/cve_2011_0447.rb +30 -0
  84. data/lib/codesake/dawn/kb/cve_2011_0739.rb +30 -0
  85. data/lib/codesake/dawn/kb/cve_2011_0995.rb +63 -0
  86. data/lib/codesake/dawn/kb/cve_2011_1004.rb +36 -0
  87. data/lib/codesake/dawn/kb/cve_2011_1005.rb +33 -0
  88. data/lib/codesake/dawn/kb/cve_2011_2197.rb +29 -0
  89. data/lib/codesake/dawn/kb/cve_2011_2686.rb +31 -0
  90. data/lib/codesake/dawn/kb/cve_2011_2705.rb +34 -0
  91. data/lib/codesake/dawn/kb/cve_2011_2929.rb +29 -0
  92. data/lib/codesake/dawn/kb/cve_2011_2930.rb +30 -0
  93. data/lib/codesake/dawn/kb/cve_2011_2931.rb +32 -0
  94. data/lib/codesake/dawn/kb/cve_2011_2932.rb +29 -0
  95. data/lib/codesake/dawn/kb/cve_2011_3009.rb +30 -0
  96. data/lib/codesake/dawn/kb/cve_2011_3186.rb +31 -0
  97. data/lib/codesake/dawn/kb/cve_2011_3187.rb +31 -0
  98. data/lib/codesake/dawn/kb/cve_2011_4319.rb +31 -0
  99. data/lib/codesake/dawn/kb/cve_2011_4815.rb +30 -0
  100. data/lib/codesake/dawn/kb/cve_2011_5036.rb +28 -0
  101. data/lib/codesake/dawn/kb/cve_2012_1098.rb +32 -0
  102. data/lib/codesake/dawn/kb/cve_2012_1099.rb +29 -0
  103. data/lib/codesake/dawn/kb/cve_2012_1241.rb +29 -0
  104. data/lib/codesake/dawn/kb/cve_2012_2139.rb +28 -0
  105. data/lib/codesake/dawn/kb/cve_2012_2140.rb +29 -0
  106. data/lib/codesake/dawn/kb/cve_2012_2660.rb +30 -0
  107. data/lib/codesake/dawn/kb/cve_2012_2661.rb +29 -0
  108. data/lib/codesake/dawn/kb/cve_2012_2671.rb +30 -0
  109. data/lib/codesake/dawn/kb/cve_2012_2694.rb +32 -0
  110. data/lib/codesake/dawn/kb/cve_2012_2695.rb +29 -0
  111. data/lib/codesake/dawn/kb/cve_2012_3424.rb +31 -0
  112. data/lib/codesake/dawn/kb/cve_2012_3463.rb +29 -0
  113. data/lib/codesake/dawn/kb/cve_2012_3464.rb +29 -0
  114. data/lib/codesake/dawn/kb/cve_2012_3465.rb +28 -0
  115. data/lib/codesake/dawn/kb/cve_2012_4464.rb +29 -0
  116. data/lib/codesake/dawn/kb/cve_2012_4466.rb +29 -0
  117. data/lib/codesake/dawn/kb/cve_2012_4481.rb +28 -0
  118. data/lib/codesake/dawn/kb/cve_2012_4522.rb +29 -0
  119. data/lib/codesake/dawn/kb/cve_2012_5370.rb +29 -0
  120. data/lib/codesake/dawn/kb/cve_2012_5371.rb +29 -0
  121. data/lib/codesake/dawn/kb/cve_2012_5380.rb +30 -0
  122. data/lib/codesake/dawn/kb/cve_2012_6109.rb +27 -0
  123. data/lib/codesake/dawn/kb/cve_2012_6134.rb +29 -0
  124. data/lib/codesake/dawn/kb/cve_2012_6496.rb +30 -0
  125. data/lib/codesake/dawn/kb/cve_2012_6497.rb +30 -0
  126. data/lib/codesake/dawn/kb/cve_2013_0155.rb +31 -0
  127. data/lib/codesake/dawn/kb/cve_2013_0156.rb +29 -0
  128. data/lib/codesake/dawn/kb/cve_2013_0162.rb +30 -0
  129. data/lib/codesake/dawn/kb/cve_2013_0175.rb +29 -0
  130. data/lib/codesake/dawn/kb/cve_2013_0183.rb +27 -0
  131. data/lib/codesake/dawn/kb/cve_2013_0184.rb +27 -0
  132. data/lib/codesake/dawn/kb/cve_2013_0233.rb +28 -0
  133. data/lib/codesake/dawn/kb/cve_2013_0256.rb +61 -0
  134. data/lib/codesake/dawn/kb/cve_2013_0262.rb +28 -0
  135. data/lib/codesake/dawn/kb/cve_2013_0263.rb +28 -0
  136. data/lib/codesake/dawn/kb/cve_2013_0269.rb +29 -0
  137. data/lib/codesake/dawn/kb/cve_2013_0276.rb +30 -0
  138. data/lib/codesake/dawn/kb/cve_2013_0277.rb +27 -0
  139. data/lib/codesake/dawn/kb/cve_2013_0284.rb +29 -0
  140. data/lib/codesake/dawn/kb/cve_2013_0285.rb +29 -0
  141. data/lib/codesake/dawn/kb/cve_2013_0333.rb +30 -0
  142. data/lib/codesake/dawn/kb/cve_2013_1607.rb +27 -0
  143. data/lib/codesake/dawn/kb/cve_2013_1655.rb +67 -0
  144. data/lib/codesake/dawn/kb/cve_2013_1656.rb +30 -0
  145. data/lib/codesake/dawn/kb/cve_2013_1756.rb +28 -0
  146. data/lib/codesake/dawn/kb/cve_2013_1800.rb +28 -0
  147. data/lib/codesake/dawn/kb/cve_2013_1801.rb +29 -0
  148. data/lib/codesake/dawn/kb/cve_2013_1802.rb +29 -0
  149. data/lib/codesake/dawn/kb/cve_2013_1812.rb +29 -0
  150. data/lib/codesake/dawn/kb/cve_2013_1821.rb +30 -0
  151. data/lib/codesake/dawn/kb/cve_2013_1854.rb +28 -0
  152. data/lib/codesake/dawn/kb/cve_2013_1855.rb +27 -0
  153. data/lib/codesake/dawn/kb/cve_2013_1856.rb +28 -0
  154. data/lib/codesake/dawn/kb/cve_2013_1857.rb +29 -0
  155. data/lib/codesake/dawn/kb/cve_2013_1875.rb +29 -0
  156. data/lib/codesake/dawn/kb/cve_2013_1898.rb +29 -0
  157. data/lib/codesake/dawn/kb/cve_2013_1911.rb +30 -0
  158. data/lib/codesake/dawn/kb/cve_2013_1933.rb +29 -0
  159. data/lib/codesake/dawn/kb/cve_2013_1947.rb +29 -0
  160. data/lib/codesake/dawn/kb/cve_2013_1948.rb +29 -0
  161. data/lib/codesake/dawn/kb/cve_2013_2065.rb +31 -0
  162. data/lib/codesake/dawn/kb/cve_2013_2090.rb +30 -0
  163. data/lib/codesake/dawn/kb/cve_2013_2105.rb +28 -0
  164. data/lib/codesake/dawn/kb/cve_2013_2119.rb +29 -0
  165. data/lib/codesake/dawn/kb/cve_2013_2512.rb +28 -0
  166. data/lib/codesake/dawn/kb/cve_2013_2513.rb +27 -0
  167. data/lib/codesake/dawn/kb/cve_2013_2516.rb +28 -0
  168. data/lib/codesake/dawn/kb/cve_2013_2615.rb +29 -0
  169. data/lib/codesake/dawn/kb/cve_2013_2616.rb +29 -0
  170. data/lib/codesake/dawn/kb/cve_2013_2617.rb +30 -0
  171. data/lib/codesake/dawn/kb/cve_2013_3221.rb +29 -0
  172. data/lib/codesake/dawn/kb/cve_2013_4164.rb +32 -0
  173. data/lib/codesake/dawn/kb/cve_2013_4203.rb +27 -0
  174. data/lib/codesake/dawn/kb/cve_2013_4389.rb +28 -0
  175. data/lib/codesake/dawn/kb/cve_2013_4413.rb +29 -0
  176. data/lib/codesake/dawn/kb/cve_2013_4457.rb +31 -0
  177. data/lib/codesake/dawn/kb/cve_2013_4478.rb +28 -0
  178. data/lib/codesake/dawn/kb/cve_2013_4479.rb +28 -0
  179. data/lib/codesake/dawn/kb/cve_2013_4489.rb +30 -0
  180. data/lib/codesake/dawn/kb/cve_2013_4491.rb +30 -0
  181. data/lib/codesake/dawn/kb/cve_2013_4492.rb +31 -0
  182. data/lib/codesake/dawn/kb/cve_2013_4562.rb +29 -0
  183. data/lib/codesake/dawn/kb/cve_2013_4593.rb +29 -0
  184. data/lib/codesake/dawn/kb/cve_2013_5647.rb +31 -0
  185. data/lib/codesake/dawn/kb/cve_2013_5671.rb +28 -0
  186. data/lib/codesake/dawn/kb/cve_2013_6414.rb +31 -0
  187. data/lib/codesake/dawn/kb/cve_2013_6415.rb +30 -0
  188. data/lib/codesake/dawn/kb/cve_2013_6416.rb +31 -0
  189. data/lib/codesake/dawn/kb/cve_2013_6417.rb +31 -0
  190. data/lib/codesake/dawn/kb/cve_2013_6421.rb +30 -0
  191. data/lib/codesake/dawn/kb/cve_2013_6459.rb +30 -0
  192. data/lib/codesake/dawn/kb/cve_2013_6460.rb +55 -0
  193. data/lib/codesake/dawn/kb/cve_2013_6461.rb +59 -0
  194. data/lib/codesake/dawn/kb/cve_2013_7086.rb +29 -0
  195. data/lib/codesake/dawn/kb/cve_2014_0036.rb +29 -0
  196. data/lib/codesake/dawn/kb/cve_2014_0080.rb +30 -0
  197. data/lib/codesake/dawn/kb/cve_2014_0081.rb +28 -0
  198. data/lib/codesake/dawn/kb/cve_2014_0082.rb +29 -0
  199. data/lib/codesake/dawn/kb/cve_2014_0130.rb +28 -0
  200. data/lib/codesake/dawn/kb/cve_2014_1233.rb +29 -0
  201. data/lib/codesake/dawn/kb/cve_2014_1234.rb +28 -0
  202. data/lib/codesake/dawn/kb/cve_2014_2322.rb +30 -0
  203. data/lib/codesake/dawn/kb/cve_2014_2525.rb +61 -0
  204. data/lib/codesake/dawn/kb/cve_2014_2538.rb +28 -0
  205. data/lib/codesake/dawn/kb/cve_2014_3482.rb +30 -0
  206. data/lib/codesake/dawn/kb/cve_2014_3483.rb +29 -0
  207. data/lib/codesake/dawn/kb/dependency_check.rb +86 -0
  208. data/lib/codesake/dawn/kb/deprecation_check.rb +40 -0
  209. data/lib/codesake/dawn/kb/not_revised_code.rb +24 -0
  210. data/lib/codesake/dawn/kb/operating_system_check.rb +98 -0
  211. data/lib/codesake/dawn/kb/osvdb_105971.rb +31 -0
  212. data/lib/codesake/dawn/kb/osvdb_108530.rb +29 -0
  213. data/lib/codesake/dawn/kb/osvdb_108563.rb +30 -0
  214. data/lib/codesake/dawn/kb/osvdb_108569.rb +30 -0
  215. data/lib/codesake/dawn/kb/osvdb_108570.rb +29 -0
  216. data/lib/codesake/dawn/kb/owasp_ror_cheatsheet.rb +41 -0
  217. data/lib/codesake/dawn/kb/owasp_ror_cheatsheet/check_for_backup_files.rb +22 -0
  218. data/lib/codesake/dawn/kb/owasp_ror_cheatsheet/check_for_safe_redirect_and_forward.rb +59 -0
  219. data/lib/codesake/dawn/kb/owasp_ror_cheatsheet/command_injection.rb +30 -0
  220. data/lib/codesake/dawn/kb/owasp_ror_cheatsheet/csrf.rb +31 -0
  221. data/lib/codesake/dawn/kb/owasp_ror_cheatsheet/mass_assignment_in_model.rb +35 -0
  222. data/lib/codesake/dawn/kb/owasp_ror_cheatsheet/security_related_headers.rb +38 -0
  223. data/lib/codesake/dawn/kb/owasp_ror_cheatsheet/sensitive_files.rb +31 -0
  224. data/lib/codesake/dawn/kb/owasp_ror_cheatsheet/session_stored_in_database.rb +33 -0
  225. data/lib/codesake/dawn/kb/pattern_match_check.rb +129 -0
  226. data/lib/codesake/dawn/kb/ruby_version_check.rb +91 -0
  227. data/lib/codesake/dawn/kb/simpleform_xss_20131129.rb +30 -0
  228. data/lib/codesake/dawn/kb/version_check.rb +418 -0
  229. data/lib/codesake/dawn/knowledge_base.rb +513 -0
  230. data/lib/codesake/dawn/padrino.rb +82 -0
  231. data/lib/codesake/dawn/rails.rb +17 -0
  232. data/lib/codesake/dawn/railtie.rb +9 -0
  233. data/lib/codesake/dawn/reporter.rb +280 -0
  234. data/lib/codesake/dawn/sinatra.rb +129 -0
  235. data/lib/codesake/dawn/tasks.rb +27 -0
  236. data/lib/codesake/dawn/utils.rb +21 -0
  237. data/lib/codesake/dawn/version.rb +28 -0
  238. data/lib/tasks/codesake-dawn_tasks.rake +1 -0
  239. data/spec/lib/dawn/codesake_core_spec.rb +9 -0
  240. data/spec/lib/dawn/codesake_knowledgebase_spec.rb +940 -0
  241. data/spec/lib/dawn/codesake_padrino_engine_disabled.rb +45 -0
  242. data/spec/lib/dawn/codesake_rails_engine_disabled.rb +12 -0
  243. data/spec/lib/dawn/codesake_sinatra_engine_disabled.rb +128 -0
  244. data/spec/lib/kb/codesake_cve_2013_0175_spec.rb +35 -0
  245. data/spec/lib/kb/codesake_cve_2013_4457_spec.rb +41 -0
  246. data/spec/lib/kb/codesake_dependency_version_check_spec.rb +76 -0
  247. data/spec/lib/kb/codesake_deprecation_check_spec.rb +56 -0
  248. data/spec/lib/kb/codesake_ruby_version_check_spec.rb +40 -0
  249. data/spec/lib/kb/codesake_version_check_spec.rb +165 -0
  250. data/spec/lib/kb/cve_2011_2705_spec.rb +35 -0
  251. data/spec/lib/kb/cve_2011_2930_spec.rb +31 -0
  252. data/spec/lib/kb/cve_2011_3009_spec.rb +25 -0
  253. data/spec/lib/kb/cve_2011_3187_spec.rb +24 -0
  254. data/spec/lib/kb/cve_2011_4319_spec.rb +44 -0
  255. data/spec/lib/kb/cve_2011_5036_spec.rb +95 -0
  256. data/spec/lib/kb/cve_2012_1098_spec.rb +36 -0
  257. data/spec/lib/kb/cve_2012_2139_spec.rb +20 -0
  258. data/spec/lib/kb/cve_2012_2671_spec.rb +23 -0
  259. data/spec/lib/kb/cve_2012_6109_spec.rb +112 -0
  260. data/spec/lib/kb/cve_2013_0162_spec.rb +23 -0
  261. data/spec/lib/kb/cve_2013_0183_spec.rb +54 -0
  262. data/spec/lib/kb/cve_2013_0184_spec.rb +115 -0
  263. data/spec/lib/kb/cve_2013_0256_spec.rb +34 -0
  264. data/spec/lib/kb/cve_2013_0262_spec.rb +44 -0
  265. data/spec/lib/kb/cve_2013_0263_spec.rb +11 -0
  266. data/spec/lib/kb/cve_2013_1607_spec.rb +15 -0
  267. data/spec/lib/kb/cve_2013_1655_spec.rb +31 -0
  268. data/spec/lib/kb/cve_2013_1756_spec.rb +23 -0
  269. data/spec/lib/kb/cve_2013_2090_spec.rb +15 -0
  270. data/spec/lib/kb/cve_2013_2105_spec.rb +11 -0
  271. data/spec/lib/kb/cve_2013_2119_spec.rb +27 -0
  272. data/spec/lib/kb/cve_2013_2512_spec.rb +15 -0
  273. data/spec/lib/kb/cve_2013_2513_spec.rb +15 -0
  274. data/spec/lib/kb/cve_2013_2516_spec.rb +15 -0
  275. data/spec/lib/kb/cve_2013_4203_spec.rb +15 -0
  276. data/spec/lib/kb/cve_2013_4413_spec.rb +16 -0
  277. data/spec/lib/kb/cve_2013_4489_spec.rb +63 -0
  278. data/spec/lib/kb/cve_2013_4593_spec.rb +16 -0
  279. data/spec/lib/kb/cve_2013_5647_spec.rb +19 -0
  280. data/spec/lib/kb/cve_2013_5671_spec.rb +27 -0
  281. data/spec/lib/kb/cve_2013_6416_spec.rb +31 -0
  282. data/spec/lib/kb/cve_2013_6459_spec.rb +15 -0
  283. data/spec/lib/kb/cve_2013_7086_spec.rb +22 -0
  284. data/spec/lib/kb/cve_2014_0036_spec.rb +15 -0
  285. data/spec/lib/kb/cve_2014_0080_spec.rb +28 -0
  286. data/spec/lib/kb/cve_2014_0081_spec.rb +68 -0
  287. data/spec/lib/kb/cve_2014_0082_spec.rb +52 -0
  288. data/spec/lib/kb/cve_2014_0130_spec.rb +19 -0
  289. data/spec/lib/kb/cve_2014_1233_spec.rb +15 -0
  290. data/spec/lib/kb/cve_2014_1234_spec.rb +16 -0
  291. data/spec/lib/kb/cve_2014_2322_spec.rb +15 -0
  292. data/spec/lib/kb/cve_2014_2538_spec.rb +15 -0
  293. data/spec/lib/kb/cve_2014_3482_spec.rb +15 -0
  294. data/spec/lib/kb/cve_2014_3483_spec.rb +23 -0
  295. data/spec/lib/kb/osvdb_105971_spec.rb +15 -0
  296. data/spec/lib/kb/osvdb_108530_spec.rb +22 -0
  297. data/spec/lib/kb/osvdb_108563_spec.rb +18 -0
  298. data/spec/lib/kb/osvdb_108569_spec.rb +17 -0
  299. data/spec/lib/kb/osvdb_108570_spec.rb +17 -0
  300. data/spec/lib/kb/owasp_ror_cheatsheet_disabled.rb +56 -0
  301. data/spec/spec_helper.rb +11 -0
  302. data/support/bootstrap.js +2027 -0
  303. data/support/bootstrap.min.css +9 -0
  304. data/support/codesake.css +63 -0
  305. metadata +659 -0
  306. metadata.gz.sig +0 -0
@@ -0,0 +1,250 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ # require "highline/import"
4
+
5
+ require 'cucumber'
6
+ require 'cucumber/rake/task'
7
+
8
+ require 'fileutils'
9
+ require "codesake/dawn/utils"
10
+ require "codesake/dawn/knowledge_base"
11
+
12
+ Cucumber::Rake::Task.new(:features) do |t|
13
+ t.cucumber_opts = "features --format pretty -x"
14
+ t.fork = false
15
+ end
16
+
17
+ RSpec::Core::RakeTask.new do |t|
18
+ t.rspec_opts = ["--color"]
19
+ end
20
+
21
+
22
+ task :default => [ :spec, :features, :kb ]
23
+ task :test => :spec
24
+ task :prepare => [:build, :'checksum:calculate', :'checksum:commit']
25
+ task :release => [:prepare]
26
+
27
+ # namespace :check do
28
+ # desc "Create a dependency check"
29
+ # task :dependency, :name do |t, args|
30
+ # end
31
+
32
+ # end
33
+ desc "Create a new CVE test"
34
+ task :cve, :name do |t,args|
35
+ name = args.name
36
+ SRC_DIR = "./lib/codesake/dawn/kb/"
37
+ SPEC_DIR = "./spec/lib/kb/"
38
+
39
+ raise "### It seems that #{name} is already in Dawn knowledge base" unless Codesake::Dawn::KnowledgeBase.find(nil, name).nil?
40
+ raise "### Invalid CVE title: #{name}" if name.nil? or name.empty? or /CVE-\d{4}-\d{4}/.match(name).nil?
41
+ raise "### No target directory: #{SRC_DIR}" unless Dir.exists?(SRC_DIR)
42
+ raise "### No rspec directory: #{SPEC_DIR}" unless Dir.exists?(SPEC_DIR)
43
+
44
+ puts "Adding #{name} to knowledge base..."
45
+
46
+ rb_filename = SRC_DIR+name.downcase.gsub("-", "_")+".rb"
47
+ spec_filename = SPEC_DIR+name.downcase.gsub("-", "_")+"_spec.rb"
48
+ class_name = name.gsub("-", "_")
49
+
50
+ open(rb_filename, "w") do |file|
51
+ file.puts "module Codesake"
52
+ file.puts "\tmodule Dawn"
53
+ file.puts "\t\tmodule Kb"
54
+ file.puts "\t\t\t# Automatically created with rake on #{Time.now.strftime('%Y-%m-%d')}"
55
+ file.puts "\t\t\tclass #{class_name}"
56
+ file.puts "\t\t\t\t# Include the testing skeleton for this CVE"
57
+ file.puts "\t\t\t\t# include PatternMatchCheck"
58
+ file.puts "\t\t\t\t# include DependencyCheck"
59
+ file.puts "\t\t\t\t# include RubyVersionCheck"
60
+ file.puts ""
61
+ file.puts "\t\t\t\tdef initialize"
62
+ file.puts "\t\t\t\tend"
63
+ file.puts "\t\t\tend"
64
+ file.puts "\t\tend"
65
+ file.puts "\tend"
66
+ file.puts "end"
67
+ end
68
+ puts "#{rb_filename} created"
69
+
70
+ open(spec_filename, "w") do |file|
71
+ file.puts "require 'spec_helper'"
72
+
73
+ file.puts "describe \"The #{name} vulnerability\" do"
74
+ file.puts "\tbefore(:all) do"
75
+ file.puts "\t\t@check = Codesake::Dawn::Kb::#{class_name}.new"
76
+ file.puts "\t\t# @check.debug = true"
77
+ file.puts "\tend"
78
+ file.puts "\tit \"is reported when...\""
79
+ file.puts "end"
80
+ end
81
+ puts "#{spec_filename} created"
82
+
83
+ puts "*** PLEASE IMPLEMENT TEST FOR #{name} IN spec/lib/dawn/codesake_knowledgebase_spec.rb in order to reflect changes"
84
+ puts "*** PLEASE ADD THIS CODE IN lib/codesake/dawn/knowledge_base.rb in order to reflect changes"
85
+ puts "require \"codesake/dawn/kb/#{class_name.downcase}\""
86
+ puts "it \"must have test for #{name}\" do"
87
+ puts " sc = kb.find(\"#{name}\")"
88
+ puts " sc.should_not be_nil"
89
+ puts " sc.class.should == Codesake::Dawn::Kb::#{class_name}"
90
+ puts "end"
91
+
92
+
93
+ end
94
+
95
+
96
+
97
+ desc "Create a new Generic security check"
98
+ task :check, :name do |t,args|
99
+ name = args.name
100
+ SRC_DIR = "./lib/codesake/dawn/kb/"
101
+ SPEC_DIR = "./spec/lib/kb/"
102
+
103
+ raise "### It seems that #{name} is already in Dawn knowledge base" unless Codesake::Dawn::KnowledgeBase.find(nil, name).nil?
104
+ raise "### No target directory: #{SRC_DIR}" unless Dir.exists?(SRC_DIR)
105
+ raise "### No rspec directory: #{SPEC_DIR}" unless Dir.exists?(SPEC_DIR)
106
+
107
+ puts "Adding #{name} to knowledge base..."
108
+
109
+ rb_filename = SRC_DIR+name.downcase.gsub("-", "_")+".rb"
110
+ spec_filename = SPEC_DIR+name.downcase.gsub("-", "_")+"_spec.rb"
111
+ class_name = name.gsub("-", "_")
112
+
113
+ open(rb_filename, "w") do |file|
114
+ file.puts "module Codesake"
115
+ file.puts "\tmodule Dawn"
116
+ file.puts "\t\tmodule Kb"
117
+ file.puts "\t\t\t# Automatically created with rake on #{Time.now.strftime('%Y-%m-%d')}"
118
+ file.puts "\t\t\tclass #{class_name}"
119
+ file.puts "\t\t\t\t# Include the testing skeleton for this Security Check"
120
+ file.puts "\t\t\t\t# include PatternMatchCheck"
121
+ file.puts "\t\t\t\t# include DependencyCheck"
122
+ file.puts "\t\t\t\t# include RubyVersionCheck"
123
+ file.puts ""
124
+ file.puts "\t\t\t\tdef initialize"
125
+ file.puts "\t\t\t\tend"
126
+ file.puts "\t\t\tend"
127
+ file.puts "\t\tend"
128
+ file.puts "\tend"
129
+ file.puts "end"
130
+ end
131
+ puts "#{rb_filename} created"
132
+
133
+ open(spec_filename, "w") do |file|
134
+ file.puts "require 'spec_helper'"
135
+
136
+ file.puts "describe \"The #{name} vulnerability\" do"
137
+ file.puts "\tbefore(:all) do"
138
+ file.puts "\t\t@check = Codesake::Dawn::Kb::#{class_name}.new"
139
+ file.puts "\t\t# @check.debug = true"
140
+ file.puts "\tend"
141
+ file.puts "\tit \"is reported when...\""
142
+ file.puts "end"
143
+ end
144
+ puts "#{spec_filename} created"
145
+
146
+
147
+ puts "*** PLEASE IMPLEMENT TEST FOR #{name} IN spec/lib/dawn/codesake_knowledgebase_spec.rb in order to reflect changes"
148
+ puts "*** PLEASE ADD THIS CODE IN lib/codesake/dawn/knowledge_base.rb in order to reflect changes"
149
+ puts "require \"codesake/dawn/kb/#{class_name.downcase}\""
150
+ puts "it \"must have test for #{name}\" do"
151
+ puts " sc = kb.find(\"#{name}\")"
152
+ puts " sc.should_not be_nil"
153
+ puts " sc.class.should == Codesake::Dawn::Kb::#{class_name}"
154
+ puts "end"
155
+
156
+
157
+ end
158
+
159
+ namespace :kb do
160
+ desc 'Check information lint'
161
+ task :lint do
162
+ Codesake::Dawn::KnowledgeBase.new.all.each do |check|
163
+ l = check.lint
164
+ puts "check #{check.name} has this attribute(s) with a nil value: #{l.to_s}" unless l.size == 0
165
+ end
166
+
167
+ end
168
+ desc 'Creates a KnowledgeBase.md file'
169
+ task :create do
170
+ checks = Codesake::Dawn::KnowledgeBase.new.all
171
+ open("KnowledgeBase.md", "w") do |file|
172
+ file.puts "# Codesake::Dawn Knowledge base"
173
+ file.puts "\nThe knowledge base library for Codesake::Dawn version #{Codesake::Dawn::VERSION} contains #{checks.count} security checks."
174
+ file.puts "---"
175
+ checks.each do |c|
176
+ file.puts "* [#{c.name}](#{c.cve_link}): #{c.message}" if c.name.start_with?('CVE')
177
+ file.puts "* [#{c.name}](#{c.osvdb_link}): #{c.message}" if c.name.start_with?('OSVDB')
178
+ file.puts "* #{c.name}: #{c.message}" unless c.name.start_with?('CVE')
179
+ end
180
+
181
+ file.puts "\n\n_Last updated: #{Time.now.strftime("%a %d %b %T %Z %Y")}_"
182
+ end
183
+ puts "KnowledgeBase.md file successfully generated"
184
+
185
+ end
186
+ end
187
+
188
+ require 'digest/sha2'
189
+ namespace :checksum do
190
+
191
+ desc 'Calculate gem checksum'
192
+ task :calculate do
193
+ system 'mkdir -p checksum > /dev/null'
194
+ built_gem_path = "pkg/codesake-dawn-#{Codesake::Dawn::VERSION}.gem"
195
+ checksum = Digest::SHA512.new.hexdigest(File.read(built_gem_path))
196
+ checksum_path = "checksum/codesake-dawn-#{Codesake::Dawn::VERSION}.gem.sha512"
197
+ File.open(checksum_path, 'w' ) {|f| f.write(checksum) }
198
+
199
+ puts "#{checksum_path}: #{checksum}"
200
+ end
201
+
202
+ desc 'Add and commit latest checksum'
203
+ task :commit do
204
+ checksum_path = "checksum/codesake-dawn-#{Codesake::Dawn::VERSION}.gem.sha512"
205
+ system "git add #{checksum_path}"
206
+ system "git commit -v #{checksum_path} -m \"Adding #{Codesake::Dawn::VERSION} checksum to repo\""
207
+ end
208
+ end
209
+
210
+ ###############################################################################
211
+ # ruby-advisory-rb integration
212
+ ###############################################################################
213
+
214
+ namespace :rubysec do
215
+ desc 'Find new CVE bulletins to add to Codesake::Dawn'
216
+ task :find do
217
+ git_url = 'git@github.com:rubysec/ruby-advisory-db.git'
218
+ target_dir = './tmp/'
219
+ system "mkdir -p #{target_dir}"
220
+ system "rm -rf #{target_dir}ruby-advisory-db"
221
+ system "git clone #{git_url} #{target_dir}ruby-advisory-db"
222
+ list = []
223
+ Dir.glob("#{target_dir}ruby-advisory-db/gems/*/*.yml") do |path|
224
+ advisory = YAML.load_file(path)
225
+ if advisory['cve']
226
+ cve = "CVE-"+advisory['cve']
227
+ # Exclusion
228
+ # CVE-2007-6183 is a vulnerability in gnome2 ruby binding. Not a gem, I don't care
229
+ # CVE-2013-1878 is a duplicate of CVE-2013-2617 that is in knowledge base
230
+ # CVE-2013-1876 is a duplicate of CVE-2013-2615 that is in knowledge base
231
+ exclusion = ["CVE-2007-6183", "CVE-2013-1876", "CVE-2013-1878"]
232
+ if exclusion.include?(cve)
233
+ puts "#{cve} is in the exclusion list"
234
+ else
235
+ found = Codesake::Dawn::KnowledgeBase.find(nil, cve)
236
+ puts "#{cve} NOT in dawn v#{Codesake::Dawn::VERSION} knowledge base" unless found
237
+ list << cve unless found
238
+ end
239
+ end
240
+ end
241
+ unless list.empty?
242
+ File.open("missing_rubyadvisory_cvs_#{Time.now.strftime("%Y%m%d")}.txt", "w") do |f|
243
+ f.puts "Missing CVE bulletins - v#{Codesake::Dawn::VERSION} - #{Time.now.strftime("%d %B %Y")}"
244
+ f.puts list
245
+ end
246
+ end
247
+ system "rm -rf #{target_dir}ruby-advisory-db"
248
+
249
+ end
250
+ end
@@ -0,0 +1,59 @@
1
+ # Codesake Dawn - roadmap
2
+
3
+ Codesake::Dawn is a static analysis security scanner for ruby written web applications.
4
+ It supports [Sinatra](http://www.sinatrarb.com),
5
+ [Padrino](http://www.padrinorb.com) and [Ruby on Rails](http://rubyonrails.org)
6
+ frameworks.
7
+
8
+ This is an ongoing roadmap for the Codesake::Dawn source code review tool.
9
+
10
+ _latest update: Mon Mar 31 13:01:21 CEST 2014_
11
+
12
+ ## Version 1.2.0
13
+
14
+ * create a task to check for new CVE in NVD website
15
+ * SQLite3 integration for saving data. Each project will have its own SQLite
16
+ database containing reviews, findings and all. A table with Codesake::Dawn version it
17
+ created the database will be inserted as well
18
+ * add a language check. It will handle a ruby script as input and a
19
+ ruby\_parser line as unsafe pattern. It will compile the ruby and look for
20
+ the unsafe pattern
21
+ * Add preliminary Cross Site Scripting detection for Ruby on Rails.
22
+ * Issue #7: Improving HTML output and let the user the capability to provide a
23
+ basic layout to customize report
24
+ * Add a ruby deprecation check, accordingly to
25
+ https://bugs.ruby-lang.org/projects/ruby/wiki/ReleaseEngineering
26
+
27
+ ## Version 1.3.0
28
+
29
+ * Add support for ERB for in detect\_views
30
+ * Add preliminary javascript support
31
+ * adding test for CVE-2011-4969 XSS in jquery < 1.6.2
32
+ * add support for pure Rack applications
33
+ * Cross Site Scripting detection: it must be done for all MVC frameworks
34
+ (including Rack) and it must cover either reflected than stored attack
35
+ patterns
36
+ * Add a --github option to Codesake::Dawn to clone a remote repository, perform
37
+ a bundle install and do a code review.
38
+ * Add support for github hooks
39
+ * Add premilinary SQL injection detection for Ruby on Rails
40
+
41
+ ## Version 1.5.0
42
+
43
+ * Add insecure direct object reference detection for all MVC frameworks (including Rack)
44
+ * SQL Injection detection: it must be done for all MVC frameworks (including Rack)
45
+ * Add automatic mitigation patch generation
46
+ * Add support for Javascript
47
+
48
+ # Spinoff projects
49
+
50
+ Codesake::Dawn is a security scanner for ruby code. Modern web applications
51
+ however are wrote in a plenty of great technologies deserving a good tool for
52
+ security scan.
53
+
54
+ Node.js and Go are very promising programming languages and a tool similiar to
55
+ Codesake::Dawn can be wrote also to support them:
56
+
57
+ Initially they were in the Codesake::Dawn roadmap for a 2.0.0 version. However
58
+ we decide to drop this in the name of being focused on ruby programming
59
+ language.
@@ -0,0 +1,210 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'getoptlong'
4
+ require 'json'
5
+ require 'terminal-table'
6
+
7
+ require 'justify'
8
+
9
+ require 'codesake-commons'
10
+ require 'codesake-dawn'
11
+
12
+ APPNAME = File.basename($0)
13
+ LIST_KNOWN_FRAMEWORK = %w(rails sinatra padrino)
14
+ VALID_OUTPUT_FORMAT = %w(console json csv html)
15
+
16
+ $logger = Codesake::Commons::Logging.instance
17
+ opts = GetoptLong.new(
18
+ # report formatting options
19
+ [ '--ascii-tabular-report', '-a', GetoptLong::NO_ARGUMENT],
20
+ [ '--json', '-j', GetoptLong::NO_ARGUMENT],
21
+ [ '--html', '-H', GetoptLong::NO_ARGUMENT],
22
+
23
+ # MVC forcing
24
+ [ '--rails', '-r', GetoptLong::NO_ARGUMENT],
25
+ [ '--sinatra', '-s', GetoptLong::NO_ARGUMENT],
26
+ [ '--padrino', '-p', GetoptLong::NO_ARGUMENT],
27
+
28
+ [ '--gem-lock', '-G', GetoptLong::REQUIRED_ARGUMENT],
29
+ [ '--count-only', '-C', GetoptLong::NO_ARGUMENT],
30
+ [ '--exit-on-warn', '-z', GetoptLong::NO_ARGUMENT],
31
+
32
+ # Disable checks by family type
33
+ [ '--disable-cve-bulletins', GetoptLong::NO_ARGUMENT],
34
+ [ '--disable-code-quality', GetoptLong::NO_ARGUMENT],
35
+ [ '--disable-code-style', GetoptLong::NO_ARGUMENT],
36
+ [ '--disable-owasp-ror-cheatsheet', GetoptLong::NO_ARGUMENT],
37
+ [ '--disable-owasp-top-10', GetoptLong::NO_ARGUMENT],
38
+
39
+ # Search knowledge base
40
+ [ '--search-knowledge-base', '-S', GetoptLong::REQUIRED_ARGUMENT],
41
+ # List stuff
42
+ [ '--list-knowledge-base', GetoptLong::NO_ARGUMENT],
43
+ [ '--list-known-framework', GetoptLong::NO_ARGUMENT],
44
+ [ '--list-known-families', GetoptLong::NO_ARGUMENT],
45
+ # please save output to file
46
+ [ '--file', '-F', GetoptLong::REQUIRED_ARGUMENT],
47
+ # specify an alternate config file
48
+ [ '--config-file', '-c', GetoptLong::REQUIRED_ARGUMENT],
49
+
50
+ # service options
51
+ [ '--verbose', '-V', GetoptLong::NO_ARGUMENT],
52
+ [ '--debug', '-D', GetoptLong::NO_ARGUMENT],
53
+ [ '--version', '-v', GetoptLong::NO_ARGUMENT],
54
+ [ '--help', '-h', GetoptLong::NO_ARGUMENT]
55
+ )
56
+ opts.quiet=true
57
+
58
+ engine = nil
59
+
60
+
61
+ options = Codesake::Dawn::Core.read_conf(Codesake::Dawn::Core.find_conf(true))
62
+ check = ""
63
+ guess = {:name=>"", :version=>"", :connected_gems=>[]}
64
+
65
+ begin
66
+ opts.each do |opt, val|
67
+ case opt
68
+ when '--version'
69
+ puts "#{Codesake::Dawn::VERSION} [#{Codesake::Dawn::CODENAME}]"
70
+ Kernel.exit(0)
71
+ when '--config-file'
72
+ options = Codesake::Dawn::Core.read_conf(val)
73
+ when '--disable-cve-bulletins'
74
+ options[:enabled_checks].delete(:cve_bulletin)
75
+ when '--disable-code-quality'
76
+ options[:enabled_checks].delete(:code_quality)
77
+ when '--disable-code-style'
78
+ options[:enabled_checks].delete(:code_style)
79
+ when '--disable-owasp-ror-cheatsheet'
80
+ options[:enabled_checks].delete(:owasp_ror_cheatsheet)
81
+ when '--disable-owasp-top-10'
82
+ options[:enabled_checks].delete(:owasp_top_10_1)
83
+ options[:enabled_checks].delete(:owasp_top_10_2)
84
+ options[:enabled_checks].delete(:owasp_top_10_3)
85
+ options[:enabled_checks].delete(:owasp_top_10_4)
86
+ options[:enabled_checks].delete(:owasp_top_10_5)
87
+ options[:enabled_checks].delete(:owasp_top_10_6)
88
+ options[:enabled_checks].delete(:owasp_top_10_7)
89
+ options[:enabled_checks].delete(:owasp_top_10_8)
90
+ options[:enabled_checks].delete(:owasp_top_10_9)
91
+ options[:enabled_checks].delete(:owasp_top_10_10)
92
+ when '--list-known-families'
93
+ printf "Codesake::Dawn supports following check families:\n\n"
94
+ puts Codesake::Dawn::Kb::BasicCheck.families
95
+ Kernel.exit(0)
96
+ when '--json'
97
+ options[:output] = "json"
98
+ when '--ascii-tabular-report'
99
+ options[:output] = "tabular"
100
+ when '--html'
101
+ options[:output] = "html"
102
+ when '--rails'
103
+ options[:mvc]=:rails
104
+ when '--sinatra'
105
+ options[:mvc]=:sinatra
106
+ when '--padrino'
107
+ options[:mvc]=:padrino
108
+ when '--file'
109
+ options[:filename] = val
110
+ when '--gem-lock'
111
+ options[:gemfile_scan] = true
112
+ unless val.empty?
113
+ options[:gemfile_name] = val
114
+ guess = Codesake::Dawn::Core.guess_mvc(val)
115
+ end
116
+ when '--verbose'
117
+ options[:verbose]=true
118
+ when '--count-only'
119
+ options[:output] = "count"
120
+ when '--debug'
121
+ options[:debug] = true
122
+ when '--exit-on-warn'
123
+ options[:exit_on_warn] = true
124
+
125
+ when '--search-knowledge-base'
126
+ found = Codesake::Dawn::KnowledgeBase.find(nil, val)
127
+ puts "#{val} found in knowledgebase." if found
128
+ puts "#{val} not found in knowledgebase" if ! found
129
+ Kernel.exit(0)
130
+
131
+ when '--list-knowledge-base'
132
+ puts Codesake::Dawn::Core.dump_knowledge_base(options[:verbose])
133
+ Kernel.exit(0)
134
+ when '--list-known-framework'
135
+ puts "Ruby MVC framework supported by #{APPNAME}:"
136
+ LIST_KNOWN_FRAMEWORK.each do |mvc|
137
+ puts "* #{mvc}"
138
+ end
139
+ Kernel.exit(0)
140
+ when '--help'
141
+ Kernel.exit(Codesake::Dawn::Core.help)
142
+ end
143
+ end
144
+ rescue GetoptLong::InvalidOption => e
145
+
146
+ $logger.helo APPNAME, Codesake::Dawn::VERSION
147
+ $logger.err e.message
148
+ Kernel.exit(Codesake::Dawn::Core.help)
149
+ end
150
+
151
+ target=ARGV.shift
152
+
153
+ $logger.helo APPNAME, Codesake::Dawn::VERSION
154
+ trap("INT") { $logger.die('[INTERRUPTED]') }
155
+ $logger.die("missing target") if target.nil? && options[:gemfile_name].empty?
156
+ $logger.die("invalid directory (#{target})") if options[:gemfile_name].empty? &&! Codesake::Dawn::Core.is_good_target?(target)
157
+ $logger.die("if scanning Gemfile.lock file you must not force target MVC using one from -r, -s or -p flag") if ! options[:mvc].empty? && options[:gemfile_scan]
158
+ $logger.log("security check enabled: #{options[:enabled_checks]}") if options[:debug]
159
+
160
+
161
+ ## MVC auto detect.
162
+ # Skipping MVC autodetect if it's already been done by guess_mvc when choosing Gemfile.lock scan
163
+
164
+ unless options[:gemfile_scan]
165
+ begin
166
+ if options[:mvc].empty?
167
+ engine = Codesake::Dawn::Core.detect_mvc(target)
168
+ $logger.log("using #{engine.class.name} engine via autodect") if options[:debug]
169
+ else
170
+ engine = Codesake::Dawn::Rails.new(target) if options[:mvc] == :rails
171
+ engine = Codesake::Dawn::Sinatra.new(target) if options[:mvc] == :sinatra
172
+ engine = Codesake::Dawn::Padrino.new(target) if options[:mvc] == :padrino
173
+ end
174
+ rescue ArgumentError => e
175
+ $logger.die(e.message)
176
+ end
177
+ else
178
+ engine = Codesake::Dawn::GemfileLock.new(target, options[:gemfile_name], guess) # if options[:gemfile_scan]
179
+ end
180
+
181
+ $logger.die("ruby framework auto detect failed. Please force if rails, sinatra or padrino with -r, -s or -p flags") if engine.nil?
182
+
183
+ if options[:exit_on_warn]
184
+ Kernel.at_exit do
185
+ if engine.count_vulnerabilities != 0
186
+ Kernel.exit(engine.count_vulnerabilities)
187
+ end
188
+ end
189
+ end
190
+
191
+ if options[:debug]
192
+ $logger.warn "putting engine in debug mode"
193
+ engine.debug = true
194
+ end
195
+
196
+ $logger.die "missing target framework option" if engine.nil?
197
+ $logger.warn "this is a development Codesake::Dawn version" if Codesake::Dawn::RELEASE == "(development)"
198
+ $logger.die "nothing to do on #{target}" if ! options[:gemfile_scan] && ! engine.can_apply?
199
+
200
+ engine.load_knowledge_base(options[:enabled_checks])
201
+ ret = engine.apply_all
202
+
203
+ if options[:output] == "count"
204
+ puts (ret)? engine.vulnerabilities.count : "-1" unless options[:output] == "json"
205
+ puts (ret)? {:status=>"OK", :vulnerabilities_count=>engine.count_vulnerabilities}.to_json : {:status=>"KO", :vulnerabilities_count=>-1}.to_json
206
+ Kernel.exit(0)
207
+ end
208
+
209
+ Codesake::Dawn::Reporter.new({:engine=>engine, :apply_all_code=>ret, :format=>options[:output].to_sym, :filename=>options[:filename]}).report
210
+ $logger.bye