contrast-agent 4.3.2 → 4.4.0

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 (60) hide show
  1. checksums.yaml +4 -4
  2. data/lib/contrast/agent.rb +5 -1
  3. data/lib/contrast/agent/assess.rb +0 -9
  4. data/lib/contrast/agent/assess/contrast_event.rb +0 -2
  5. data/lib/contrast/agent/assess/contrast_object.rb +5 -2
  6. data/lib/contrast/agent/assess/finalizers/hash.rb +7 -0
  7. data/lib/contrast/agent/assess/policy/dynamic_source_factory.rb +17 -3
  8. data/lib/contrast/agent/assess/policy/propagation_method.rb +28 -13
  9. data/lib/contrast/agent/assess/policy/propagator/append.rb +28 -13
  10. data/lib/contrast/agent/assess/policy/propagator/database_write.rb +21 -16
  11. data/lib/contrast/agent/assess/policy/propagator/splat.rb +23 -13
  12. data/lib/contrast/agent/assess/policy/propagator/split.rb +14 -7
  13. data/lib/contrast/agent/assess/policy/propagator/substitution.rb +30 -14
  14. data/lib/contrast/agent/assess/policy/trigger_method.rb +13 -8
  15. data/lib/contrast/agent/assess/policy/trigger_node.rb +28 -7
  16. data/lib/contrast/agent/assess/policy/trigger_validation/redos_validator.rb +59 -0
  17. data/lib/contrast/agent/assess/policy/trigger_validation/ssrf_validator.rb +1 -2
  18. data/lib/contrast/agent/assess/policy/trigger_validation/trigger_validation.rb +6 -4
  19. data/lib/contrast/agent/assess/policy/trigger_validation/xss_validator.rb +2 -4
  20. data/lib/contrast/agent/assess/properties.rb +0 -2
  21. data/lib/contrast/agent/assess/property/tagged.rb +37 -19
  22. data/lib/contrast/agent/assess/tracker.rb +1 -1
  23. data/lib/contrast/agent/middleware.rb +85 -55
  24. data/lib/contrast/agent/patching/policy/patch_status.rb +1 -1
  25. data/lib/contrast/agent/patching/policy/patcher.rb +51 -44
  26. data/lib/contrast/agent/patching/policy/trigger_node.rb +5 -2
  27. data/lib/contrast/agent/protect/rule/sqli.rb +17 -11
  28. data/lib/contrast/agent/request_context.rb +12 -0
  29. data/lib/contrast/agent/thread.rb +1 -1
  30. data/lib/contrast/agent/thread_watcher.rb +20 -5
  31. data/lib/contrast/agent/version.rb +1 -1
  32. data/lib/contrast/api/communication/messaging_queue.rb +18 -21
  33. data/lib/contrast/api/communication/response_processor.rb +8 -1
  34. data/lib/contrast/api/communication/socket_client.rb +22 -14
  35. data/lib/contrast/api/decorators.rb +2 -0
  36. data/lib/contrast/api/decorators/agent_startup.rb +58 -0
  37. data/lib/contrast/api/decorators/application_startup.rb +51 -0
  38. data/lib/contrast/api/decorators/route_coverage.rb +15 -5
  39. data/lib/contrast/api/decorators/trace_event.rb +42 -14
  40. data/lib/contrast/components/agent.rb +2 -0
  41. data/lib/contrast/components/app_context.rb +4 -22
  42. data/lib/contrast/components/sampling.rb +48 -6
  43. data/lib/contrast/components/settings.rb +5 -4
  44. data/lib/contrast/framework/manager.rb +13 -12
  45. data/lib/contrast/framework/rails/support.rb +42 -43
  46. data/lib/contrast/framework/sinatra/support.rb +100 -41
  47. data/lib/contrast/logger/log.rb +31 -15
  48. data/lib/contrast/utils/class_util.rb +3 -1
  49. data/lib/contrast/utils/heap_dump_util.rb +103 -87
  50. data/lib/contrast/utils/invalid_configuration_util.rb +21 -12
  51. data/resources/assess/policy.json +3 -9
  52. data/resources/deadzone/policy.json +6 -0
  53. data/ruby-agent.gemspec +54 -16
  54. metadata +105 -136
  55. data/lib/contrast/agent/assess/rule.rb +0 -18
  56. data/lib/contrast/agent/assess/rule/base.rb +0 -52
  57. data/lib/contrast/agent/assess/rule/redos.rb +0 -67
  58. data/lib/contrast/framework/sinatra/patch/base.rb +0 -83
  59. data/lib/contrast/framework/sinatra/patch/support.rb +0 -27
  60. data/lib/contrast/utils/prevent_serialization.rb +0 -52
