arachni 1.5.1 → 1.6.1.1

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 (648) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +56 -0
  3. data/Gemfile +2 -4
  4. data/LICENSE.md +1 -1
  5. data/README.md +116 -110
  6. data/Rakefile +1 -1
  7. data/arachni.gemspec +26 -26
  8. data/bin/arachni +1 -1
  9. data/bin/arachni_console +1 -1
  10. data/bin/arachni_multi +1 -1
  11. data/bin/arachni_reporter +1 -1
  12. data/bin/arachni_reproduce +1 -1
  13. data/bin/arachni_rest_server +1 -1
  14. data/bin/arachni_restore +1 -1
  15. data/bin/arachni_rpc +1 -1
  16. data/bin/arachni_rpcd +1 -1
  17. data/bin/arachni_rpcd_monitor +1 -1
  18. data/bin/arachni_script +1 -1
  19. data/components/checks/active/code_injection.rb +1 -1
  20. data/components/checks/active/code_injection_php_input_wrapper.rb +1 -1
  21. data/components/checks/active/code_injection_timing.rb +1 -1
  22. data/components/checks/active/csrf.rb +7 -2
  23. data/components/checks/active/file_inclusion.rb +1 -1
  24. data/components/checks/active/ldap_injection.rb +1 -1
  25. data/components/checks/active/no_sql_injection.rb +1 -1
  26. data/components/checks/active/no_sql_injection_differential.rb +3 -3
  27. data/components/checks/active/os_cmd_injection.rb +1 -1
  28. data/components/checks/active/os_cmd_injection_timing.rb +1 -1
  29. data/components/checks/active/path_traversal.rb +1 -1
  30. data/components/checks/active/response_splitting.rb +1 -1
  31. data/components/checks/active/rfi.rb +1 -1
  32. data/components/checks/active/session_fixation.rb +1 -1
  33. data/components/checks/active/source_code_disclosure.rb +1 -1
  34. data/components/checks/active/sql_injection.rb +1 -1
  35. data/components/checks/active/sql_injection_differential.rb +3 -3
  36. data/components/checks/active/sql_injection_timing.rb +1 -1
  37. data/components/checks/active/trainer.rb +1 -1
  38. data/components/checks/active/unvalidated_redirect.rb +1 -1
  39. data/components/checks/active/unvalidated_redirect_dom.rb +1 -1
  40. data/components/checks/active/xpath_injection.rb +1 -1
  41. data/components/checks/active/xss.rb +4 -4
  42. data/components/checks/active/xss_dom.rb +1 -1
  43. data/components/checks/active/xss_dom_script_context.rb +1 -1
  44. data/components/checks/active/xss_event.rb +3 -3
  45. data/components/checks/active/xss_path.rb +1 -1
  46. data/components/checks/active/xss_script_context.rb +3 -3
  47. data/components/checks/active/xss_tag.rb +4 -3
  48. data/components/checks/active/xxe.rb +1 -1
  49. data/components/checks/passive/allowed_methods.rb +1 -1
  50. data/components/checks/passive/backdoors.rb +1 -1
  51. data/components/checks/passive/backup_directories.rb +1 -1
  52. data/components/checks/passive/backup_files.rb +2 -2
  53. data/components/checks/passive/common_admin_interfaces.rb +1 -1
  54. data/components/checks/passive/common_directories/directories.txt +1 -0
  55. data/components/checks/passive/common_directories.rb +1 -1
  56. data/components/checks/passive/common_files.rb +1 -1
  57. data/components/checks/passive/directory_listing.rb +1 -1
  58. data/components/checks/passive/grep/captcha.rb +1 -1
  59. data/components/checks/passive/grep/cookie_set_for_parent_domain.rb +1 -1
  60. data/components/checks/passive/grep/credit_card.rb +1 -1
  61. data/components/checks/passive/grep/cvs_svn_users.rb +1 -1
  62. data/components/checks/passive/grep/emails.rb +1 -1
  63. data/components/checks/passive/grep/form_upload.rb +1 -1
  64. data/components/checks/passive/grep/hsts.rb +1 -1
  65. data/components/checks/passive/grep/html_objects.rb +1 -1
  66. data/components/checks/passive/grep/http_only_cookies.rb +1 -1
  67. data/components/checks/passive/grep/insecure_cookies.rb +1 -1
  68. data/components/checks/passive/grep/insecure_cors_policy.rb +1 -1
  69. data/components/checks/passive/grep/mixed_resource.rb +1 -1
  70. data/components/checks/passive/grep/password_autocomplete.rb +1 -1
  71. data/components/checks/passive/grep/private_ip.rb +1 -1
  72. data/components/checks/passive/grep/ssn.rb +1 -1
  73. data/components/checks/passive/grep/unencrypted_password_forms.rb +1 -1
  74. data/components/checks/passive/grep/x_frame_options.rb +4 -4
  75. data/components/checks/passive/htaccess_limit.rb +1 -1
  76. data/components/checks/passive/http_put.rb +1 -1
  77. data/components/checks/passive/insecure_client_access_policy.rb +1 -1
  78. data/components/checks/passive/insecure_cross_domain_policy_access.rb +1 -1
  79. data/components/checks/passive/insecure_cross_domain_policy_headers.rb +1 -1
  80. data/components/checks/passive/interesting_responses.rb +1 -1
  81. data/components/checks/passive/localstart_asp.rb +1 -1
  82. data/components/checks/passive/origin_spoof_access_restriction_bypass.rb +1 -1
  83. data/components/checks/passive/webdav.rb +1 -1
  84. data/components/checks/passive/xst.rb +1 -1
  85. data/components/fingerprinters/frameworks/aspx_mvc.rb +1 -1
  86. data/components/fingerprinters/frameworks/cakephp.rb +1 -1
  87. data/components/fingerprinters/frameworks/cherrypy.rb +1 -1
  88. data/components/fingerprinters/frameworks/django.rb +1 -1
  89. data/components/fingerprinters/frameworks/jsf.rb +1 -1
  90. data/components/fingerprinters/frameworks/nette.rb +1 -1
  91. data/components/fingerprinters/frameworks/rack.rb +1 -1
  92. data/components/fingerprinters/frameworks/rails.rb +1 -1
  93. data/components/fingerprinters/frameworks/symfony.rb +1 -1
  94. data/components/fingerprinters/languages/asp.rb +1 -1
  95. data/components/fingerprinters/languages/aspx.rb +1 -1
  96. data/components/fingerprinters/languages/java.rb +1 -1
  97. data/components/fingerprinters/languages/php.rb +1 -1
  98. data/components/fingerprinters/languages/python.rb +1 -1
  99. data/components/fingerprinters/languages/ruby.rb +1 -1
  100. data/components/fingerprinters/os/bsd.rb +1 -1
  101. data/components/fingerprinters/os/linux.rb +1 -1
  102. data/components/fingerprinters/os/solaris.rb +1 -1
  103. data/components/fingerprinters/os/unix.rb +1 -1
  104. data/components/fingerprinters/os/windows.rb +1 -1
  105. data/components/fingerprinters/servers/apache.rb +1 -1
  106. data/components/fingerprinters/servers/gunicorn.rb +1 -1
  107. data/components/fingerprinters/servers/iis.rb +1 -1
  108. data/components/fingerprinters/servers/jetty.rb +1 -1
  109. data/components/fingerprinters/servers/nginx.rb +1 -1
  110. data/components/fingerprinters/servers/tomcat.rb +1 -1
  111. data/components/path_extractors/anchors.rb +1 -1
  112. data/components/path_extractors/areas.rb +1 -1
  113. data/components/path_extractors/comments.rb +1 -1
  114. data/components/path_extractors/data_url.rb +1 -1
  115. data/components/path_extractors/forms.rb +1 -1
  116. data/components/path_extractors/frames.rb +1 -1
  117. data/components/path_extractors/generic.rb +1 -1
  118. data/components/path_extractors/links.rb +1 -1
  119. data/components/path_extractors/meta_refresh.rb +1 -1
  120. data/components/path_extractors/scripts.rb +1 -1
  121. data/components/plugins/autologin.rb +1 -1
  122. data/components/plugins/beep_notify.rb +1 -1
  123. data/components/plugins/content_types.rb +1 -1
  124. data/components/plugins/cookie_collector.rb +1 -1
  125. data/components/plugins/debug/browser_cluster_job_monitor.rb +1 -1
  126. data/components/plugins/defaults/autothrottle.rb +1 -1
  127. data/components/plugins/defaults/healthmap.rb +2 -2
  128. data/components/plugins/defaults/meta/remedies/discovery.rb +1 -1
  129. data/components/plugins/defaults/meta/remedies/timing_attacks.rb +1 -1
  130. data/components/plugins/defaults/meta/uniformity.rb +1 -1
  131. data/components/plugins/email_notify.rb +1 -1
  132. data/components/plugins/exec.rb +3 -3
  133. data/components/plugins/form_dicattack.rb +1 -1
  134. data/components/plugins/headers_collector.rb +1 -1
  135. data/components/plugins/http_dicattack.rb +1 -1
  136. data/components/plugins/login_script.rb +1 -1
  137. data/components/plugins/metrics.rb +1 -1
  138. data/components/plugins/page_dump.rb +1 -1
  139. data/components/plugins/proxy/panel/verify_login_sequence.html.erb +1 -1
  140. data/components/plugins/proxy/template_scope.rb +1 -1
  141. data/components/plugins/proxy.rb +3 -2
  142. data/components/plugins/rate_limiter.rb +1 -1
  143. data/components/plugins/restrict_to_dom_state.rb +1 -1
  144. data/components/plugins/script.rb +1 -1
  145. data/components/plugins/uncommon_headers.rb +1 -1
  146. data/components/plugins/vector_collector.rb +1 -1
  147. data/components/plugins/vector_feed.rb +1 -1
  148. data/components/plugins/waf_detector.rb +1 -1
  149. data/components/plugins/webhook_notify.rb +1 -1
  150. data/components/reporters/ap.rb +1 -1
  151. data/components/reporters/html/default/css/main.css +4 -0
  152. data/components/reporters/html/default.erb +9 -1
  153. data/components/reporters/html.rb +4 -6
  154. data/components/reporters/json.rb +1 -1
  155. data/components/reporters/marshal.rb +1 -1
  156. data/components/reporters/plugin_formatters/html/autologin.rb +1 -1
  157. data/components/reporters/plugin_formatters/html/content_types.rb +1 -1
  158. data/components/reporters/plugin_formatters/html/cookie_collector.rb +1 -1
  159. data/components/reporters/plugin_formatters/html/exec.rb +1 -1
  160. data/components/reporters/plugin_formatters/html/form_dicattack.rb +1 -1
  161. data/components/reporters/plugin_formatters/html/healthmap.rb +1 -1
  162. data/components/reporters/plugin_formatters/html/http_dicattack.rb +1 -1
  163. data/components/reporters/plugin_formatters/html/login_script.rb +1 -1
  164. data/components/reporters/plugin_formatters/html/metrics.rb +1 -1
  165. data/components/reporters/plugin_formatters/html/uncommon_headers.rb +1 -1
  166. data/components/reporters/plugin_formatters/html/uniformity.rb +1 -1
  167. data/components/reporters/plugin_formatters/html/vector_collector.rb +1 -1
  168. data/components/reporters/plugin_formatters/html/waf_detector.rb +1 -1
  169. data/components/reporters/plugin_formatters/stdout/autologin.rb +1 -1
  170. data/components/reporters/plugin_formatters/stdout/content_types.rb +1 -1
  171. data/components/reporters/plugin_formatters/stdout/cookie_collector.rb +1 -1
  172. data/components/reporters/plugin_formatters/stdout/exec.rb +1 -1
  173. data/components/reporters/plugin_formatters/stdout/form_dicattack.rb +1 -1
  174. data/components/reporters/plugin_formatters/stdout/healthmap.rb +1 -1
  175. data/components/reporters/plugin_formatters/stdout/http_dicattack.rb +1 -1
  176. data/components/reporters/plugin_formatters/stdout/login_script.rb +1 -1
  177. data/components/reporters/plugin_formatters/stdout/metrics.rb +1 -1
  178. data/components/reporters/plugin_formatters/stdout/uncommon_headers.rb +1 -1
  179. data/components/reporters/plugin_formatters/stdout/uniformity.rb +1 -1
  180. data/components/reporters/plugin_formatters/stdout/vector_collector.rb +1 -1
  181. data/components/reporters/plugin_formatters/stdout/waf_detector.rb +1 -1
  182. data/components/reporters/plugin_formatters/xml/autologin.rb +1 -1
  183. data/components/reporters/plugin_formatters/xml/content_types.rb +1 -1
  184. data/components/reporters/plugin_formatters/xml/cookie_collector.rb +1 -1
  185. data/components/reporters/plugin_formatters/xml/exec.rb +1 -1
  186. data/components/reporters/plugin_formatters/xml/form_dicattack.rb +1 -1
  187. data/components/reporters/plugin_formatters/xml/healthmap.rb +1 -1
  188. data/components/reporters/plugin_formatters/xml/http_dicattack.rb +1 -1
  189. data/components/reporters/plugin_formatters/xml/login_script.rb +1 -1
  190. data/components/reporters/plugin_formatters/xml/metrics.rb +1 -1
  191. data/components/reporters/plugin_formatters/xml/uncommon_headers.rb +1 -1
  192. data/components/reporters/plugin_formatters/xml/uniformity.rb +1 -1
  193. data/components/reporters/plugin_formatters/xml/vector_collector.rb +1 -1
  194. data/components/reporters/plugin_formatters/xml/waf_detector.rb +1 -1
  195. data/components/reporters/stdout.rb +6 -1
  196. data/components/reporters/txt.rb +1 -1
  197. data/components/reporters/xml/schema.xsd +1 -0
  198. data/components/reporters/xml.rb +3 -3
  199. data/components/reporters/yaml.rb +1 -1
  200. data/lib/arachni/banner.rb +1 -1
  201. data/lib/arachni/browser/element_locator.rb +1 -1
  202. data/lib/arachni/browser/javascript/dom_monitor.rb +1 -1
  203. data/lib/arachni/browser/javascript/proxy/stub.rb +1 -1
  204. data/lib/arachni/browser/javascript/proxy.rb +1 -1
  205. data/lib/arachni/browser/javascript/scripts/dom_monitor.js +39 -11
  206. data/lib/arachni/browser/javascript/scripts/taint_tracer.js +41 -30
  207. data/lib/arachni/browser/javascript/taint_tracer/frame/called_function.rb +1 -1
  208. data/lib/arachni/browser/javascript/taint_tracer/frame.rb +1 -1
  209. data/lib/arachni/browser/javascript/taint_tracer/sink/base.rb +1 -1
  210. data/lib/arachni/browser/javascript/taint_tracer/sink/data_flow.rb +1 -1
  211. data/lib/arachni/browser/javascript/taint_tracer/sink/execution_flow.rb +1 -1
  212. data/lib/arachni/browser/javascript/taint_tracer.rb +1 -1
  213. data/lib/arachni/browser/javascript.rb +14 -29
  214. data/lib/arachni/browser.rb +133 -216
  215. data/lib/arachni/browser_cluster/job/result.rb +1 -1
  216. data/lib/arachni/browser_cluster/job.rb +1 -1
  217. data/lib/arachni/browser_cluster/jobs/browser_provider.rb +1 -1
  218. data/lib/arachni/browser_cluster/jobs/dom_exploration/event_trigger/result.rb +1 -1
  219. data/lib/arachni/browser_cluster/jobs/dom_exploration/event_trigger.rb +1 -1
  220. data/lib/arachni/browser_cluster/jobs/dom_exploration/result.rb +1 -1
  221. data/lib/arachni/browser_cluster/jobs/dom_exploration.rb +1 -1
  222. data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger/result.rb +1 -1
  223. data/lib/arachni/browser_cluster/jobs/taint_trace/event_trigger.rb +1 -1
  224. data/lib/arachni/browser_cluster/jobs/taint_trace/result.rb +1 -1
  225. data/lib/arachni/browser_cluster/jobs/taint_trace.rb +1 -1
  226. data/lib/arachni/browser_cluster/worker.rb +11 -26
  227. data/lib/arachni/browser_cluster.rb +2 -3
  228. data/lib/arachni/check/auditor.rb +10 -5
  229. data/lib/arachni/check/base.rb +1 -1
  230. data/lib/arachni/check/manager.rb +1 -1
  231. data/lib/arachni/check.rb +1 -1
  232. data/lib/arachni/component/base.rb +1 -1
  233. data/lib/arachni/component/manager.rb +1 -1
  234. data/lib/arachni/component/options/address.rb +1 -1
  235. data/lib/arachni/component/options/base.rb +1 -1
  236. data/lib/arachni/component/options/bool.rb +1 -1
  237. data/lib/arachni/component/options/float.rb +1 -1
  238. data/lib/arachni/component/options/int.rb +1 -1
  239. data/lib/arachni/component/options/multiple_choice.rb +1 -1
  240. data/lib/arachni/component/options/object.rb +1 -1
  241. data/lib/arachni/component/options/path.rb +1 -1
  242. data/lib/arachni/component/options/port.rb +1 -1
  243. data/lib/arachni/component/options/string.rb +1 -1
  244. data/lib/arachni/component/options/url.rb +1 -1
  245. data/lib/arachni/component/options.rb +1 -1
  246. data/lib/arachni/component/output.rb +1 -1
  247. data/lib/arachni/component/utilities.rb +1 -1
  248. data/lib/arachni/component.rb +1 -1
  249. data/lib/arachni/data/framework/rpc.rb +2 -2
  250. data/lib/arachni/data/framework.rb +2 -2
  251. data/lib/arachni/data/issues.rb +1 -1
  252. data/lib/arachni/data/plugins.rb +1 -1
  253. data/lib/arachni/data/session.rb +1 -1
  254. data/lib/arachni/data.rb +1 -1
  255. data/lib/arachni/element/base.rb +1 -1
  256. data/lib/arachni/element/body.rb +1 -1
  257. data/lib/arachni/element/capabilities/analyzable/differential.rb +1 -1
  258. data/lib/arachni/element/capabilities/analyzable/signature.rb +1 -1
  259. data/lib/arachni/element/capabilities/analyzable/timeout.rb +1 -1
  260. data/lib/arachni/element/capabilities/analyzable.rb +1 -1
  261. data/lib/arachni/element/capabilities/auditable/buffered.rb +1 -1
  262. data/lib/arachni/element/capabilities/auditable/line_buffered.rb +1 -1
  263. data/lib/arachni/element/capabilities/auditable.rb +1 -1
  264. data/lib/arachni/element/capabilities/dom_only.rb +1 -1
  265. data/lib/arachni/element/capabilities/inputtable.rb +1 -1
  266. data/lib/arachni/element/capabilities/mutable.rb +1 -1
  267. data/lib/arachni/element/capabilities/refreshable.rb +1 -1
  268. data/lib/arachni/element/capabilities/submittable.rb +1 -1
  269. data/lib/arachni/element/capabilities/with_auditor/output.rb +1 -1
  270. data/lib/arachni/element/capabilities/with_auditor.rb +1 -1
  271. data/lib/arachni/element/capabilities/with_dom.rb +1 -1
  272. data/lib/arachni/element/capabilities/with_node.rb +1 -1
  273. data/lib/arachni/element/capabilities/with_scope/scope.rb +1 -1
  274. data/lib/arachni/element/capabilities/with_scope.rb +1 -1
  275. data/lib/arachni/element/capabilities/with_source.rb +1 -1
  276. data/lib/arachni/element/cookie/capabilities/inputtable.rb +1 -1
  277. data/lib/arachni/element/cookie/capabilities/mutable.rb +1 -1
  278. data/lib/arachni/element/cookie/capabilities/with_dom.rb +1 -1
  279. data/lib/arachni/element/cookie/dom.rb +1 -1
  280. data/lib/arachni/element/cookie.rb +1 -1
  281. data/lib/arachni/element/dom/capabilities/auditable.rb +1 -1
  282. data/lib/arachni/element/dom/capabilities/inputtable.rb +1 -1
  283. data/lib/arachni/element/dom/capabilities/locatable.rb +1 -1
  284. data/lib/arachni/element/dom/capabilities/mutable.rb +1 -1
  285. data/lib/arachni/element/dom/capabilities/submittable.rb +1 -1
  286. data/lib/arachni/element/dom.rb +1 -1
  287. data/lib/arachni/element/form/capabilities/auditable.rb +1 -1
  288. data/lib/arachni/element/form/capabilities/mutable.rb +1 -1
  289. data/lib/arachni/element/form/capabilities/submittable.rb +1 -1
  290. data/lib/arachni/element/form/capabilities/with_dom.rb +1 -1
  291. data/lib/arachni/element/form/dom.rb +1 -1
  292. data/lib/arachni/element/form.rb +1 -1
  293. data/lib/arachni/element/generic_dom.rb +1 -1
  294. data/lib/arachni/element/header/capabilities/inputtable.rb +1 -1
  295. data/lib/arachni/element/header/capabilities/mutable.rb +1 -1
  296. data/lib/arachni/element/header.rb +1 -1
  297. data/lib/arachni/element/json/capabilities/inputtable.rb +1 -1
  298. data/lib/arachni/element/json/capabilities/mutable.rb +1 -1
  299. data/lib/arachni/element/json.rb +1 -1
  300. data/lib/arachni/element/link/capabilities/auditable.rb +1 -1
  301. data/lib/arachni/element/link/capabilities/submittable.rb +1 -1
  302. data/lib/arachni/element/link/capabilities/with_dom.rb +1 -1
  303. data/lib/arachni/element/link/dom/capabilities/submittable.rb +1 -1
  304. data/lib/arachni/element/link/dom.rb +1 -1
  305. data/lib/arachni/element/link.rb +1 -1
  306. data/lib/arachni/element/link_template/capabilities/auditable.rb +1 -1
  307. data/lib/arachni/element/link_template/capabilities/inputtable.rb +1 -1
  308. data/lib/arachni/element/link_template/capabilities/with_dom.rb +1 -1
  309. data/lib/arachni/element/link_template/dom/capabilities/submittable.rb +1 -1
  310. data/lib/arachni/element/link_template/dom.rb +1 -1
  311. data/lib/arachni/element/link_template.rb +1 -1
  312. data/lib/arachni/element/nested_cookie/capabilities/submittable.rb +35 -0
  313. data/lib/arachni/element/nested_cookie.rb +370 -0
  314. data/lib/arachni/element/path.rb +1 -1
  315. data/lib/arachni/element/server.rb +1 -1
  316. data/lib/arachni/element/ui_form/dom.rb +1 -1
  317. data/lib/arachni/element/ui_form.rb +1 -1
  318. data/lib/arachni/element/ui_input/dom.rb +1 -1
  319. data/lib/arachni/element/ui_input.rb +1 -1
  320. data/lib/arachni/element/xml/capabilities/inputtable.rb +1 -1
  321. data/lib/arachni/element/xml/capabilities/mutable.rb +1 -1
  322. data/lib/arachni/element/xml.rb +1 -1
  323. data/lib/arachni/element_filter.rb +1 -1
  324. data/lib/arachni/error.rb +1 -1
  325. data/lib/arachni/ethon/easy.rb +1 -1
  326. data/lib/arachni/framework/parts/audit.rb +1 -1
  327. data/lib/arachni/framework/parts/browser.rb +1 -1
  328. data/lib/arachni/framework/parts/check.rb +1 -1
  329. data/lib/arachni/framework/parts/data.rb +1 -1
  330. data/lib/arachni/framework/parts/platform.rb +1 -1
  331. data/lib/arachni/framework/parts/plugin.rb +1 -1
  332. data/lib/arachni/framework/parts/report.rb +1 -1
  333. data/lib/arachni/framework/parts/scope.rb +1 -1
  334. data/lib/arachni/framework/parts/state.rb +1 -1
  335. data/lib/arachni/framework.rb +1 -1
  336. data/lib/arachni/http/client/dynamic_404_handler.rb +1 -1
  337. data/lib/arachni/http/client.rb +7 -5
  338. data/lib/arachni/http/cookie_jar.rb +1 -1
  339. data/lib/arachni/http/headers.rb +1 -1
  340. data/lib/arachni/http/message/scope.rb +1 -1
  341. data/lib/arachni/http/message.rb +1 -1
  342. data/lib/arachni/http/proxy_server/connection.rb +3 -8
  343. data/lib/arachni/http/proxy_server/ssl-interceptor-cacert.pem +18 -32
  344. data/lib/arachni/http/proxy_server/ssl-interceptor-cakey.pem +28 -49
  345. data/lib/arachni/http/proxy_server/ssl_interceptor.rb +7 -6
  346. data/lib/arachni/http/proxy_server/tunnel.rb +1 -1
  347. data/lib/arachni/http/proxy_server.rb +1 -1
  348. data/lib/arachni/http/request/scope.rb +1 -1
  349. data/lib/arachni/http/request.rb +8 -2
  350. data/lib/arachni/http/response/scope.rb +1 -1
  351. data/lib/arachni/http/response.rb +1 -1
  352. data/lib/arachni/http.rb +1 -1
  353. data/lib/arachni/issue/severity/base.rb +1 -1
  354. data/lib/arachni/issue/severity.rb +1 -1
  355. data/lib/arachni/issue.rb +1 -1
  356. data/lib/arachni/option_group.rb +1 -1
  357. data/lib/arachni/option_groups/audit.rb +11 -2
  358. data/lib/arachni/option_groups/browser_cluster.rb +28 -4
  359. data/lib/arachni/option_groups/datastore.rb +1 -1
  360. data/lib/arachni/option_groups/dispatcher.rb +1 -1
  361. data/lib/arachni/option_groups/http.rb +5 -5
  362. data/lib/arachni/option_groups/input.rb +1 -1
  363. data/lib/arachni/option_groups/output.rb +1 -1
  364. data/lib/arachni/option_groups/paths.rb +1 -1
  365. data/lib/arachni/option_groups/rpc.rb +1 -1
  366. data/lib/arachni/option_groups/scope.rb +46 -4
  367. data/lib/arachni/option_groups/session.rb +1 -1
  368. data/lib/arachni/option_groups/snapshot.rb +1 -1
  369. data/lib/arachni/option_groups.rb +1 -1
  370. data/lib/arachni/options.rb +1 -1
  371. data/lib/arachni/page/dom/transition.rb +1 -1
  372. data/lib/arachni/page/dom.rb +1 -1
  373. data/lib/arachni/page/scope.rb +1 -1
  374. data/lib/arachni/page.rb +3 -3
  375. data/lib/arachni/parser/document.rb +1 -1
  376. data/lib/arachni/parser/extractors/base.rb +1 -1
  377. data/lib/arachni/parser/nodes/base.rb +1 -1
  378. data/lib/arachni/parser/nodes/comment.rb +1 -1
  379. data/lib/arachni/parser/nodes/element/with_attributes/attributes.rb +2 -2
  380. data/lib/arachni/parser/nodes/element/with_attributes.rb +1 -1
  381. data/lib/arachni/parser/nodes/element.rb +1 -1
  382. data/lib/arachni/parser/nodes/text.rb +1 -1
  383. data/lib/arachni/parser/nodes/with_value.rb +2 -2
  384. data/lib/arachni/parser/sax.rb +2 -1
  385. data/lib/arachni/parser/with_children/search.rb +1 -1
  386. data/lib/arachni/parser/with_children.rb +1 -1
  387. data/lib/arachni/parser.rb +31 -2
  388. data/lib/arachni/platform/fingerprinter.rb +1 -1
  389. data/lib/arachni/platform/list.rb +1 -1
  390. data/lib/arachni/platform/manager.rb +1 -1
  391. data/lib/arachni/platform.rb +1 -1
  392. data/lib/arachni/plugin/base.rb +1 -1
  393. data/lib/arachni/plugin/formatter.rb +1 -1
  394. data/lib/arachni/plugin/manager.rb +1 -1
  395. data/lib/arachni/plugin.rb +1 -1
  396. data/lib/arachni/processes/dispatchers.rb +1 -1
  397. data/lib/arachni/processes/executables/base.rb +2 -1
  398. data/lib/arachni/processes/helpers/dispatchers.rb +1 -1
  399. data/lib/arachni/processes/helpers/instances.rb +1 -1
  400. data/lib/arachni/processes/helpers/processes.rb +1 -1
  401. data/lib/arachni/processes/helpers.rb +1 -1
  402. data/lib/arachni/processes/instances.rb +1 -1
  403. data/lib/arachni/processes/manager.rb +9 -5
  404. data/lib/arachni/processes.rb +1 -1
  405. data/lib/arachni/report.rb +1 -1
  406. data/lib/arachni/reporter/base.rb +1 -1
  407. data/lib/arachni/reporter/formatter_manager.rb +1 -1
  408. data/lib/arachni/reporter/manager.rb +1 -1
  409. data/lib/arachni/reporter/options.rb +1 -10
  410. data/lib/arachni/reporter.rb +1 -1
  411. data/lib/arachni/rest/server/instance_helpers.rb +10 -1
  412. data/lib/arachni/rest/server.rb +7 -1
  413. data/lib/arachni/rpc/client/base.rb +1 -1
  414. data/lib/arachni/rpc/client/dispatcher.rb +1 -1
  415. data/lib/arachni/rpc/client/instance/framework.rb +1 -1
  416. data/lib/arachni/rpc/client/instance/service.rb +1 -1
  417. data/lib/arachni/rpc/client/instance.rb +1 -1
  418. data/lib/arachni/rpc/serializer.rb +1 -1
  419. data/lib/arachni/rpc/server/active_options.rb +1 -1
  420. data/lib/arachni/rpc/server/base.rb +1 -1
  421. data/lib/arachni/rpc/server/check/manager.rb +1 -1
  422. data/lib/arachni/rpc/server/dispatcher/node.rb +1 -1
  423. data/lib/arachni/rpc/server/dispatcher/service.rb +1 -1
  424. data/lib/arachni/rpc/server/dispatcher.rb +1 -1
  425. data/lib/arachni/rpc/server/framework/distributor.rb +1 -1
  426. data/lib/arachni/rpc/server/framework/master.rb +1 -1
  427. data/lib/arachni/rpc/server/framework/multi_instance.rb +1 -1
  428. data/lib/arachni/rpc/server/framework/slave.rb +1 -1
  429. data/lib/arachni/rpc/server/framework.rb +1 -1
  430. data/lib/arachni/rpc/server/instance.rb +1 -1
  431. data/lib/arachni/rpc/server/output.rb +1 -1
  432. data/lib/arachni/rpc/server/plugin/manager.rb +1 -1
  433. data/lib/arachni/ruby/array.rb +1 -1
  434. data/lib/arachni/ruby/hash.rb +1 -1
  435. data/lib/arachni/ruby/object.rb +1 -1
  436. data/lib/arachni/ruby/set.rb +1 -1
  437. data/lib/arachni/ruby/string.rb +1 -1
  438. data/lib/arachni/ruby/webrick/cookie.rb +1 -1
  439. data/lib/arachni/ruby/webrick/httprequest.rb +1 -1
  440. data/lib/arachni/ruby/webrick.rb +1 -1
  441. data/lib/arachni/ruby.rb +1 -1
  442. data/lib/arachni/scope.rb +1 -1
  443. data/lib/arachni/selenium/webdriver/remote/typhoeus.rb +6 -16
  444. data/lib/arachni/session.rb +1 -1
  445. data/lib/arachni/snapshot.rb +1 -1
  446. data/lib/arachni/state/audit.rb +1 -1
  447. data/lib/arachni/state/element_filter.rb +1 -1
  448. data/lib/arachni/state/framework/rpc.rb +1 -1
  449. data/lib/arachni/state/framework.rb +1 -1
  450. data/lib/arachni/state/http.rb +1 -1
  451. data/lib/arachni/state/options.rb +1 -1
  452. data/lib/arachni/state/plugins.rb +1 -1
  453. data/lib/arachni/state.rb +1 -1
  454. data/lib/arachni/support/buffer/autoflush.rb +1 -1
  455. data/lib/arachni/support/buffer/base.rb +1 -1
  456. data/lib/arachni/support/buffer.rb +1 -1
  457. data/lib/arachni/support/cache/base.rb +1 -1
  458. data/lib/arachni/support/cache/least_cost_replacement.rb +1 -1
  459. data/lib/arachni/support/cache/least_recently_pushed.rb +1 -1
  460. data/lib/arachni/support/cache/least_recently_used.rb +1 -1
  461. data/lib/arachni/support/cache/preference.rb +1 -1
  462. data/lib/arachni/support/cache/random_replacement.rb +1 -1
  463. data/lib/arachni/support/cache.rb +1 -1
  464. data/lib/arachni/support/crypto/rsa_aes_cbc.rb +1 -1
  465. data/lib/arachni/support/crypto.rb +1 -1
  466. data/lib/arachni/support/database/base.rb +15 -7
  467. data/lib/arachni/support/database/hash.rb +1 -1
  468. data/lib/arachni/support/database/queue.rb +1 -1
  469. data/lib/arachni/support/database.rb +1 -1
  470. data/lib/arachni/support/glob.rb +1 -1
  471. data/lib/arachni/support/lookup/base.rb +1 -1
  472. data/lib/arachni/support/lookup/hash_set.rb +1 -1
  473. data/lib/arachni/support/lookup/moolb.rb +1 -1
  474. data/lib/arachni/support/lookup.rb +1 -1
  475. data/lib/arachni/support/mixins/observable.rb +1 -1
  476. data/lib/arachni/support/mixins/terminal.rb +1 -1
  477. data/lib/arachni/support/mixins.rb +1 -1
  478. data/lib/arachni/support/profiler.rb +1 -1
  479. data/lib/arachni/support/signature.rb +1 -1
  480. data/lib/arachni/support.rb +1 -1
  481. data/lib/arachni/trainer.rb +1 -1
  482. data/lib/arachni/ui/foo/output.rb +1 -1
  483. data/lib/arachni/uri/scope.rb +1 -1
  484. data/lib/arachni/uri.rb +6 -9
  485. data/lib/arachni/utilities.rb +1 -1
  486. data/lib/arachni/version.rb +1 -1
  487. data/lib/arachni.rb +1 -1
  488. data/lib/version +1 -1
  489. data/logs/error-1821117.log +243 -0
  490. data/spec/arachni/browser/javascript/dom_monitor_spec.rb +84 -60
  491. data/spec/arachni/browser/javascript/proxy_spec.rb +0 -10
  492. data/spec/arachni/browser/javascript/taint_tracer_spec.rb +68 -90
  493. data/spec/arachni/browser/javascript_spec.rb +10 -9
  494. data/spec/arachni/browser_cluster/worker_spec.rb +23 -55
  495. data/spec/arachni/browser_spec.rb +160 -158
  496. data/spec/arachni/data/framework/rpc_spec.rb +1 -1
  497. data/spec/arachni/data/framework_spec.rb +1 -1
  498. data/spec/arachni/element/cookie_spec.rb +1 -1
  499. data/spec/arachni/element/nested_cookie_spec.rb +687 -0
  500. data/spec/arachni/element/ui_form_spec.rb +2 -2
  501. data/spec/arachni/element/ui_input_spec.rb +1 -1
  502. data/spec/arachni/http/client_spec.rb +14 -26
  503. data/spec/arachni/http/cookie_jar_spec.rb +2 -2
  504. data/spec/arachni/http/proxy_server_spec.rb +2 -0
  505. data/spec/arachni/http/request_spec.rb +3 -2
  506. data/spec/arachni/option_groups/browser_cluster_spec.rb +17 -0
  507. data/spec/arachni/option_groups/http_spec.rb +6 -6
  508. data/spec/arachni/option_groups/scope_spec.rb +1 -6
  509. data/spec/arachni/page_spec.rb +3 -2
  510. data/spec/arachni/parser_spec.rb +45 -1
  511. data/spec/arachni/reporter/options_spec.rb +0 -14
  512. data/spec/arachni/rest/server_spec.rb +39 -2
  513. data/spec/arachni/uri_spec.rb +1 -1
  514. data/spec/components/checks/active/code_injection_spec.rb +12 -7
  515. data/spec/components/checks/active/code_injection_timing_spec.rb +4 -3
  516. data/spec/components/checks/active/file_inclusion_spec.rb +15 -10
  517. data/spec/components/checks/active/ldap_injection_spec.rb +5 -4
  518. data/spec/components/checks/active/no_sql_injection_differential_spec.rb +1 -1
  519. data/spec/components/checks/active/no_sql_injection_spec.rb +5 -4
  520. data/spec/components/checks/active/os_cmd_injection_spec.rb +6 -4
  521. data/spec/components/checks/active/os_cmd_injection_timing_spec.rb +4 -3
  522. data/spec/components/checks/active/path_traversal_spec.rb +10 -7
  523. data/spec/components/checks/active/response_splitting_spec.rb +5 -4
  524. data/spec/components/checks/active/rfi_spec.rb +9 -8
  525. data/spec/components/checks/active/source_code_disclosure_spec.rb +33 -10
  526. data/spec/components/checks/active/sql_injection_differential_spec.rb +1 -1
  527. data/spec/components/checks/active/sql_injection_spec.rb +53 -36
  528. data/spec/components/checks/active/sql_injection_timing_spec.rb +11 -8
  529. data/spec/components/checks/active/unvalidated_redirect_spec.rb +9 -8
  530. data/spec/components/checks/active/xpath_injection_spec.rb +5 -4
  531. data/spec/components/checks/active/xss_dom_script_context_spec.rb +5 -5
  532. data/spec/components/checks/active/xss_event_spec.rb +5 -3
  533. data/spec/components/checks/active/xss_script_context_spec.rb +4 -3
  534. data/spec/components/checks/active/xss_spec.rb +5 -4
  535. data/spec/components/checks/active/xss_tag_spec.rb +11 -3
  536. data/spec/components/checks/passive/backup_files_spec.rb +0 -4
  537. data/spec/components/checks/passive/grep/x_frame_options_spec.rb +6 -0
  538. data/spec/spec_helper.rb +2 -1
  539. data/spec/support/factories/http/response.rb +1 -1
  540. data/spec/support/fixtures/check_with_invalid_platforms/with_invalid_platforms.rb +1 -1
  541. data/spec/support/fixtures/checks/test.rb +4 -4
  542. data/spec/support/fixtures/checks/test2.rb +1 -1
  543. data/spec/support/fixtures/checks/test3.rb +1 -1
  544. data/spec/support/fixtures/cookies.txt +1 -1
  545. data/spec/support/fixtures/executables/node.rb +2 -3
  546. data/spec/support/fixtures/fingerprinters/test.rb +1 -1
  547. data/spec/support/fixtures/nested_cookies.txt +11 -0
  548. data/spec/support/fixtures/plugins/bad.rb +1 -1
  549. data/spec/support/fixtures/plugins/defaults/default.rb +1 -1
  550. data/spec/support/fixtures/plugins/distributable.rb +1 -1
  551. data/spec/support/fixtures/plugins/loop.rb +1 -1
  552. data/spec/support/fixtures/plugins/suspendable.rb +1 -1
  553. data/spec/support/fixtures/plugins/wait.rb +1 -1
  554. data/spec/support/fixtures/plugins/with_options.rb +1 -1
  555. data/spec/support/fixtures/plugins_with_priorities/p0.rb +1 -1
  556. data/spec/support/fixtures/plugins_with_priorities/p00.rb +1 -1
  557. data/spec/support/fixtures/plugins_with_priorities/p1.rb +1 -1
  558. data/spec/support/fixtures/plugins_with_priorities/p2.rb +1 -1
  559. data/spec/support/fixtures/plugins_with_priorities/p22.rb +1 -1
  560. data/spec/support/fixtures/plugins_with_priorities/p222.rb +1 -1
  561. data/spec/support/fixtures/plugins_with_priorities/p_nil.rb +1 -1
  562. data/spec/support/fixtures/plugins_with_priorities/p_nil2.rb +1 -1
  563. data/spec/support/fixtures/report.afr +0 -0
  564. data/spec/support/fixtures/reporters/base_spec/plugin_formatters/with_formatters/foobar.rb +1 -1
  565. data/spec/support/fixtures/reporters/base_spec/with_formatters.rb +1 -1
  566. data/spec/support/fixtures/reporters/base_spec/with_outfile.rb +1 -1
  567. data/spec/support/fixtures/reporters/base_spec/without_outfile.rb +1 -1
  568. data/spec/support/fixtures/reporters/manager_spec/afr.rb +1 -1
  569. data/spec/support/fixtures/reporters/manager_spec/error.rb +1 -1
  570. data/spec/support/fixtures/reporters/manager_spec/foo.rb +1 -1
  571. data/spec/support/fixtures/run_check/body.rb +1 -1
  572. data/spec/support/fixtures/run_check/cookies.rb +1 -1
  573. data/spec/support/fixtures/run_check/empty.rb +1 -1
  574. data/spec/support/fixtures/run_check/flch.rb +1 -1
  575. data/spec/support/fixtures/run_check/forms.rb +1 -1
  576. data/spec/support/fixtures/run_check/headers.rb +1 -1
  577. data/spec/support/fixtures/run_check/links.rb +1 -1
  578. data/spec/support/fixtures/run_check/nil.rb +1 -1
  579. data/spec/support/fixtures/run_check/path.rb +1 -1
  580. data/spec/support/fixtures/run_check/server.rb +1 -1
  581. data/spec/support/fixtures/signature_check/signature.rb +1 -1
  582. data/spec/support/fixtures/wait_check/wait.rb +1 -1
  583. data/spec/support/helpers/framework.rb +1 -1
  584. data/spec/support/helpers/misc.rb +1 -1
  585. data/spec/support/helpers/paths.rb +1 -1
  586. data/spec/support/helpers/requires.rb +1 -1
  587. data/spec/support/helpers/resets.rb +1 -1
  588. data/spec/support/helpers/web_server.rb +1 -1
  589. data/spec/support/lib/factory.rb +1 -1
  590. data/spec/support/lib/web_server_client.rb +1 -1
  591. data/spec/support/lib/web_server_dispatcher.rb +1 -1
  592. data/spec/support/lib/web_server_manager.rb +1 -1
  593. data/spec/support/servers/arachni/check/auditor.rb +1 -0
  594. data/spec/support/servers/arachni/element/form/form_dom.rb +1 -0
  595. data/spec/support/servers/arachni/element/form.rb +4 -4
  596. data/spec/support/servers/arachni/element/header.rb +1 -1
  597. data/spec/support/servers/arachni/element/nested_cookie.rb +84 -0
  598. data/spec/support/servers/arachni/parser.rb +6 -0
  599. data/spec/support/servers/checks/active/code_injection.rb +18 -0
  600. data/spec/support/servers/checks/active/code_injection_timing.rb +18 -0
  601. data/spec/support/servers/checks/active/file_inclusion.rb +19 -1
  602. data/spec/support/servers/checks/active/ldap_injection.rb +18 -0
  603. data/spec/support/servers/checks/active/no_sql_injection.rb +27 -0
  604. data/spec/support/servers/checks/active/no_sql_injection_differential.rb +19 -0
  605. data/spec/support/servers/checks/active/os_cmd_injection.rb +29 -0
  606. data/spec/support/servers/checks/active/os_cmd_injection_timing.rb +18 -1
  607. data/spec/support/servers/checks/active/path_traversal.rb +30 -3
  608. data/spec/support/servers/checks/active/response_splitting.rb +30 -1
  609. data/spec/support/servers/checks/active/rfi.rb +30 -2
  610. data/spec/support/servers/checks/active/session_fixation.rb +1 -3
  611. data/spec/support/servers/checks/active/source_code_disclosure.rb +16 -0
  612. data/spec/support/servers/checks/active/sql_injection.rb +27 -0
  613. data/spec/support/servers/checks/active/sql_injection_differential.rb +19 -0
  614. data/spec/support/servers/checks/active/sql_injection_timing.rb +19 -1
  615. data/spec/support/servers/checks/active/unvalidated_redirect.rb +40 -1
  616. data/spec/support/servers/checks/active/xpath_injection.rb +27 -0
  617. data/spec/support/servers/checks/active/xss.rb +40 -0
  618. data/spec/support/servers/checks/active/xss_event.rb +22 -1
  619. data/spec/support/servers/checks/active/xss_script_context.rb +18 -0
  620. data/spec/support/servers/checks/active/xss_tag.rb +40 -0
  621. data/spec/support/servers/checks/passive/grep/x_frame_options.rb +5 -0
  622. data/spec/support/shared/check.rb +1 -0
  623. data/spec/support/shared/element/capabilities/auditable/buffered.rb +2 -2
  624. data/spec/support/shared/element/capabilities/auditable/line_buffered.rb +2 -2
  625. data/spec/support/shared/element/capabilities/auditable.rb +2 -2
  626. data/ui/cli/framework/option_parser.rb +44 -8
  627. data/ui/cli/framework.rb +6 -5
  628. data/ui/cli/option_parser.rb +1 -1
  629. data/ui/cli/output.rb +1 -1
  630. data/ui/cli/reporter/option_parser.rb +1 -1
  631. data/ui/cli/reporter.rb +1 -1
  632. data/ui/cli/reproduce/option_parser.rb +1 -1
  633. data/ui/cli/reproduce.rb +1 -1
  634. data/ui/cli/rest/server/option_parser.rb +1 -1
  635. data/ui/cli/rest/server.rb +1 -1
  636. data/ui/cli/restored_framework/option_parser.rb +1 -1
  637. data/ui/cli/restored_framework.rb +1 -1
  638. data/ui/cli/rpc/client/dispatcher_monitor/option_parser.rb +1 -1
  639. data/ui/cli/rpc/client/dispatcher_monitor.rb +1 -1
  640. data/ui/cli/rpc/client/instance.rb +7 -4
  641. data/ui/cli/rpc/client/local/option_parser.rb +1 -1
  642. data/ui/cli/rpc/client/local.rb +1 -1
  643. data/ui/cli/rpc/client/remote/option_parser.rb +1 -1
  644. data/ui/cli/rpc/client/remote.rb +1 -1
  645. data/ui/cli/rpc/server/dispatcher/option_parser.rb +1 -1
  646. data/ui/cli/rpc/server/dispatcher.rb +1 -1
  647. data/ui/cli/utilities.rb +1 -1
  648. metadata +603 -581
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ * Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
  *
