codesake-dawn 0.85 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (315) hide show
  1. checksums.yaml +4 -4
  2. data/.ruby-version +1 -1
  3. data/.travis.yml +1 -1
  4. data/Changelog.md +67 -1
  5. data/README.md +137 -29
  6. data/Rakefile +29 -2
  7. data/Roadmap.md +10 -93
  8. data/features/{dawn_complains_about_an_incorrect_command_line.feature → dawn_complains_about_an_incorrect_command_line.feature.disabled} +0 -0
  9. data/features/{dawn_scan_a_secure_sinatra_app.feature → dawn_scan_a_secure_sinatra_app.feature.disabled} +0 -0
  10. data/features/{dawn_scan_a_vulnerable_sinatra_app.feature → dawn_scan_a_vulnerable_sinatra_app.feature.disabled} +0 -0
  11. data/lib/codesake/dawn/kb/basic_check.rb +7 -1
  12. data/lib/codesake/dawn/kb/cve_2004_0755.rb +32 -0
  13. data/lib/codesake/dawn/kb/cve_2004_0983.rb +30 -0
  14. data/lib/codesake/dawn/kb/cve_2005_1992.rb +30 -0
  15. data/lib/codesake/dawn/kb/cve_2005_2337.rb +32 -0
  16. data/lib/codesake/dawn/kb/cve_2006_1931.rb +32 -0
  17. data/lib/codesake/dawn/kb/cve_2006_2582.rb +30 -0
  18. data/lib/codesake/dawn/kb/cve_2006_3694.rb +31 -0
  19. data/lib/codesake/dawn/kb/cve_2006_4112.rb +29 -0
  20. data/lib/codesake/dawn/kb/cve_2006_5467.rb +30 -0
  21. data/lib/codesake/dawn/kb/cve_2006_6303.rb +30 -0
  22. data/lib/codesake/dawn/kb/cve_2006_6852.rb +29 -0
  23. data/lib/codesake/dawn/kb/cve_2006_6979.rb +31 -0
  24. data/lib/codesake/dawn/kb/cve_2007_0469.rb +29 -0
  25. data/lib/codesake/dawn/kb/cve_2007_5162.rb +30 -0
  26. data/lib/codesake/dawn/kb/cve_2007_5379.rb +29 -0
  27. data/lib/codesake/dawn/kb/cve_2007_5380.rb +29 -0
  28. data/lib/codesake/dawn/kb/cve_2007_5770.rb +32 -0
  29. data/lib/codesake/dawn/kb/cve_2007_6077.rb +31 -0
  30. data/lib/codesake/dawn/kb/cve_2007_6612.rb +30 -0
  31. data/lib/codesake/dawn/kb/cve_2008_1145.rb +40 -0
  32. data/lib/codesake/dawn/kb/cve_2008_1891.rb +40 -0
  33. data/lib/codesake/dawn/kb/cve_2008_2376.rb +32 -0
  34. data/lib/codesake/dawn/kb/cve_2008_2662.rb +35 -0
  35. data/lib/codesake/dawn/kb/cve_2008_2663.rb +34 -0
  36. data/lib/codesake/dawn/kb/cve_2008_2664.rb +35 -0
  37. data/lib/codesake/dawn/kb/cve_2008_2725.rb +33 -0
  38. data/lib/codesake/dawn/kb/cve_2008_3655.rb +39 -0
  39. data/lib/codesake/dawn/kb/cve_2008_3657.rb +39 -0
  40. data/lib/codesake/dawn/kb/cve_2008_3790.rb +32 -0
  41. data/lib/codesake/dawn/kb/cve_2008_3905.rb +38 -0
  42. data/lib/codesake/dawn/kb/cve_2008_4094.rb +29 -0
  43. data/lib/codesake/dawn/kb/cve_2008_4310.rb +103 -0
  44. data/lib/codesake/dawn/kb/cve_2008_5189.rb +29 -0
  45. data/lib/codesake/dawn/kb/cve_2008_7248.rb +29 -0
  46. data/lib/codesake/dawn/kb/cve_2009_4078.rb +31 -0
  47. data/lib/codesake/dawn/kb/cve_2009_4124.rb +32 -0
  48. data/lib/codesake/dawn/kb/cve_2009_4214.rb +29 -0
  49. data/lib/codesake/dawn/kb/cve_2010_2489.rb +62 -0
  50. data/lib/codesake/dawn/kb/cve_2010_3933.rb +29 -0
  51. data/lib/codesake/dawn/kb/cve_2011_0188.rb +69 -0
  52. data/lib/codesake/dawn/kb/cve_2011_0739.rb +30 -0
  53. data/lib/codesake/dawn/kb/cve_2011_1004.rb +36 -0
  54. data/lib/codesake/dawn/kb/cve_2011_1005.rb +33 -0
  55. data/lib/codesake/dawn/kb/cve_2011_2686.rb +31 -0
  56. data/lib/codesake/dawn/kb/cve_2011_2705.rb +34 -0
  57. data/lib/codesake/dawn/kb/cve_2011_2930.rb +29 -0
  58. data/lib/codesake/dawn/kb/cve_2011_3009.rb +30 -0
  59. data/lib/codesake/dawn/kb/cve_2011_3187.rb +30 -0
  60. data/lib/codesake/dawn/kb/cve_2011_4319.rb +30 -0
  61. data/lib/codesake/dawn/kb/cve_2013_2090.rb +30 -0
  62. data/lib/codesake/dawn/kb/cve_2013_4457.rb +1 -1
  63. data/lib/codesake/dawn/kb/dependency_check.rb +2 -2
  64. data/lib/codesake/dawn/kb/nokogiri_dos_20131217.rb +1 -0
  65. data/lib/codesake/dawn/kb/operating_system_check.rb +4 -3
  66. data/lib/codesake/dawn/kb/ruby_version_check.rb +9 -3
  67. data/lib/codesake/dawn/knowledge_base.rb +113 -0
  68. data/lib/codesake/dawn/padrino.rb +1 -1
  69. data/lib/codesake/dawn/version.rb +14 -2
  70. data/lib/tasks/dawn.rake +4 -0
  71. data/spec/lib/dawn/codesake_knowledgebase_spec.rb +256 -0
  72. data/spec/lib/dawn/{codesake_padrino_engine_spec.rb → codesake_padrino_engine_disabled.rb} +0 -0
  73. data/spec/lib/dawn/{codesake_rails_engine_spec.rb → codesake_rails_engine_disabled.rb} +0 -0
  74. data/spec/lib/dawn/{codesake_sinatra_engine_spec.rb → codesake_sinatra_engine_disabled.rb} +5 -5
  75. data/spec/lib/kb/codesake_cve_2013_4457_spec.rb +40 -0
  76. data/spec/lib/kb/{codesake_cve_2013_6416.rb → codesake_cve_2013_6416_spec.rb} +5 -5
  77. data/spec/lib/kb/codesake_ruby_version_check_spec.rb +1 -0
  78. data/spec/lib/kb/cve_2004_0983_spec.rb +8 -0
  79. data/spec/lib/kb/cve_2005_1992_spec.rb +8 -0
  80. data/spec/lib/kb/cve_2005_2337_spec.rb +8 -0
  81. data/spec/lib/kb/cve_2006_1931_spec.rb +8 -0
  82. data/spec/lib/kb/cve_2006_2582_spec.rb +8 -0
  83. data/spec/lib/kb/cve_2006_3694_spec.rb +8 -0
  84. data/spec/lib/kb/cve_2006_4112_spec.rb +8 -0
  85. data/spec/lib/kb/cve_2006_5467_spec.rb +8 -0
  86. data/spec/lib/kb/cve_2006_6303_spec.rb +8 -0
  87. data/spec/lib/kb/cve_2006_6852_spec.rb +8 -0
  88. data/spec/lib/kb/cve_2006_6979_spec.rb +8 -0
  89. data/spec/lib/kb/cve_2007_0469_spec.rb +8 -0
  90. data/spec/lib/kb/cve_2007_5162_spec.rb +8 -0
  91. data/spec/lib/kb/cve_2007_5379_spec.rb +8 -0
  92. data/spec/lib/kb/cve_2007_5380_spec.rb +8 -0
  93. data/spec/lib/kb/cve_2007_5770_spec.rb +8 -0
  94. data/spec/lib/kb/cve_2007_6077_spec.rb +8 -0
  95. data/spec/lib/kb/cve_2007_6612_spec.rb +8 -0
  96. data/spec/lib/kb/cve_2008_1145_spec.rb +8 -0
  97. data/spec/lib/kb/cve_2008_1891_spec.rb +8 -0
  98. data/spec/lib/kb/cve_2008_2376_spec.rb +8 -0
  99. data/spec/lib/kb/cve_2008_2662_spec.rb +8 -0
  100. data/spec/lib/kb/cve_2008_2663_spec.rb +8 -0
  101. data/spec/lib/kb/cve_2008_2664_spec.rb +8 -0
  102. data/spec/lib/kb/cve_2008_2725_spec.rb +8 -0
  103. data/spec/lib/kb/cve_2008_3655_spec.rb +8 -0
  104. data/spec/lib/kb/cve_2008_3657_spec.rb +8 -0
  105. data/spec/lib/kb/cve_2008_3790_spec.rb +8 -0
  106. data/spec/lib/kb/cve_2008_3905_spec.rb +8 -0
  107. data/spec/lib/kb/cve_2008_4094_spec.rb +8 -0
  108. data/spec/lib/kb/cve_2008_4310_spec.rb +8 -0
  109. data/spec/lib/kb/cve_2008_5189_spec.rb +8 -0
  110. data/spec/lib/kb/cve_2008_7248_spec.rb +8 -0
  111. data/spec/lib/kb/cve_2009_4078_spec.rb +8 -0
  112. data/spec/lib/kb/cve_2009_4124_spec.rb +8 -0
  113. data/spec/lib/kb/cve_2009_4214_spec.rb +8 -0
  114. data/spec/lib/kb/cve_2010_2489_spec.rb +8 -0
  115. data/spec/lib/kb/cve_2010_3933_spec.rb +8 -0
  116. data/spec/lib/kb/cve_2011_0188_spec.rb +8 -0
  117. data/spec/lib/kb/cve_2011_0739_spec.rb +8 -0
  118. data/spec/lib/kb/cve_2011_1004_spec.rb +8 -0
  119. data/spec/lib/kb/cve_2011_1005_spec.rb +8 -0
  120. data/spec/lib/kb/cve_2011_2686_spec.rb +8 -0
  121. data/spec/lib/kb/cve_2011_2705_spec.rb +8 -0
  122. data/spec/lib/kb/cve_2011_2930_spec.rb +8 -0
  123. data/spec/lib/kb/cve_2011_3009_spec.rb +8 -0
  124. data/spec/lib/kb/cve_2011_3187_spec.rb +8 -0
  125. data/spec/lib/kb/cve_2011_4319_spec.rb +8 -0
  126. data/spec/lib/kb/cve_2013_2090_spec.rb +8 -0
  127. data/spec/lib/kb/{owasp_ror_cheatsheet_spec.rb → owasp_ror_cheatsheet_disabled.rb} +0 -0
  128. metadata +172 -395
  129. data/Competitive_matrix.md +0 -177
  130. data/TODO.md +0 -64
  131. data/spec/support/hello_world_3.0.19/Gemfile +0 -31
  132. data/spec/support/hello_world_3.0.19/README +0 -256
  133. data/spec/support/hello_world_3.0.19/Rakefile +0 -7
  134. data/spec/support/hello_world_3.0.19/app/controllers/application_controller.rb +0 -3
  135. data/spec/support/hello_world_3.0.19/app/helpers/application_helper.rb +0 -2
  136. data/spec/support/hello_world_3.0.19/app/views/layouts/application.html.erb +0 -14
  137. data/spec/support/hello_world_3.0.19/config.ru +0 -4
  138. data/spec/support/hello_world_3.0.19/config/application.rb +0 -42
  139. data/spec/support/hello_world_3.0.19/config/boot.rb +0 -6
  140. data/spec/support/hello_world_3.0.19/config/database.yml +0 -22
  141. data/spec/support/hello_world_3.0.19/config/environment.rb +0 -5
  142. data/spec/support/hello_world_3.0.19/config/environments/development.rb +0 -26
  143. data/spec/support/hello_world_3.0.19/config/environments/production.rb +0 -49
  144. data/spec/support/hello_world_3.0.19/config/environments/test.rb +0 -35
  145. data/spec/support/hello_world_3.0.19/config/initializers/backtrace_silencers.rb +0 -7
  146. data/spec/support/hello_world_3.0.19/config/initializers/inflections.rb +0 -10
  147. data/spec/support/hello_world_3.0.19/config/initializers/mime_types.rb +0 -5
  148. data/spec/support/hello_world_3.0.19/config/initializers/secret_token.rb +0 -7
  149. data/spec/support/hello_world_3.0.19/config/initializers/session_store.rb +0 -8
  150. data/spec/support/hello_world_3.0.19/config/locales/en.yml +0 -5
  151. data/spec/support/hello_world_3.0.19/config/routes.rb +0 -58
  152. data/spec/support/hello_world_3.0.19/db/seeds.rb +0 -7
  153. data/spec/support/hello_world_3.0.19/lib/tasks/.gitkeep +0 -0
  154. data/spec/support/hello_world_3.0.19/public/404.html +0 -26
  155. data/spec/support/hello_world_3.0.19/public/422.html +0 -26
  156. data/spec/support/hello_world_3.0.19/public/500.html +0 -26
  157. data/spec/support/hello_world_3.0.19/public/favicon.ico +0 -0
  158. data/spec/support/hello_world_3.0.19/public/images/rails.png +0 -0
  159. data/spec/support/hello_world_3.0.19/public/index.html +0 -239
  160. data/spec/support/hello_world_3.0.19/public/javascripts/application.js +0 -2
  161. data/spec/support/hello_world_3.0.19/public/javascripts/controls.js +0 -965
  162. data/spec/support/hello_world_3.0.19/public/javascripts/dragdrop.js +0 -974
  163. data/spec/support/hello_world_3.0.19/public/javascripts/effects.js +0 -1123
  164. data/spec/support/hello_world_3.0.19/public/javascripts/prototype.js +0 -6001
  165. data/spec/support/hello_world_3.0.19/public/javascripts/rails.js +0 -202
  166. data/spec/support/hello_world_3.0.19/public/robots.txt +0 -5
  167. data/spec/support/hello_world_3.0.19/public/stylesheets/.gitkeep +0 -0
  168. data/spec/support/hello_world_3.0.19/script/rails +0 -6
  169. data/spec/support/hello_world_3.0.19/test/performance/browsing_test.rb +0 -9
  170. data/spec/support/hello_world_3.0.19/test/test_helper.rb +0 -13
  171. data/spec/support/hello_world_3.0.19/vendor/plugins/.gitkeep +0 -0
  172. data/spec/support/hello_world_3.1.0/Gemfile +0 -33
  173. data/spec/support/hello_world_3.1.0/README +0 -261
  174. data/spec/support/hello_world_3.1.0/Rakefile +0 -7
  175. data/spec/support/hello_world_3.1.0/app/assets/images/rails.png +0 -0
  176. data/spec/support/hello_world_3.1.0/app/assets/javascripts/application.js +0 -9
  177. data/spec/support/hello_world_3.1.0/app/assets/stylesheets/application.css +0 -7
  178. data/spec/support/hello_world_3.1.0/app/controllers/application_controller.rb +0 -3
  179. data/spec/support/hello_world_3.1.0/app/helpers/application_helper.rb +0 -2
  180. data/spec/support/hello_world_3.1.0/app/mailers/.gitkeep +0 -0
  181. data/spec/support/hello_world_3.1.0/app/models/.gitkeep +0 -0
  182. data/spec/support/hello_world_3.1.0/app/views/layouts/application.html.erb +0 -14
  183. data/spec/support/hello_world_3.1.0/config.ru +0 -4
  184. data/spec/support/hello_world_3.1.0/config/application.rb +0 -48
  185. data/spec/support/hello_world_3.1.0/config/boot.rb +0 -6
  186. data/spec/support/hello_world_3.1.0/config/database.yml +0 -25
  187. data/spec/support/hello_world_3.1.0/config/environment.rb +0 -5
  188. data/spec/support/hello_world_3.1.0/config/environments/development.rb +0 -30
  189. data/spec/support/hello_world_3.1.0/config/environments/production.rb +0 -60
  190. data/spec/support/hello_world_3.1.0/config/environments/test.rb +0 -42
  191. data/spec/support/hello_world_3.1.0/config/initializers/backtrace_silencers.rb +0 -7
  192. data/spec/support/hello_world_3.1.0/config/initializers/inflections.rb +0 -10
  193. data/spec/support/hello_world_3.1.0/config/initializers/mime_types.rb +0 -5
  194. data/spec/support/hello_world_3.1.0/config/initializers/secret_token.rb +0 -7
  195. data/spec/support/hello_world_3.1.0/config/initializers/session_store.rb +0 -8
  196. data/spec/support/hello_world_3.1.0/config/initializers/wrap_parameters.rb +0 -14
  197. data/spec/support/hello_world_3.1.0/config/locales/en.yml +0 -5
  198. data/spec/support/hello_world_3.1.0/config/routes.rb +0 -58
  199. data/spec/support/hello_world_3.1.0/db/seeds.rb +0 -7
  200. data/spec/support/hello_world_3.1.0/lib/assets/.gitkeep +0 -0
  201. data/spec/support/hello_world_3.1.0/lib/tasks/.gitkeep +0 -0
  202. data/spec/support/hello_world_3.1.0/log/.gitkeep +0 -0
  203. data/spec/support/hello_world_3.1.0/public/404.html +0 -26
  204. data/spec/support/hello_world_3.1.0/public/422.html +0 -26
  205. data/spec/support/hello_world_3.1.0/public/500.html +0 -26
  206. data/spec/support/hello_world_3.1.0/public/favicon.ico +0 -0
  207. data/spec/support/hello_world_3.1.0/public/index.html +0 -241
  208. data/spec/support/hello_world_3.1.0/public/robots.txt +0 -5
  209. data/spec/support/hello_world_3.1.0/script/rails +0 -6
  210. data/spec/support/hello_world_3.1.0/test/fixtures/.gitkeep +0 -0
  211. data/spec/support/hello_world_3.1.0/test/functional/.gitkeep +0 -0
  212. data/spec/support/hello_world_3.1.0/test/integration/.gitkeep +0 -0
  213. data/spec/support/hello_world_3.1.0/test/performance/browsing_test.rb +0 -12
  214. data/spec/support/hello_world_3.1.0/test/test_helper.rb +0 -13
  215. data/spec/support/hello_world_3.1.0/test/unit/.gitkeep +0 -0
  216. data/spec/support/hello_world_3.1.0/vendor/assets/stylesheets/.gitkeep +0 -0
  217. data/spec/support/hello_world_3.1.0/vendor/plugins/.gitkeep +0 -0
  218. data/spec/support/hello_world_3.2.13/Gemfile +0 -38
  219. data/spec/support/hello_world_3.2.13/README.rdoc +0 -261
  220. data/spec/support/hello_world_3.2.13/Rakefile +0 -7
  221. data/spec/support/hello_world_3.2.13/app/assets/images/rails.png +0 -0
  222. data/spec/support/hello_world_3.2.13/app/assets/javascripts/application.js +0 -15
  223. data/spec/support/hello_world_3.2.13/app/assets/stylesheets/application.css +0 -13
  224. data/spec/support/hello_world_3.2.13/app/controllers/application_controller.rb +0 -3
  225. data/spec/support/hello_world_3.2.13/app/helpers/application_helper.rb +0 -10
  226. data/spec/support/hello_world_3.2.13/app/mailers/.gitkeep +0 -0
  227. data/spec/support/hello_world_3.2.13/app/models/.gitkeep +0 -0
  228. data/spec/support/hello_world_3.2.13/app/models/test.rb +0 -3
  229. data/spec/support/hello_world_3.2.13/app/views/layouts/application.html.erb +0 -14
  230. data/spec/support/hello_world_3.2.13/config.ru +0 -4
  231. data/spec/support/hello_world_3.2.13/config/application.rb +0 -62
  232. data/spec/support/hello_world_3.2.13/config/boot.rb +0 -6
  233. data/spec/support/hello_world_3.2.13/config/database.yml +0 -25
  234. data/spec/support/hello_world_3.2.13/config/environment.rb +0 -5
  235. data/spec/support/hello_world_3.2.13/config/environments/development.rb +0 -37
  236. data/spec/support/hello_world_3.2.13/config/environments/production.rb +0 -67
  237. data/spec/support/hello_world_3.2.13/config/environments/test.rb +0 -37
  238. data/spec/support/hello_world_3.2.13/config/initializers/backtrace_silencers.rb +0 -7
  239. data/spec/support/hello_world_3.2.13/config/initializers/inflections.rb +0 -15
  240. data/spec/support/hello_world_3.2.13/config/initializers/mime_types.rb +0 -5
  241. data/spec/support/hello_world_3.2.13/config/initializers/secret_token.rb +0 -7
  242. data/spec/support/hello_world_3.2.13/config/initializers/session_store.rb +0 -8
  243. data/spec/support/hello_world_3.2.13/config/initializers/wrap_parameters.rb +0 -14
  244. data/spec/support/hello_world_3.2.13/config/locales/en.yml +0 -5
  245. data/spec/support/hello_world_3.2.13/config/routes.rb +0 -58
  246. data/spec/support/hello_world_3.2.13/db/seeds.rb +0 -7
  247. data/spec/support/hello_world_3.2.13/lib/assets/.gitkeep +0 -0
  248. data/spec/support/hello_world_3.2.13/lib/tasks/.gitkeep +0 -0
  249. data/spec/support/hello_world_3.2.13/log/.gitkeep +0 -0
  250. data/spec/support/hello_world_3.2.13/public/404.html +0 -26
  251. data/spec/support/hello_world_3.2.13/public/422.html +0 -26
  252. data/spec/support/hello_world_3.2.13/public/500.html +0 -25
  253. data/spec/support/hello_world_3.2.13/public/favicon.ico +0 -0
  254. data/spec/support/hello_world_3.2.13/public/index.html +0 -241
  255. data/spec/support/hello_world_3.2.13/public/robots.txt +0 -5
  256. data/spec/support/hello_world_3.2.13/script/rails +0 -6
  257. data/spec/support/hello_world_3.2.13/test/fixtures/.gitkeep +0 -0
  258. data/spec/support/hello_world_3.2.13/test/functional/.gitkeep +0 -0
  259. data/spec/support/hello_world_3.2.13/test/integration/.gitkeep +0 -0
  260. data/spec/support/hello_world_3.2.13/test/performance/browsing_test.rb +0 -12
  261. data/spec/support/hello_world_3.2.13/test/test_helper.rb +0 -13
  262. data/spec/support/hello_world_3.2.13/test/unit/.gitkeep +0 -0
  263. data/spec/support/hello_world_3.2.13/vendor/assets/javascripts/.gitkeep +0 -0
  264. data/spec/support/hello_world_3.2.13/vendor/assets/stylesheets/.gitkeep +0 -0
  265. data/spec/support/hello_world_3.2.13/vendor/plugins/.gitkeep +0 -0
  266. data/spec/support/hello_world_padrino/.components +0 -9
  267. data/spec/support/hello_world_padrino/.gitignore +0 -8
  268. data/spec/support/hello_world_padrino/Gemfile +0 -42
  269. data/spec/support/hello_world_padrino/Rakefile +0 -6
  270. data/spec/support/hello_world_padrino/app/app.rb +0 -61
  271. data/spec/support/hello_world_padrino/config.ru +0 -9
  272. data/spec/support/hello_world_padrino/config/apps.rb +0 -39
  273. data/spec/support/hello_world_padrino/config/boot.rb +0 -46
  274. data/spec/support/hello_world_padrino/config/database.rb +0 -19
  275. data/spec/support/hello_world_padrino/cucumber.yml +0 -2
  276. data/spec/support/hello_world_padrino/db/migrate/001_create_users.rb +0 -16
  277. data/spec/support/hello_world_padrino/dispatcher/app.rb +0 -61
  278. data/spec/support/hello_world_padrino/features/add.feature +0 -11
  279. data/spec/support/hello_world_padrino/features/step_definitions/add_steps.rb +0 -15
  280. data/spec/support/hello_world_padrino/features/support/env.rb +0 -10
  281. data/spec/support/hello_world_padrino/features/support/url.rb +0 -17
  282. data/spec/support/hello_world_padrino/models/user.rb +0 -11
  283. data/spec/support/hello_world_padrino/public/favicon.ico +0 -0
  284. data/spec/support/hello_world_padrino/public/javascripts/application.js +0 -1
  285. data/spec/support/hello_world_padrino/public/javascripts/jquery-ujs.js +0 -95
  286. data/spec/support/hello_world_padrino/public/javascripts/jquery.js +0 -4
  287. data/spec/support/lorem.txt +0 -23
  288. data/spec/support/sinatra-safe/.gems +0 -4
  289. data/spec/support/sinatra-safe/Gemfile +0 -18
  290. data/spec/support/sinatra-safe/MIT-LICENSE +0 -20
  291. data/spec/support/sinatra-safe/README.rdoc +0 -35
  292. data/spec/support/sinatra-safe/Rakefile +0 -32
  293. data/spec/support/sinatra-safe/application.rb +0 -23
  294. data/spec/support/sinatra-safe/config.ru +0 -11
  295. data/spec/support/sinatra-safe/environment.rb +0 -25
  296. data/spec/support/sinatra-safe/lib/profile.rb +0 -11
  297. data/spec/support/sinatra-safe/public/main.css +0 -52
  298. data/spec/support/sinatra-safe/script/console +0 -16
  299. data/spec/support/sinatra-safe/views/layout.haml +0 -14
  300. data/spec/support/sinatra-safe/views/root.haml +0 -4
  301. data/spec/support/sinatra-vulnerable/.gems +0 -4
  302. data/spec/support/sinatra-vulnerable/Gemfile +0 -17
  303. data/spec/support/sinatra-vulnerable/MIT-LICENSE +0 -20
  304. data/spec/support/sinatra-vulnerable/README.rdoc +0 -35
  305. data/spec/support/sinatra-vulnerable/Rakefile +0 -32
  306. data/spec/support/sinatra-vulnerable/application.rb +0 -34
  307. data/spec/support/sinatra-vulnerable/config.ru +0 -11
  308. data/spec/support/sinatra-vulnerable/disabled.png +0 -0
  309. data/spec/support/sinatra-vulnerable/environment.rb +0 -25
  310. data/spec/support/sinatra-vulnerable/lib/profile.rb +0 -11
  311. data/spec/support/sinatra-vulnerable/public/main.css +0 -52
  312. data/spec/support/sinatra-vulnerable/script/console +0 -16
  313. data/spec/support/sinatra-vulnerable/views/layout.haml +0 -14
  314. data/spec/support/sinatra-vulnerable/views/root.haml +0 -4
  315. data/spec/support/sinatra-vulnerable/views/xss.haml +0 -3