@@ -26,19 +26,9 @@ module Contrast
26
26
  def cs__report_finding rule_id, user_provided_options, call_location
27
27
  with_contrast_scope do
28
28
  finding = Contrast::Api::Dtm::Finding.new
29
- finding.rule_id = rule_id
30
- path = call_location.path
31
- # just get the file name, not the full path
32
- path = path.split(Contrast::Utils::ObjectShare::SLASH).last
33
- session_id = user_provided_options[:key].to_s if user_provided_options
34
-
35
29
  finding.version = Contrast::Agent::Assess::Policy::TriggerMethod::CURRENT_FINDING_VERSION
36
- finding.properties[CS__SESSION_ID] = Contrast::Utils::StringUtils.force_utf8(session_id)
37
- finding.properties[CS__PATH] = Contrast::Utils::StringUtils.force_utf8(path)
38
- file_path = call_location.absolute_path
39
- snippet = file_snippet(file_path, call_location)
40
- finding.properties[CS__SNIPPET] = Contrast::Utils::StringUtils.force_utf8(snippet)
41
-
30
+ finding.rule_id = rule_id
31
+ set_properties(finding, user_provided_options, call_location)
42
32
  hash = Contrast::Utils::HashDigest.generate_config_hash(finding)
43
33
  finding.hash_code = Contrast::Utils::StringUtils.force_utf8(hash)
44
34
  finding.preflight = Contrast::Utils::PreflightUtil.create_preflight(finding)
@@ -50,6 +40,25 @@ module Contrast
50
40
 
51
41
  private
52
42
 
43
+ # Set the properties needed to report and subsequently render this finding on the finding given.
44
+ #
45
+ # @param finding [Contrast::Api::Dtm::Finding] the configuration finding to populate
46
+ # @param user_provided_options [Hash] the configuration value(s) which
47
+ # violated the rule
48
+ # @param call_location [Thread::Backtrace::Location] the location where
49
+ # the bad configuration was set
50
+ def set_properties finding, user_provided_options, call_location
51
+ path = call_location.path
52
+ # just get the file name, not the full path
53
+ path = path.split(Contrast::Utils::ObjectShare::SLASH).last
54
+ session_id = user_provided_options[:key].to_s if user_provided_options
55
+ finding.properties[CS__SESSION_ID] = Contrast::Utils::StringUtils.force_utf8(session_id)
56
+ finding.properties[CS__PATH] = Contrast::Utils::StringUtils.force_utf8(path)
57
+ file_path = call_location.absolute_path
58
+ snippet = file_snippet(file_path, call_location)
59
+ finding.properties[CS__SNIPPET] = Contrast::Utils::StringUtils.force_utf8(snippet)
60
+ end
61
+
53
62
  def file_snippet file_path, call_location
54
63
  idx = call_location&.lineno
55
64
  if file_path && idx && File.exist?(file_path)
@@ -1173,26 +1173,20 @@
1173
1173
  "instance_method": true,
1174
1174
  "method_visibility": "public",
1175
1175
  "method_name":"match",
1176
- "source":"P0",
1177
- "trigger_class": "Contrast::Agent::Assess::Rule::Redos",
1178
- "trigger_method": "regexp_complexity_check"
1176
+ "source":"P0"
1179
1177
 
1180
1178
  }, {
1181
1179
  "class_name":"String",
1182
1180
  "instance_method": true,
1183
1181
  "method_visibility": "public",
1184
1182
  "method_name":"=~",
1185
- "source":"O",
1186
- "trigger_class": "Contrast::Agent::Assess::Rule::Redos",
1187
- "trigger_method": "regexp_complexity_check"
1183
+ "source":"O"
1188
1184
  }, {
1189
1185
  "class_name":"Regexp",
1190
1186
  "instance_method": true,
1191
1187
  "method_visibility": "public",
1192
1188
  "method_name":"=~",
1193
- "source":"P0",
1194
- "trigger_class": "Contrast::Agent::Assess::Rule::Redos",
1195
- "trigger_method": "regexp_complexity_check"
1189
+ "source":"P0"
1196
1190
 
1197
1191
  }