4
4
  * This file is part of the Arachni Framework project and is subject to
5
5
  * redistribution and commercial restrictions. Please see the Arachni Framework
@@ -23,6 +23,8 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
23
23
  // for this document.
24
24
  initialized: false,
25
25
 
26
+ event_inheritance_limit: null,
27
+
26
28
  // Keeps track of setTimeout() calls.
27
29
  timeouts: [],
28
30
 
@@ -149,9 +151,11 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
149
151
  "input" : true
150
152
  },
151
153
 
152
- initialize: function () {
154
+ initialize: function ( event_inheritance_limit ) {
153
155
  if( _tokenDOMMonitor.initialized ) return;
154
156
 
157
+ _tokenDOMMonitor.event_inheritance_limit = event_inheritance_limit;
158
+
155
159
  _tokenDOMMonitor.track_setTimeout();
156
160
  _tokenDOMMonitor.track_addEventListener();
157
161
 
@@ -191,6 +195,8 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
191
195
  // `offset` and `batch_size`.
192
196
  var relevant_element_index = 0;
193
197
 
198
+ var event_inheritance_limit = 0;
199
+
194
200
  for( var i = 0; i < length; i++ ) {
195
201
  var element = elements[i];
196
202
 
@@ -205,7 +211,7 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
205
211
  if( tag_name_whitelist.length > 0 && !whitelist[tag_name] ) continue;
206
212
 
207
213
  // Skip invisible elements.
208
- if( element.offsetWidth <= 0 && element.offsetHeight <= 0 ) continue;
214
+ if( !_tokenDOMMonitor.is_visible( element ) ) continue;
209
215
 
210
216
  var e = {
211
217
  tag_name: tag_name,
@@ -213,11 +219,19 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
213
219
  attributes: {}
214
220
  };
215
221
 
216
- // If the current element is allowed to have inherited events
217
- // merge them with its own.
218
- if( _tokenDOMMonitor.is_allowed_element_with_inherited_events( e.tag_name ) ) {
222
+ // If we haven't reached the event bubbling depth limit and the
223
+ // current element is allowed to have inherited events, merge them
224
+ // with its own.
225
+ if(
226
+ (
227
+ !_tokenDOMMonitor.event_inheritance_limit ||
228
+ event_inheritance_limit < _tokenDOMMonitor.event_inheritance_limit
229
+ ) && _tokenDOMMonitor.is_allowed_element_with_inherited_events( e.tag_name )
230
+ ) {
219
231
  e.events = e.events.concat( element._arachni_inherited_events || [] );
220
232
  e.events = _tokenDOMMonitor.arrayUnique( e.events.concat( global_events ) );
233
+
234
+ event_inheritance_limit++;
221
235
  }
222
236
 
223
237
  var attributes = element.attributes;
@@ -265,7 +279,7 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
265
279
  }
266
280
 
267
281
  grouped_events[event_name] = grouped_events[event_name] || [];
268
- grouped_events[event_name].push( event_handler );
282
+ grouped_events[event_name].push( event_handler.toString() );
269
283
  }
270
284
  e.events = grouped_events;
271
285
 
@@ -379,7 +393,15 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
379
393
 
380
394
  window.setTimeout = function() {
381
395
  arguments[1] = parseInt( arguments[1] );
382
- _tokenDOMMonitor.timeouts.push( arguments );
396
+
397
+ args = [];
398
+ for( i = 0; i < arguments.length; i++ ) {
399
+ args[i] = arguments[i];
400
+ }
401
+ args[0] = args[0].toString();
402
+
403
+ _tokenDOMMonitor.timeouts.push( args );
404
+
383
405
  original_setTimeout.apply( this, arguments );
384
406
  };
385
407
  },
@@ -477,7 +499,7 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
477
499
  }