@@ -1,177 +0,0 @@
1
- # Competitive matrix between dawn and other security static code scanners
2
-
3
- This is the point where I try to answer the very good question: _dawn? it is a
4
- great tool but which are the differences between it and ( put your favorite
5
- tool here )?_
6
-
7
- Of course, as you may wonder, I'm the dawn author so I can be less impartial
8
- than a third party review that it is strongly encouraged and that it will put
9
- linked to this page (even in case you will make criticisms to my tool)
10
-
11
- ## The competitors
12
-
13
- As [@presidentbeef](https://twitter.com/presidentbeef) pointed me out, there
14
- are a couple of security source code static analyzers (lets'call them SAST from
15
- this point) supporting ruby.
16
-
17
- * [brakeman scanner](http://brakemanscanner.org/)
18
- * [Excellent](https://github.com/simplabs/excellent)
19
- * [ror-sec-scanner](http://gitorious.org/code-scanner/ror-sec-scanner/)
20
- * [Scanny](https://github.com/openSUSE/scanny)
21
- * [dawn](https://github.com/codesake/codesake\_dawn)
22
-
23
- ### Brakeman
24
-
25
- [Brakeman](http://brakemanscanner.org) is a good tool, it is mature and it is
26
- widespread among the community. It's approaching the second major release of
27
- its history.
28
-
29
- It is born to support [Ruby on Rails](http://rubyonrails.org) written web
30
- applications.
31
-
32
- ### Dawn
33
-
34
- Dawn is born to support the application security startup I'm building,
35
- [codesake.com](http://codesake.com). Since community gives me a lot in all
36
- these years, the statica analyzer will be opensource and **I won't change this
37
- decision, ever**.
38
-
39
- Dawn supports web applications written using
40
- [Ruby on Rails](http://rubyonrails.org), [Sinatra](http://sinatrarb.com) and
41
- [Padrino](http://padrinorb.com)
42
-
43
- Since a lot of javascript code is used in the web applications nowadays, I'll
44
- introduce a preliminary support for javascript before launching version 1.0.
45
- Javascript support it will be focused on checking for reflected and DOM based
46
- Cross site scripting attacks.
47
-
48
- In a future (on version 1.5 accordingly to the Roadmap), node.js written web
49
- applications will be supported as well.
50
-
51
- ## The comparison
52
-
53
- ### Basic features
54
-
55
- |Feature | Dawn | Brakeman | Excellent | ror-sec-scanner | Scanny |
56
- |-----------------------|---------------|-------------------|-------------|-------------------|-------------|
57
- | Version | 0.70 | 1.9.5 | | | |
58
- | Production ready? | NO | YES | | | |
59
- | Sinatra support | YES | NO | | | |
60
- | Padrino support | NO *planned* | NO | | | |
61
- | Rails support | YES | YES | | | |
62
- | Node.js support | NO *planned* | NO | | | |
63
- | Plain text output | YES | YES | | | |
64
- | Json output | YES | YES | | | |
65
- | HTML output | NO | YES | | | |
66
-
67
- ### CVE security checks
68
-
69
- | CVE Check | Dawn | Brakeman | Excellent | ror-sec-scanner | Scanny |
70
- |-----------------------|---------------|-------------------|-------------|-------------------|-------------|
71
- | CVE-2010-1330 | YES | NO | | | |
72
- | CVE-2011-0446 | YES | NO | | | |
73
- | CVE-2011-0447 | YES | NO | | | |
74
- | CVE-2011-0995 | YES | NO | | | |
75
- | CVE-2011-2197 | YES | NO | | | |
76
- | CVE-2011-2929 | YES | YES | | | |
77
- | CVE-2011-2931 | YES | YES | | | |
78
- | CVE-2011-2932 | YES | NO | | | |
79
- | CVE-2011-3186 | YES | NO | | | |
80
- | CVE-2011-4815 | YES | NO | | | |
81
- | CVE-2012-1099 | YES | NO | | | |
82
- | CVE-2012-1241 | YES | NO | | | |
83
- | CVE-2012-2140 | YES | NO | | | |
84
- | CVE-2012-2660 | YES | YES | | | |
85
- | CVE-2012-2661 | YES | YES | | | |
86
- | CVE-2012-2694 | YES | YES | | | |
87
- | CVE-2012-2695 | YES | YES | | | |
88
- | CVE-2012-3424 | YES | YES | | | |
89
- | CVE-2012-3463 | YES | YES | | | |
90
- | CVE-2012-3464 | YES | YES | | | |
91
- | CVE-2012-3465 | YES | YES | | | |
92
- | CVE-2012-4464 | YES | NO | | | |
93
- | CVE-2012-4466 | YES | NO | | | |
94
- | CVE-2012-4481 | YES | NO | | | |
95
- | CVE-2012-4522 | YES | NO | | | |
96
- | CVE-2012-5370 | YES | NO | | | |
97
- | CVE-2012-5371 | YES | NO | | | |
98
- | CVE-2012-5380 | YES | NO | | | |
99
- | CVE-2012-6134 | YES | NO | | | |
100
- | CVE-2012-6496 | YES | NO | | | |
101
- | CVE-2012-5664 | NO | YES | | | |
102
- | CVE-2012-6497 | YES | NO | | | |
103
- | CVE-2013-1855 | YES | YES | | | |
104
- | CVE-2013-1800 | YES | NO | | | |
105
- | CVE-2013-0333 | YES | YES | | | |
106
- | CVE-2013-0269 | YES | YES | | | |
107
- | CVE-2013-1857 | YES | YES | | | |
108
- | CVE-2013-0155 | YES | YES | | | |
109
- | CVE-2013-0333 | YES | YES | | | |
110
- | CVE-2013-1854 | YES | YES | | | |
111
- | CVE-2013-1856 | YES | YES | | | |
112
- | CVE-2013-0276 | YES | YES | | | |
113
- | CVE-2013-0277 | YES | YES | | | |
114
- | CVE-2013-0156 | YES | YES | | | |
115
- | CVE-2013-2065 [0] | NO | NO | | | |
116
- | CVE-2013-2090 [0] | NO | NO | | | |
117
- | CVE-2013-2615 | YES | NO | | | |
118
- | CVE-2013-1875 | YES | NO | | | |
119
- | CVE-2013-1655 | YES | NO | | | |
120
- | CVE-2013-1656 | YES | NO | | | |
121
- | CVE-2013-0175 | YES | NO | | | |
122
- | CVE-2013-0233 | YES | NO | | | |
123
- | CVE-2013-0284 | YES | NO | | | |
124
- | CVE-2013-0285 | YES | NO | | | |
125
- | CVE-2013-1801 | YES | NO | | | |
126
- | CVE-2013-1802 | YES | NO | | | |
127
- | CVE-2013-1821 | YES | NO | | | |
128
- | CVE-2013-1898 | YES | NO | | | |
129
- | CVE-2013-1911 | YES | NO | | | |
130
- | CVE-2013-1933 | YES | NO | | | |
131
- | CVE-2013-1947 | YES | NO | | | |
132
- | CVE-2013-1948 | YES | NO | | | |
133
- | CVE-2013-2065 | YES | NO | | | |
134
- | CVE-2013-2616 | YES | NO | | | |
135
- | CVE-2013-2617 | YES | NO | | | |
136
- | CVE-2013-3221 | YES | NO | | | |
137
- | CVE-2013-4389 | YES | NO | | | |
138
- | CVE-2013-4491 | YES | NO | | | |
139
- | CVE-2013-4492 | YES | NO | | | |
140
- | CVE-2013-4562 | YES | NO | | | |
141
- | CVE-2013-6414 | YES | NO | | | |
142
- | CVE-2013-6415 | YES | NO | | | |
143
- | CVE-2013-6416 | YES | NO | | | |
144
- | CVE-2013-6417 | YES | NO | | | |
145
-
146
- [0] This CVE must be confirmed
147
-
148
- ### Quality checks
149
-
150
- | Quality check | Dawn | Brakeman | Excellent | ror-sec-scanner | Scanny |
151
- |-----------------------|---------------|-------------------|-------------|-------------------|-------------|
152
- | Not revised code | YES | NO | | | |
153
-
154
-
155
- ### Application specific security checks
156
-
157
- | Security check | Dawn | Brakeman | Excellent | ror-sec-scanner | Scanny |
158
- |-----------------------------|---------------|------------|-------------|-------------------|-------------|
159
- | Reflected XSS | YES (sinatra) | YES | | | |
160
- | Stored XSS | NO | YES | | | |
161
- | DOM Based XSS | NO | NO | | | |
162
- | SQL injection | NO | YES | | | |
163
- | Broken authentication | NO | NO | | | |
164
- | Insecure object reference | NO | NO | | | |
165
- | CSRF | NO | YES [1] | | | |
166
-
167
- [1] Brakeman warns if an application does not use protect_from_forgery, but it
168
- doesn't warn about vulnerable forms (e.g. those not using view helpers) -
169
- [@presidentbeef](https://github.com/codesake/codesake_dawn/issues/2)
170
-
171
- ## Third party reviews
172
-
173
- If you blogged, twitted or in any case if you compare dawn with other SAST
174
- available out there supporting ruby, please tell me and I'll add your review
175
- here.
176
-
177
-
data/TODO.md DELETED
@@ -1,64 +0,0 @@
1
- # Codesake Dawn Todo
2
-
3
- ## #2 cloning target
4
- ### Status: Open
5
- Add a --github option to dawn to clone a remote repository, perform a bundle
6
- install and do a code review.
7
-
8
- ## #1 Introduce check dependency
9
- ### Status: Closed
10
- CVE-2013-1655 introduces a security issue that depends on a particular gem only
11
- when running a particular Ruby interpreter version. For such a reason in
12
- BasicCheck class I introduced a ruby\_version attribute as a String and a
13
- is\_vulnerable\_ruby\_version? method to match this thing.
14
-
15
- CVE-2013-1821 introduces a security issue about the specific Ruby interpreter
16
- version, therefore I introduced a new kind of security check, the
17
- RubyVersionCheck. Since RubyVersionCheck includes also BasicCheck, it has 2
18
- attributes (filled in engine.rb apply and apply\_all methods that are almost
19
- the same. The ruby\_version and the detected\_ruby that it is an hash.
20
-
21
- This situation introduces a logical mess and the chances of having bugs in the
22
- future are very high. So it must be possible to declare a complex security
23
- check as a mixin of basic security checks, this way:
24
-
25
-
26
- ``` ruby
27
- module Codesake
28
- module Dawn
29
- module Kb
30
- class MyVeryComplexSecurityCheck
31
- include ConditionalSecurityCheck # TODO: name check
32
-
33
- def initialize
34
- # since DependencyCheck and friends are module, I need to introduce
35
- # also a scaffolding class including that module so I can create an instance of
36
- # that.
37
- a_dependency_check = Codesake::Dawn::Kb::BasicDependencyCheck.new
38
- a_dependency_check.safe_dependencies = [{:name=>"puppet", :version=>['2.7.21', '3.1.1']}]
39
-
40
- a_ruby_version_check = Codesake::Dawn::Kb::BasicRubyVersionCheck.new
41
- a_ruby_version_check.safe_rubies = [{:version=>"1.9.3", :patchlevel=>"p392"}, {:version=>"2.0.0", :patchlevel=>"p195"}]
42
-
43
- super({
44
- :name=>"My very complex security check",
45
- :cvss=>"AV:N/AC:L/Au:N/C:P/I:P/A:P",
46
- :release_date => Date.new(2013, 5, 23),
47
- :cwe=>"20",
48
- :owasp=>"A9",
49
- :applies=>["rails", "sinatra", "padrino"],
50
- :kind=>Codesake::Dawn::KnowledgeBase::CONDITIONAL_CHECK,
51
- # => there is no reason not to support multiple boolean operators
52
- # when checking security checks in the chain for their vuln? return value
53
- :condition=>:or,
54
- :message=>message,
55
- :mitigation=>"Please upgrade puppet gem to a newer version",
56
- :aux_links=>["https://puppetlabs.com/security/cve/cve-2013-1655/"],
57
- :security_checks = [a_dependency_check, a_ruby_version_check]
58
- })
59
- end
60
- end
61
- end
62
- end
63
- end
64
- ```
@@ -1,31 +0,0 @@
1
- source 'http://rubygems.org'
2
-
3
- gem 'rails', '3.0.19'
4
-
5
- # Bundle edge Rails instead:
6
- # gem 'rails', :git => 'git://github.com/rails/rails.git'
7
-
8
- gem 'sqlite3'
9
-
10
- # Use unicorn as the web server
11
- # gem 'unicorn'
12
-
13
- # Deploy with Capistrano
14
- # gem 'capistrano'
15
-
16
- # To use debugger (ruby-debug for Ruby 1.8.7+, ruby-debug19 for Ruby 1.9.2+)
17
- # gem 'ruby-debug'
18
- # gem 'ruby-debug19', :require => 'ruby-debug'
19
-
20
- # Bundle the extra gems:
21
- # gem 'bj'
22
- # gem 'nokogiri'
23
- # gem 'sqlite3-ruby', :require => 'sqlite3'
24
- # gem 'aws-s3', :require => 'aws/s3'
25
-
26
- # Bundle gems for the local environment. Make sure to
27
- # put test-only gems in this group so their generators
28
- # and rake tasks are available in development mode:
29
- # group :development, :test do
30
- # gem 'webrat'
31
- # end
@@ -1,256 +0,0 @@
1
- == Welcome to Rails
2
-
3
- Rails is a web-application framework that includes everything needed to create
4
- database-backed web applications according to the Model-View-Control pattern.
5
-
6
- This pattern splits the view (also called the presentation) into "dumb"
7
- templates that are primarily responsible for inserting pre-built data in between
8
- HTML tags. The model contains the "smart" domain objects (such as Account,
9
- Product, Person, Post) that holds all the business logic and knows how to
10
- persist themselves to a database. The controller handles the incoming requests
11
- (such as Save New Account, Update Product, Show Post) by manipulating the model
12
- and directing data to the view.
13
-
14
- In Rails, the model is handled by what's called an object-relational mapping
15
- layer entitled Active Record. This layer allows you to present the data from
16
- database rows as objects and embellish these data objects with business logic
17
- methods. You can read more about Active Record in
18
- link:files/vendor/rails/activerecord/README.html.
19
-
20
- The controller and view are handled by the Action Pack, which handles both
21
- layers by its two parts: Action View and Action Controller. These two layers
22
- are bundled in a single package due to their heavy interdependence. This is
23
- unlike the relationship between the Active Record and Action Pack that is much
24
- more separate. Each of these packages can be used independently outside of
25
- Rails. You can read more about Action Pack in
26
- link:files/vendor/rails/actionpack/README.html.
27
-
28
-
29
- == Getting Started
30
-
31
- 1. At the command prompt, create a new Rails application:
32
- <tt>rails new myapp</tt> (where <tt>myapp</tt> is the application name)
33
-
34
- 2. Change directory to <tt>myapp</tt> and start the web server:
35
- <tt>cd myapp; rails server</tt> (run with --help for options)
36
-
37
- 3. Go to http://localhost:3000/ and you'll see:
38
- "Welcome aboard: You're riding Ruby on Rails!"
39
-
40
- 4. Follow the guidelines to start developing your application. You can find
41
- the following resources handy:
42
-
43
- * The Getting Started Guide: http://guides.rubyonrails.org/getting_started.html
44
- * Ruby on Rails Tutorial Book: http://www.railstutorial.org/
45
-
46
-
47
- == Debugging Rails
48
-
49
- Sometimes your application goes wrong. Fortunately there are a lot of tools that
50
- will help you debug it and get it back on the rails.
51
-
52
- First area to check is the application log files. Have "tail -f" commands
53
- running on the server.log and development.log. Rails will automatically display
54
- debugging and runtime information to these files. Debugging info will also be
55
- shown in the browser on requests from 127.0.0.1.
56
-
57
- You can also log your own messages directly into the log file from your code
58
- using the Ruby logger class from inside your controllers. Example:
59
-
60
- class WeblogController < ActionController::Base
61
- def destroy
62
- @weblog = Weblog.find(params[:id])
63
- @weblog.destroy
64
- logger.info("#{Time.now} Destroyed Weblog ID ##{@weblog.id}!")
65
- end
66
- end
67
-
68
- The result will be a message in your log file along the lines of:
69
-
70
- Mon Oct 08 14:22:29 +1000 2007 Destroyed Weblog ID #1!
71
-
72
- More information on how to use the logger is at http://www.ruby-doc.org/core/
73
-
74
- Also, Ruby documentation can be found at http://www.ruby-lang.org/. There are
75
- several books available online as well:
76
-
77
- * Programming Ruby: http://www.ruby-doc.org/docs/ProgrammingRuby/ (Pickaxe)
78
- * Learn to Program: http://pine.fm/LearnToProgram/ (a beginners guide)
79
-
80
- These two books will bring you up to speed on the Ruby language and also on
81
- programming in general.
82
-
83
-
84
- == Debugger
85
-
86
- Debugger support is available through the debugger command when you start your
87
- Mongrel or WEBrick server with --debugger. This means that you can break out of
88
- execution at any point in the code, investigate and change the model, and then,
89
- resume execution! You need to install ruby-debug to run the server in debugging
90
- mode. With gems, use <tt>sudo gem install ruby-debug</tt>. Example:
91
-
92
- class WeblogController < ActionController::Base
93
- def index
94
- @posts = Post.find(:all)
95
- debugger
96
- end
97
- end
98
-
99
- So the controller will accept the action, run the first line, then present you
100
- with a IRB prompt in the server window. Here you can do things like:
101
-
102
- >> @posts.inspect
103
- => "[#<Post:0x14a6be8
104
- @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>,
105
- #<Post:0x14a6620
106
- @attributes={"title"=>"Rails", "body"=>"Only ten..", "id"=>"2"}>]"
107
- >> @posts.first.title = "hello from a debugger"
108
- => "hello from a debugger"
109
-
110
- ...and even better, you can examine how your runtime objects actually work:
111
-
112
- >> f = @posts.first
113
- => #<Post:0x13630c4 @attributes={"title"=>nil, "body"=>nil, "id"=>"1"}>
114
- >> f.
115
- Display all 152 possibilities? (y or n)
116
-
117
- Finally, when you're ready to resume execution, you can enter "cont".
118
-
119
-
120
- == Console
121
-
122
- The console is a Ruby shell, which allows you to interact with your
123
- application's domain model. Here you'll have all parts of the application
124
- configured, just like it is when the application is running. You can inspect
125
- domain models, change values, and save to the database. Starting the script
126
- without arguments will launch it in the development environment.
127
-
128
- To start the console, run <tt>rails console</tt> from the application
129
- directory.
130
-
131
- Options:
132
-
133
- * Passing the <tt>-s, --sandbox</tt> argument will rollback any modifications
134
- made to the database.
135
- * Passing an environment name as an argument will load the corresponding
136
- environment. Example: <tt>rails console production</tt>.
137
-
138
- To reload your controllers and models after launching the console run
139
- <tt>reload!</tt>
140
-
141
- More information about irb can be found at:
142
- link:http://www.rubycentral.com/pickaxe/irb.html
143
-
144
-
145
- == dbconsole
146
-
147
- You can go to the command line of your database directly through <tt>rails
148
- dbconsole</tt>. You would be connected to the database with the credentials
149
- defined in database.yml. Starting the script without arguments will connect you
150
- to the development database. Passing an argument will connect you to a different
151
- database, like <tt>rails dbconsole production</tt>. Currently works for MySQL,
152
- PostgreSQL and SQLite 3.
153
-
154
- == Description of Contents
155
-
156
- The default directory structure of a generated Ruby on Rails application:
157
-
158
- |-- app
159
- | |-- controllers
160
- | |-- helpers
161
- | |-- mailers
162
- | |-- models
163
- | `-- views
164
- | `-- layouts
165
- |-- config
166
- | |-- environments
167
- | |-- initializers
168
- | `-- locales
169
- |-- db
170
- |-- doc
171
- |-- lib
172
- | `-- tasks
173
- |-- log
174
- |-- public
175
- | |-- images
176
- | |-- javascripts
177
- | `-- stylesheets
178
- |-- script
179
- |-- test
180
- | |-- fixtures
181
- | |-- functional
182
- | |-- integration
183
- | |-- performance
184
- | `-- unit
185
- |-- tmp
186
- | |-- cache
187
- | |-- pids
188
- | |-- sessions
189
- | `-- sockets
190
- `-- vendor
191
- `-- plugins
192
-
193
- app
194
- Holds all the code that's specific to this particular application.
195
-
196
- app/controllers
197
- Holds controllers that should be named like weblogs_controller.rb for
198
- automated URL mapping. All controllers should descend from
199
- ApplicationController which itself descends from ActionController::Base.
200
-
201
- app/models
202
- Holds models that should be named like post.rb. Models descend from
203
- ActiveRecord::Base by default.
204
-
205
- app/views
206
- Holds the template files for the view that should be named like
207
- weblogs/index.html.erb for the WeblogsController#index action. All views use
208
- eRuby syntax by default.
209
-
210
- app/views/layouts
211
- Holds the template files for layouts to be used with views. This models the
212
- common header/footer method of wrapping views. In your views, define a layout
213
- using the <tt>layout :default</tt> and create a file named default.html.erb.
214
- Inside default.html.erb, call <% yield %> to render the view using this
215
- layout.
216
-
217
- app/helpers
218
- Holds view helpers that should be named like weblogs_helper.rb. These are
219
- generated for you automatically when using generators for controllers.
220
- Helpers can be used to wrap functionality for your views into methods.
221
-
222
- config
223
- Configuration files for the Rails environment, the routing map, the database,
224
- and other dependencies.
225
-
226
- db
227
- Contains the database schema in schema.rb. db/migrate contains all the
228
- sequence of Migrations for your schema.
229
-
230
- doc
231
- This directory is where your application documentation will be stored when
232
- generated using <tt>rake doc:app</tt>
233
-
234
- lib
235
- Application specific libraries. Basically, any kind of custom code that
236
- doesn't belong under controllers, models, or helpers. This directory is in
237
- the load path.
238
-
239
- public
240
- The directory available for the web server. Contains subdirectories for
241
- images, stylesheets, and javascripts. Also contains the dispatchers and the
242
- default HTML files. This should be set as the DOCUMENT_ROOT of your web
243
- server.
244
-
245
- script
246
- Helper scripts for automation and generation.
247
-
248
- test
249
- Unit and functional tests along with fixtures. When using the rails generate
250
- command, template test files will be generated for you and placed in this
251
- directory.
252
-
253
- vendor
254
- External libraries that the application depends on. Also includes the plugins
255
- subdirectory. If the app has frozen rails, those gems also go here, under
256
- vendor/rails/. This directory is in the load path.