1198
1192
  ]
@@ -205,6 +205,12 @@
205
205
  "method_visibility": "public",
206
206
  "method_name":"exists?",
207
207
  "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionpack/lib/action_dispatch/request/session.rb#L201"
208
+ }, {
209
+ "class_name":"ActionView::Template",
210
+ "instance_method":true,
211
+ "method_visibility": "private",
212
+ "method_name":"method_name",
213
+ "code": "https://github.com/rails/rails/blob/v6.0.3.4/actionview/lib/action_view/template.rb#L368"
208
214
  }
209
215
  ]
210
216
  }
data/ruby-agent.gemspec CHANGED
@@ -20,39 +20,77 @@ end
20
20
 
21
21
  # Add those dependencies required to develop or test the Agent
22
22
  def self.add_dev_dependencies spec
23
- spec.add_development_dependency 'amazing_print'
24
- spec.add_development_dependency 'benchmark-ips'
23
+ add_builders(spec)
24
+ add_debuggers(spec)
25
+ add_linters(spec)
26
+ add_specs(spec)
27
+ end
28
+
29
+ # Dependencies used to build the agent during development.
30
+ def self.add_builders spec
25
31
  spec.add_development_dependency 'bundler'
26
- spec.add_development_dependency 'climate_control' # mock ENV
27
- spec.add_development_dependency 'debase'
32
+ spec.add_development_dependency 'rake', '>= 12.3.3'
33
+ spec.add_development_dependency 'rake-compiler', '~> 0'
34
+ end
35
+
36
+ # Dependencies used for local debugging during development.
37
+ def self.add_debuggers spec
38
+ spec.add_development_dependency 'pry'
39
+ spec.add_development_dependency 'ruby-debug-ide'
40
+ end
41
+
42
+ # Dependencies used for framework testing.
43
+ def self.add_frameworks spec
44
+ spec.add_development_dependency 'rails', '>= 3'
45
+ spec.add_development_dependency 'sinatra', '>= 2'
46
+ end
47
+
48
+ # Dependencies used for linting prior to commit.
49
+ def self.add_linters spec
28
50
  spec.add_development_dependency 'debride'
29
- spec.add_development_dependency 'execjs'
30
- spec.add_development_dependency 'factory_bot'
31
- spec.add_development_dependency 'fake_ftp'
32
51
  spec.add_development_dependency 'fasterer'
33
52
  spec.add_development_dependency 'flay'
53
+ add_rubocop(spec)
54
+ end
55
+
56
+ # Dependencies used to run our current RSpec test suite.
57
+ def self.add_specs spec
58
+ add_coverage(spec)
59
+ add_frameworks(spec)
60
+ add_tested_gems(spec)
61
+
62
+ spec.add_development_dependency 'benchmark-ips'
63
+ spec.add_development_dependency 'climate_control' # mock ENV
64
+ spec.add_development_dependency 'factory_bot'
65
+ spec.add_development_dependency 'fake_ftp'
34
66
  spec.add_development_dependency 'openssl'
35
- spec.add_development_dependency 'parser', '~> 2.6'
36
- spec.add_development_dependency 'pry'
37
- spec.add_development_dependency 'rails', '>= 3'
38
- spec.add_development_dependency 'rake', '>= 12.3.3'
39
- spec.add_development_dependency 'rake-compiler', '~> 0'
40
67
  spec.add_development_dependency 'rspec', '~> 3.0'
41
68
  spec.add_development_dependency 'rspec-benchmark'
42
69
  spec.add_development_dependency 'rspec_junit_formatter', '0.3.0'
70
+ end
71
+
72
+ def self.add_coverage spec
73
+ spec.add_development_dependency 'codecov'
74
+ spec.add_development_dependency 'simplecov', '0.20.0'
75
+ end
76
+
77
+ # Dependencies used to run all of our Rubocop during the linting phase.
78
+ def self.add_rubocop spec
43
79
  spec.add_development_dependency 'rubocop', '1.6.1'
44
80
  spec.add_development_dependency 'rubocop-performance', '1.9.1'
45
81
  spec.add_development_dependency 'rubocop-rails', '2.9.1'
46
82
  spec.add_development_dependency 'rubocop-rake', '0.5.1'
47
83
  spec.add_development_dependency 'rubocop-rspec', '2.1.0'