478
500
 
479
501
  // All is well, register the event with the element.
480
- element['_arachni_events'].push( [event, handler] );
502
+ element['_arachni_events'].push( [event, handler.toString()] );
481
503
  },
482
504
 
483
505
  // Sets a unique enough custom ID attribute to elements that lack proper IDs.
@@ -506,6 +528,14 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
506
528
  }
507
529
  },
508
530
 
531
+ is_visible: function( element ) {
532
+ return !!(
533
+ element.offsetWidth ||
534
+ element.offsetHeight ||
535
+ element.getClientRects().length
536
+ );
537
+ },
538
+
509
539
  is_valid_event: function ( event ) {
510
540
  return Object.prototype.hasOwnProperty.call(
511
541
  _tokenDOMMonitor.valid_events,
@@ -561,5 +591,3 @@ var _tokenDOMMonitor = _tokenDOMMonitor || {
561
591
  return hash;
562
592
  }
563
593
  };
564
-
565
- _tokenDOMMonitor.initialize();
@@ -1,5 +1,5 @@
1
1
  /*
2
- * Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ * Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
  *
4
4
  * This file is part of the Arachni Framework project and is subject to
5
5
  * redistribution and commercial restrictions. Please see the Arachni Framework
@@ -70,7 +70,6 @@ var _tokenTaintTracer = _tokenTaintTracer || {
70
70
  'decodeURI', 'escape', 'unescape'
71
71
  ]
72
72
  ],
73
- [Text.prototype, ['replaceWholeText']],
74
73
  [Document.prototype, ['createTextNode']],
75
74
  [HTMLDocument.prototype, ['write', 'writeln']],
76
75
  [Element.prototype, ['setAttribute']],
@@ -260,13 +259,15 @@ var _tokenTaintTracer = _tokenTaintTracer || {
260
259
  trace = [];
261
260
 
262
261
  depth_offset = parseInt( depth_offset ) || 3;
263
- for( var i = 0; i < depth_offset - 1; i++ ) {
262
+ for( var i = 0; i < depth_offset - 2; i++ ) {
264
263
  if( f ) f = f.caller;
265
264
  }
266
265
 
267
266
  var error = _tokenTaintTracer.get_error_object();
268
267
  var stackArrayOffset = depth_offset;
269
268
 
269
+ var current_url = window.location.href;
270
+
270
271
  var stack_messages = error.stack.split( '\n' );
271
272
  while( stackArrayOffset <= stack_messages.length - 1 ) {
272
273
  // Skip our own functions from the trace.
@@ -276,37 +277,41 @@ var _tokenTaintTracer = _tokenTaintTracer || {
276
277
  };
277
278
 
278
279
  if( f ) {
279
- frame.function.source = f;
280
+ frame.function.source = f.toString();
280
281
 
281
282
  // Scripts with 'use strict' don't let us access arguments.
282
283
  try {
283
284
  frame.function.arguments =
284
285
  _tokenTaintTracer.sanitize_arguments( f.arguments );
285
- } catch(e){}
286
+ } catch( e ){ console.log( e ) }
286
287
  }
287
288
 
288
- var stack = stack_messages[stackArrayOffset];
289
+ var stack_frame = stack_messages[stackArrayOffset].split( 'at ', 2 ).pop();
289
290
 
290
- var name_rest_splits;
291
- if( stack.indexOf( '@' ) !== -1 ) {
292
- name_rest_splits = stack.split( '@', 2 );
293
- frame.function.name = name_rest_splits.shift();
294
- } else {
295
- name_rest_splits = [stack];
291
+ var name_rest_splits = stack_frame.split( ' (' );
292
+ if( name_rest_splits.length > 1 ) {
293
+ frame.function.name = name_rest_splits.shift().split( '.', 2 ).pop();
296
294
  }
297
295
 
298
- if( name_rest_splits.length > 0 ) {
299
- stack = name_rest_splits.shift();
300
- var url_line_splits = stack.split( ':' );
296
+ var url_line_col_splits = name_rest_splits.pop().split( ':' );
297
+
298
+ // Remove the column.
299
+ url_line_col_splits.pop();
300
+ var url_line_splits = url_line_col_splits;
301
+
302
+ frame.line = parseInt( url_line_splits.pop() );
301
303
 
302
- // Remove the column.
303
- url_line_splits.pop();
304
+ frame.url = url_line_splits.join( ':' ).split( ' (' ).pop();
304
305
 
305
- frame.line = parseInt( url_line_splits.pop() );
306
- frame.url = url_line_splits.join( ':' );
306
+ // Line numbers in the current page will be off by one after the
307
+ // JS env has been removed, adjust accordingly.
308
+ if( frame.url == current_url && frame.line > 0 ) {
309
+ frame.line--;
307
310
  }
308
311
 
309
- trace.push( frame );
312
+ if( frame.url != '<anonymous>' ) {
313
+ trace.push( frame );
314
+ }
310
315
  }
311
316
 
312
317
  // Scripts with 'use strict' don't let us access function callers.
@@ -429,7 +434,7 @@ var _tokenTaintTracer = _tokenTaintTracer || {
429
434
 
430
435
  _tokenTaintTracer.log_data_flow_sink( taint, {
431
436
  function: {
432
- source: func,
437
+ source: func.toString(),
433
438
  name: func.name || function_name,
434
439
  arguments: arguments
435
440
  },
@@ -506,19 +511,25 @@ var _tokenTaintTracer = _tokenTaintTracer || {
506
511
  for( var name in namespace ){
507
512
  if( !namespace.hasOwnProperty( name ) ) continue;
508
513
 
509
- var potentialFunction = namespace[name];
514
+ try {
515
+ var potentialFunction = namespace[name];
510
516
 
511
- if( Object.prototype.toString.call(potentialFunction) !== '[object Function]' )
512
- continue;
517
+ if (Object.prototype.toString.call(potentialFunction) !== '[object Function]')
518
+ continue;
513
519
 
514
- if( _tokenTaintTracer.ignore[potentialFunction.name] ) continue;
520
+ if (_tokenTaintTracer.ignore[potentialFunction.name]) continue;
515
521
 
516
- var namespace_function_name = Object.prototype.toString.call(namespace) +
517
- '-' + potentialFunction.name;
518
- if( _tokenTaintTracer.traced[namespace_function_name] ) continue;
522
+ var namespace_function_name = Object.prototype.toString.call(namespace) +
523
+ '-' + potentialFunction.name;
524
+ if (_tokenTaintTracer.traced[namespace_function_name]) continue;
519
525
 
520
- _tokenTaintTracer.add_trace_to_function( namespace, name, _tokenTaintTracer.object_to_name(namespace) );
521
- _tokenTaintTracer.traced[namespace_function_name] = true;
526
+ _tokenTaintTracer.add_trace_to_function(
527
+ namespace, name, _tokenTaintTracer.object_to_name( namespace )
528
+ );
529
+ _tokenTaintTracer.traced[namespace_function_name] = true;
530
+ } catch(e) {
531
+ console.log( e )
532
+ }
522
533
  }
523
534
  },
524
535
 
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -1,5 +1,5 @@
1
1
  =begin
2
- Copyright 2010-2017 Sarosys LLC <http://www.sarosys.com>
2
+ Copyright 2010-2022 Ecsypno <http://www.ecsypno.com>
3
3
 
4
4
  This file is part of the Arachni Framework project and is subject to
5
5
  redistribution and commercial restrictions. Please see the Arachni Framework
@@ -25,7 +25,7 @@ class Javascript
25
25
 
26
26
  # @return [String]
27
27
  # URL to use when requesting our custom JS scripts.
28
- SCRIPT_BASE_URL = 'http://javascript.browser.arachni/'
28
+ SCRIPT_BASE_URL = 'https://javascript.browser.arachni/'
29
29
 
30
30
  # @return [String]
31
31
  # Filesystem directory containing the JS scripts.
@@ -166,6 +166,7 @@ class Javascript
166
166
  end
167
167
 
168
168
  t = Time.now
169
+
169
170
  while !ready?
170
171
  sleep 0.1
171
172
 
@@ -182,7 +183,7 @@ class Javascript
182
183
  # @return [Bool]
183
184
  # `true` if our custom JS environment has been initialized.
184
185
  def ready?
185
- !!run( "return window._#{token}" )
186
+ run( "return (typeof window._#{token} !== 'undefined' && document.readyState === 'complete')" )
186
187
  rescue => e
187
188
  print_debug_exception e, 2
188
189
  false
@@ -382,6 +383,7 @@ class Javascript
382
383
  <script src="#{script_url_for( :taint_tracer )}"></script> #{html_comment}
383
384
  <script src="#{script_url_for( :dom_monitor )}"></script> #{html_comment}
384
385
  <script>
386
+ #{wrapped_dom_monitor_initializer}
385
387
  #{wrapped_taint_tracer_initializer( response )}
386
388
  #{js_initialization_signal};
387
389
 
@@ -399,32 +401,9 @@ class Javascript
399
401
  end
400
402
 
401
403
  def html?( response )
402
- return false if response.body.empty?
403
-
404
- # We only care about HTML responses.
405
- return false if !response.html?
406
-
407
- # The last check isn't fool-proof, so don't do it when loading the page
408
- # for the first time, but only when the page loads stuff via AJAX and whatnot.
409
- #
410
- # Well, we can be pretty sure that the root page will be HTML anyways.
411
- return true if @browser.last_url == response.url
412
-
413
- # Finally, verify that we're really working with markup (hopefully HTML)
414
- # and that the previous checks weren't just flukes matching some other
415
- # kind of document.
416
- #
417
- # For example, it may have been JSON with the wrong content-type that
418
- # includes HTML -- it happens.
419
- #
420
- # Beware, if there's a doctype in the beginning this will get fooled.
421
- if !Parser.markup?( response.body )
422
- print_debug "Does not look like HTML: #{response.url}"
423
- print_debug "\n#{response.body}"
424
- return false
425
- end
426
-
427
- true
404
+ # If the server says it's HTML dig deeper to ensure it.
405
+ # We don't want wrong response headers messing up the JS env.
406
+ response.html? && Parser.html?( response.body )
428
407
  end
429
408
 
430
409
  private
@@ -489,6 +468,12 @@ class Javascript
489
468
  )
490
469
  end
491
470
 
471
+ def wrapped_dom_monitor_initializer
472
+ "/* #{token}_tokenDOMMonitor_initialize_start */ " <<
473
+ "#{@dom_monitor.stub.function( :initialize, Options.scope.dom_event_inheritance_limit )} " <<
474
+ "/* #{token}_tokenDOMMonitor_initialize_stop */"
475
+ end
476
+
492
477
  def wrapped_taint_tracer_initializer( response )
493
478
  "/* #{token}_initialize_start */ " <<
494
479
  "#{@taint_tracer.stub.function( :initialize, taints( response ) )} " <<