48
- spec.add_development_dependency 'ruby-debug-ide'
49
- spec.add_development_dependency 'simplecov', '0.20.0'
50
- spec.add_development_dependency 'sinatra', '>= 2'
84
+ end
85
+
86
+ # Dependencies not mocked out during RSpec that we test real code of, beyond just frameworks.
87
+ def self.add_tested_gems spec
88
+ spec.add_development_dependency 'debase'
89
+ spec.add_development_dependency 'execjs'
51
90
  spec.add_development_dependency 'sqlite3', '1.3.9'
52
91
  spec.add_development_dependency 'therubyracer'
53
92
  spec.add_development_dependency 'tilt'
54
93
  spec.add_development_dependency 'xpath'
55
- spec.add_development_dependency 'yarjuf', '~> 2.0'
56
94
  end
57
95
 
58
96
  # Add those dependencies required to run the Agent in customer applications.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: contrast-agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.2
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - galen.palmer@contrastsecurity.com
@@ -13,10 +13,10 @@ authors:
13
13
  autorequire:
14
14
  bindir: exe
15
15
  cert_chain: []
16
- date: 2021-02-13 00:00:00.000000000 Z
16
+ date: 2021-02-25 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
- name: amazing_print
19
+ name: bundler
20
20
  requirement: !ruby/object:Gem::Requirement
21
21
  requirements:
22
22
  - - ">="
@@ -30,35 +30,35 @@ dependencies:
30
30
  - !ruby/object:Gem::Version
31
31
  version: '0'
32
32
  - !ruby/object:Gem::Dependency
33
- name: benchmark-ips
33
+ name: rake
34
34
  requirement: !ruby/object:Gem::Requirement
35
35
  requirements:
36
36
  - - ">="
37
37
  - !ruby/object:Gem::Version
38
- version: '0'
38
+ version: 12.3.3
39
39
  type: :development
40
40
  prerelease: false
41
41
  version_requirements: !ruby/object:Gem::Requirement
42
42
  requirements:
43
43
  - - ">="
44
44
  - !ruby/object:Gem::Version
45
- version: '0'
45
+ version: 12.3.3
46
46
  - !ruby/object:Gem::Dependency
47
- name: bundler
47
+ name: rake-compiler
48
48
  requirement: !ruby/object:Gem::Requirement
49
49
  requirements:
50
- - - ">="
50
+ - - "~>"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '0'
53
53
  type: :development
54
54
  prerelease: false
55
55
  version_requirements: !ruby/object:Gem::Requirement
56
56
  requirements:
57
- - - ">="
57
+ - - "~>"
58
58
  - !ruby/object:Gem::Version
59
59
  version: '0'
60
60
  - !ruby/object:Gem::Dependency
61
- name: climate_control
61
+ name: pry
62
62
  requirement: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - ">="
@@ -72,7 +72,7 @@ dependencies:
72
72
  - !ruby/object:Gem::Version
73
73
  version: '0'
74
74
  - !ruby/object:Gem::Dependency
75
- name: debase
75
+ name: ruby-debug-ide
76
76
  requirement: !ruby/object:Gem::Requirement
77
77
  requirements:
78
78
  - - ">="
@@ -100,7 +100,7 @@ dependencies:
100
100
  - !ruby/object:Gem::Version
101
101
  version: '0'
102
102
  - !ruby/object:Gem::Dependency
103
- name: execjs
103
+ name: fasterer
104
104
  requirement: !ruby/object:Gem::Requirement
105
105
  requirements:
106
106
  - - ">="
@@ -114,7 +114,7 @@ dependencies:
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  - !ruby/object:Gem::Dependency
117
- name: factory_bot
117
+ name: flay
118
118
  requirement: !ruby/object:Gem::Requirement
119
119
  requirements:
120
120
  - - ">="
@@ -128,77 +128,77 @@ dependencies:
128
128
  - !ruby/object:Gem::Version
129
129
  version: '0'
130
130
  - !ruby/object:Gem::Dependency
131
- name: fake_ftp
131
+ name: rubocop
132
132
  requirement: !ruby/object:Gem::Requirement
133
133
  requirements:
134
- - - ">="
134
+ - - '='
135
135
  - !ruby/object:Gem::Version
136
- version: '0'
136
+ version: 1.6.1
137
137
  type: :development
138
138
  prerelease: false
139
139
  version_requirements: !ruby/object:Gem::Requirement
140
140
  requirements:
141
- - - ">="
141
+ - - '='
142
142
  - !ruby/object:Gem::Version
143
- version: '0'
143
+ version: 1.6.1
144
144
  - !ruby/object:Gem::Dependency
145
- name: fasterer
145
+ name: rubocop-performance
146
146
  requirement: !ruby/object:Gem::Requirement
147
147
  requirements:
148
- - - ">="
148
+ - - '='
149
149
  - !ruby/object:Gem::Version
150
- version: '0'
150
+ version: 1.9.1
151
151
  type: :development
152
152
  prerelease: false
153
153
  version_requirements: !ruby/object:Gem::Requirement
154
154
  requirements:
155
- - - ">="
155
+ - - '='
156
156
  - !ruby/object:Gem::Version
157
- version: '0'
157
+ version: 1.9.1
158
158
  - !ruby/object:Gem::Dependency
159
- name: flay
159
+ name: rubocop-rails
160
160
  requirement: !ruby/object:Gem::Requirement
161
161
  requirements:
162
- - - ">="
162
+ - - '='
163
163
  - !ruby/object:Gem::Version
164
- version: '0'
164
+ version: 2.9.1
165
165
  type: :development
166
166
  prerelease: false
167
167
  version_requirements: !ruby/object:Gem::Requirement
168
168
  requirements:
169
- - - ">="
169
+ - - '='
170
170
  - !ruby/object:Gem::Version
171
- version: '0'
171
+ version: 2.9.1
172
172
  - !ruby/object:Gem::Dependency
173
- name: openssl
173
+ name: rubocop-rake
174
174
  requirement: !ruby/object:Gem::Requirement
175
175
  requirements:
176
- - - ">="
176
+ - - '='
177
177
  - !ruby/object:Gem::Version
178
- version: '0'
178
+ version: 0.5.1
179
179
  type: :development
180
180
  prerelease: false
181
181
  version_requirements: !ruby/object:Gem::Requirement
182
182
  requirements:
183
- - - ">="
183
+ - - '='
184
184
  - !ruby/object:Gem::Version
185
- version: '0'
185
+ version: 0.5.1
186
186
  - !ruby/object:Gem::Dependency
187
- name: parser
187
+ name: rubocop-rspec
188
188
  requirement: !ruby/object:Gem::Requirement
189
189
  requirements:
190
- - - "~>"
190
+ - - '='
191
191
  - !ruby/object:Gem::Version
192
- version: '2.6'
192
+ version: 2.1.0
193
193
  type: :development
194
194
  prerelease: false
195
195
  version_requirements: !ruby/object:Gem::Requirement
196
196
  requirements:
197
- - - "~>"
197
+ - - '='
198
198
  - !ruby/object:Gem::Version
199
- version: '2.6'
199
+ version: 2.1.0
200
200
  - !ruby/object:Gem::Dependency
201
- name: pry
201
+ name: codecov
202
202
  requirement: !ruby/object:Gem::Requirement
203
203
  requirements:
204
204
  - - ">="
@@ -212,63 +212,49 @@ dependencies:
212
212
  - !ruby/object:Gem::Version
213
213
  version: '0'
214
214
  - !ruby/object:Gem::Dependency
215
- name: rails
215
+ name: simplecov
216
216
  requirement: !ruby/object:Gem::Requirement
217
217
  requirements:
218
- - - ">="
218
+ - - '='
219
219
  - !ruby/object:Gem::Version
220
- version: '3'
220
+ version: 0.20.0
221
221
  type: :development
222
222
  prerelease: false
223
223
  version_requirements: !ruby/object:Gem::Requirement
224
224
  requirements:
225
- - - ">="
225
+ - - '='
226
226
  - !ruby/object:Gem::Version
227
- version: '3'
227
+ version: 0.20.0
228
228
  - !ruby/object:Gem::Dependency
229
- name: rake
229
+ name: rails
230
230
  requirement: !ruby/object:Gem::Requirement
231
231
  requirements:
232
232
  - - ">="
233
233
  - !ruby/object:Gem::Version
234
- version: 12.3.3
234
+ version: '3'
235
235
  type: :development
236
236
  prerelease: false
237
237
  version_requirements: !ruby/object:Gem::Requirement
238
238
  requirements:
239
239
  - - ">="
240
240
  - !ruby/object:Gem::Version
241
- version: 12.3.3
242
- - !ruby/object:Gem::Dependency
243
- name: rake-compiler
244
- requirement: !ruby/object:Gem::Requirement
245
- requirements:
246
- - - "~>"
247
- - !ruby/object:Gem::Version
248
- version: '0'
249
- type: :development
250
- prerelease: false
251
- version_requirements: !ruby/object:Gem::Requirement
252
- requirements:
253
- - - "~>"
254
- - !ruby/object:Gem::Version
255
- version: '0'
241
+ version: '3'
256
242
  - !ruby/object:Gem::Dependency
257
- name: rspec
243
+ name: sinatra
258
244
  requirement: !ruby/object:Gem::Requirement
259
245
  requirements:
260
- - - "~>"
246
+ - - ">="
261
247
  - !ruby/object:Gem::Version
262
- version: '3.0'
248
+ version: '2'
263
249
  type: :development
264
250
  prerelease: false
265
251
  version_requirements: !ruby/object:Gem::Requirement
266
252
  requirements:
267
- - - "~>"
253
+ - - ">="
268
254
  - !ruby/object:Gem::Version
269
- version: '3.0'
255
+ version: '2'
270
256
  - !ruby/object:Gem::Dependency
271
- name: rspec-benchmark
257
+ name: debase
272
258
  requirement: !ruby/object:Gem::Requirement
273
259
  requirements:
274
260
  - - ">="
@@ -282,91 +268,77 @@ dependencies:
282
268
  - !ruby/object:Gem::Version
283
269
  version: '0'
284
270
  - !ruby/object:Gem::Dependency
285
- name: rspec_junit_formatter
286
- requirement: !ruby/object:Gem::Requirement
287
- requirements:
288
- - - '='
289
- - !ruby/object:Gem::Version
290
- version: 0.3.0
291
- type: :development
292
- prerelease: false
293
- version_requirements: !ruby/object:Gem::Requirement
294
- requirements:
295
- - - '='
296
- - !ruby/object:Gem::Version
297
- version: 0.3.0
298
- - !ruby/object:Gem::Dependency
299
- name: rubocop
271
+ name: execjs
300
272
  requirement: !ruby/object:Gem::Requirement
301
273
  requirements:
302
- - - '='
274
+ - - ">="
303
275
  - !ruby/object:Gem::Version
304
- version: 1.6.1
276
+ version: '0'
305
277
  type: :development
306
278
  prerelease: false
307
279
  version_requirements: !ruby/object:Gem::Requirement
308
280
  requirements:
309
- - - '='
281
+ - - ">="
310
282
  - !ruby/object:Gem::Version
311
- version: 1.6.1
283
+ version: '0'
312
284
  - !ruby/object:Gem::Dependency
313
- name: rubocop-performance
285
+ name: sqlite3
314
286
  requirement: !ruby/object:Gem::Requirement
315
287
  requirements:
316
288
  - - '='
317
289
  - !ruby/object:Gem::Version
318
- version: 1.9.1
290
+ version: 1.3.9
319
291
  type: :development
320
292
  prerelease: false
321
293
  version_requirements: !ruby/object:Gem::Requirement
322
294
  requirements:
323
295
  - - '='
324
296
  - !ruby/object:Gem::Version
325
- version: 1.9.1
297
+ version: 1.3.9
326
298
  - !ruby/object:Gem::Dependency
327
- name: rubocop-rails
299
+ name: therubyracer
328
300
  requirement: !ruby/object:Gem::Requirement
329
301
  requirements:
330
- - - '='
302
+ - - ">="
331
303
  - !ruby/object:Gem::Version
332
- version: 2.9.1
304
+ version: '0'
333
305
  type: :development
334
306
  prerelease: false
335
307
  version_requirements: !ruby/object:Gem::Requirement
336
308
  requirements:
337
- - - '='
309
+ - - ">="
338
310
  - !ruby/object:Gem::Version
339
- version: 2.9.1
311
+ version: '0'
340
312
  - !ruby/object:Gem::Dependency
341
- name: rubocop-rake
313
+ name: tilt
342
314
  requirement: !ruby/object:Gem::Requirement
343
315
  requirements:
344
- - - '='
316
+ - - ">="
345
317
  - !ruby/object:Gem::Version
346
- version: 0.5.1
318
+ version: '0'
347
319
  type: :development
348
320
  prerelease: false
349
321
  version_requirements: !ruby/object:Gem::Requirement
350
322
  requirements:
351
- - - '='
323
+ - - ">="
352
324
  - !ruby/object:Gem::Version
353
- version: 0.5.1
325
+ version: '0'
354
326
  - !ruby/object:Gem::Dependency
355
- name: rubocop-rspec
327
+ name: xpath
356
328
  requirement: !ruby/object:Gem::Requirement
357
329
  requirements:
358
- - - '='
330
+ - - ">="
359
331
  - !ruby/object:Gem::Version
360
- version: 2.1.0
332
+ version: '0'
361
333
  type: :development
362
334
  prerelease: false
363
335
  version_requirements: !ruby/object:Gem::Requirement
364
336
  requirements:
365
- - - '='
337
+ - - ">="
366
338
  - !ruby/object:Gem::Version
367
- version: 2.1.0
339
+ version: '0'
368
340
  - !ruby/object:Gem::Dependency
369
- name: ruby-debug-ide
341
+ name: benchmark-ips
370
342
  requirement: !ruby/object:Gem::Requirement
371
343
  requirements:
372
344
  - - ">="
@@ -380,49 +352,49 @@ dependencies:
380
352
  - !ruby/object:Gem::Version
381
353
  version: '0'
382
354
  - !ruby/object:Gem::Dependency
383
- name: simplecov
355
+ name: climate_control
384
356
  requirement: !ruby/object:Gem::Requirement
385
357
  requirements:
386
- - - '='
358
+ - - ">="
387
359
  - !ruby/object:Gem::Version
388
- version: 0.20.0
360
+ version: '0'
389
361
  type: :development
390
362
  prerelease: false
391
363
  version_requirements: !ruby/object:Gem::Requirement
392
364
  requirements:
393
- - - '='
365
+ - - ">="
394
366
  - !ruby/object:Gem::Version
395
- version: 0.20.0
367
+ version: '0'
396
368
  - !ruby/object:Gem::Dependency
397
- name: sinatra
369
+ name: factory_bot
398
370
  requirement: !ruby/object:Gem::Requirement
399
371
  requirements:
400
372
  - - ">="
401
373
  - !ruby/object:Gem::Version
402
- version: '2'
374
+ version: '0'
403
375
  type: :development
404
376
  prerelease: false
405
377
  version_requirements: !ruby/object:Gem::Requirement
406
378
  requirements:
407
379
  - - ">="
408
380
  - !ruby/object:Gem::Version
409
- version: '2'
381
+ version: '0'
410
382
  - !ruby/object:Gem::Dependency
411
- name: sqlite3
383
+ name: fake_ftp
412
384
  requirement: !ruby/object:Gem::Requirement
413
385
  requirements:
414
- - - '='
386
+ - - ">="
415
387
  - !ruby/object:Gem::Version
416
- version: 1.3.9
388
+ version: '0'
417
389
  type: :development
418
390
  prerelease: false
419
391
  version_requirements: !ruby/object:Gem::Requirement
420
392
  requirements:
421
- - - '='
393
+ - - ">="
422
394
  - !ruby/object:Gem::Version
423
- version: 1.3.9
395
+ version: '0'
424
396
  - !ruby/object:Gem::Dependency
425
- name: therubyracer
397
+ name: openssl
426
398
  requirement: !ruby/object:Gem::Requirement
427
399
  requirements:
428
400
  - - ">="
@@ -436,21 +408,21 @@ dependencies:
436
408
  - !ruby/object:Gem::Version
437
409
  version: '0'
438
410
  - !ruby/object:Gem::Dependency
439
- name: tilt
411
+ name: rspec
440
412
  requirement: !ruby/object:Gem::Requirement
441
413
  requirements:
442
- - - ">="
414
+ - - "~>"
443
415
  - !ruby/object:Gem::Version
444
- version: '0'
416
+ version: '3.0'
445
417
  type: :development
446
418
  prerelease: false
447
419
  version_requirements: !ruby/object:Gem::Requirement
448
420
  requirements:
449
- - - ">="
421
+ - - "~>"
450
422
  - !ruby/object:Gem::Version
451
- version: '0'
423
+ version: '3.0'
452
424
  - !ruby/object:Gem::Dependency
453
- name: xpath
425
+ name: rspec-benchmark
454
426
  requirement: !ruby/object:Gem::Requirement
455
427
  requirements:
456
428
  - - ">="
@@ -464,19 +436,19 @@ dependencies:
464
436
  - !ruby/object:Gem::Version
465
437
  version: '0'
466
438
  - !ruby/object:Gem::Dependency
467
- name: yarjuf
439
+ name: rspec_junit_formatter
468
440
  requirement: !ruby/object:Gem::Requirement
469
441
  requirements:
470
- - - "~>"
442
+ - - '='
471
443
  - !ruby/object:Gem::Version
472
- version: '2.0'
444
+ version: 0.3.0
473
445
  type: :development
474
446
  prerelease: false
475
447
  version_requirements: !ruby/object:Gem::Requirement
476
448
  requirements:
477
- - - "~>"
449
+ - - '='
478
450
  - !ruby/object:Gem::Version
479
- version: '2.0'
451
+ version: 0.3.0
480
452
  - !ruby/object:Gem::Dependency
481
453
  name: ougai
482
454
  requirement: !ruby/object:Gem::Requirement
@@ -792,6 +764,7 @@ files:
792
764
  - lib/contrast/agent/assess/policy/trigger/xpath.rb
793
765
  - lib/contrast/agent/assess/policy/trigger_method.rb
794
766
  - lib/contrast/agent/assess/policy/trigger_node.rb
767
+ - lib/contrast/agent/assess/policy/trigger_validation/redos_validator.rb
795
768
  - lib/contrast/agent/assess/policy/trigger_validation/ssrf_validator.rb
796
769
  - lib/contrast/agent/assess/policy/trigger_validation/trigger_validation.rb
797
770
  - lib/contrast/agent/assess/policy/trigger_validation/xss_validator.rb
@@ -799,13 +772,10 @@ files:
799
772
  - lib/contrast/agent/assess/property/evented.rb
800
773
  - lib/contrast/agent/assess/property/tagged.rb
801
774
  - lib/contrast/agent/assess/property/updated.rb
802
- - lib/contrast/agent/assess/rule.rb
803
- - lib/contrast/agent/assess/rule/base.rb
804
775
  - lib/contrast/agent/assess/rule/provider.rb
805
776
  - lib/contrast/agent/assess/rule/provider/hardcoded_key.rb
806
777
  - lib/contrast/agent/assess/rule/provider/hardcoded_password.rb
807
778
  - lib/contrast/agent/assess/rule/provider/hardcoded_value_rule.rb
808
- - lib/contrast/agent/assess/rule/redos.rb
809
779
  - lib/contrast/agent/assess/tag.rb
810
780
  - lib/contrast/agent/assess/tracker.rb
811
781
  - lib/contrast/agent/at_exit_hook.rb
@@ -892,7 +862,9 @@ files:
892
862
  - lib/contrast/api/communication/unix_socket.rb
893
863
  - lib/contrast/api/decorators.rb
894
864
  - lib/contrast/api/decorators/address.rb
865
+ - lib/contrast/api/decorators/agent_startup.rb
895
866
  - lib/contrast/api/decorators/application_settings.rb
867
+ - lib/contrast/api/decorators/application_startup.rb
896
868
  - lib/contrast/api/decorators/application_update.rb
897
869
  - lib/contrast/api/decorators/http_request.rb
898
870
  - lib/contrast/api/decorators/input_analysis.rb
@@ -978,8 +950,6 @@ files:
978
950
  - lib/contrast/framework/rails/rewrite/active_record_named.rb
979
951
  - lib/contrast/framework/rails/rewrite/active_record_time_zone_inherited.rb
980
952
  - lib/contrast/framework/rails/support.rb
981
- - lib/contrast/framework/sinatra/patch/base.rb
982
- - lib/contrast/framework/sinatra/patch/support.rb
983
953
  - lib/contrast/framework/sinatra/support.rb
984
954
  - lib/contrast/funchook/funchook.rb
985
955
  - lib/contrast/logger/application.rb
@@ -1004,7 +974,6 @@ files:
1004
974
  - lib/contrast/utils/object_share.rb
1005
975
  - lib/contrast/utils/os.rb
1006
976
  - lib/contrast/utils/preflight_util.rb
1007
- - lib/contrast/utils/prevent_serialization.rb
1008
977
  - lib/contrast/utils/resource_loader.rb
1009
978
  - lib/contrast/utils/ruby_ast_rewriter.rb
1010
979
  - lib/contrast/utils/sha256_builder.rb