sqreen 1.19.0-java → 1.20.1-java

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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +22 -0
  3. data/lib/sqreen/agent_message.rb +20 -0
  4. data/lib/sqreen/aggregated_metric.rb +25 -0
  5. data/lib/sqreen/ca.crt +24 -0
  6. data/lib/sqreen/configuration.rb +10 -4
  7. data/lib/sqreen/deliveries/batch.rb +4 -1
  8. data/lib/sqreen/deliveries/simple.rb +4 -0
  9. data/lib/sqreen/endpoint_testing.rb +184 -0
  10. data/lib/sqreen/event.rb +7 -5
  11. data/lib/sqreen/events/attack.rb +23 -18
  12. data/lib/sqreen/events/remote_exception.rb +0 -22
  13. data/lib/sqreen/events/request_record.rb +15 -70
  14. data/lib/sqreen/frameworks/request_recorder.rb +13 -2
  15. data/lib/sqreen/kit/signals/specialized/aggregated_metric.rb +72 -0
  16. data/lib/sqreen/kit/signals/specialized/attack.rb +57 -0
  17. data/lib/sqreen/kit/signals/specialized/binning_metric.rb +76 -0
  18. data/lib/sqreen/kit/signals/specialized/http_trace.rb +26 -0
  19. data/lib/sqreen/kit/signals/specialized/sdk_track_call.rb +50 -0
  20. data/lib/sqreen/kit/signals/specialized/sqreen_exception.rb +57 -0
  21. data/lib/sqreen/legacy/old_event_submission_strategy.rb +221 -0
  22. data/lib/sqreen/legacy/waf_redactions.rb +49 -0
  23. data/lib/sqreen/log/loggable.rb +1 -1
  24. data/lib/sqreen/metrics/base.rb +3 -0
  25. data/lib/sqreen/metrics_store.rb +22 -12
  26. data/lib/sqreen/performance_notifications/binned_metrics.rb +8 -2
  27. data/lib/sqreen/rules.rb +4 -2
  28. data/lib/sqreen/rules/not_found_cb.rb +2 -0
  29. data/lib/sqreen/rules/rule_cb.rb +2 -0
  30. data/lib/sqreen/rules/waf_cb.rb +13 -10
  31. data/lib/sqreen/runner.rb +75 -8
  32. data/lib/sqreen/sensitive_data_redactor.rb +19 -31
  33. data/lib/sqreen/session.rb +51 -43
  34. data/lib/sqreen/signals/conversions.rb +283 -0
  35. data/lib/sqreen/signals/http_trace_redaction.rb +111 -0
  36. data/lib/sqreen/signals/signals_submission_strategy.rb +78 -0
  37. data/lib/sqreen/version.rb +1 -1
  38. data/lib/sqreen/weave/legacy/instrumentation.rb +7 -7
  39. metadata +50 -6
  40. data/lib/sqreen/backport.rb +0 -9
  41. data/lib/sqreen/backport/clock_gettime.rb +0 -74
  42. data/lib/sqreen/backport/original_name.rb +0 -88
@@ -4,5 +4,5 @@
4
4
  # Please refer to our terms for more information: https://www.sqreen.com/terms.html
5
5
 
6
6
  module Sqreen
7
- VERSION = '1.19.0'.freeze
7
+ VERSION = '1.20.1'.freeze
8
8
  end
@@ -269,7 +269,7 @@ class Sqreen::Weave::Legacy::Instrumentation
269
269
  hook.add do
270
270
  if callback.pre?
271
271
  before(rule, rank: priority, mandatory: !callback.overtimeable, flow: block, ignore: ignore) do |call, b|
272
- return unless Thread.current[:sqreen_http_request]
272
+ next unless Thread.current[:sqreen_http_request]
273
273
 
274
274
  i = call.instance
275
275
  a = call.args
@@ -296,13 +296,13 @@ class Sqreen::Weave::Legacy::Instrumentation
296
296
  when :raise, 'raise'
297
297
  throw(b, b.raise(ret[:exception])) if ret.key?(:exception)
298
298
  throw(b, b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required.")))
299
- end unless ret.nil?
299
+ end unless ret.nil? || !ret.is_a?(Hash)
300
300
  end
301
301
  end
302
302
 
303
303
  if callback.post?
304
304
  after(rule, rank: -priority, mandatory: !callback.overtimeable, flow: block, ignore: ignore) do |call, b|
305
- return unless Thread.current[:sqreen_http_request]
305
+ next unless Thread.current[:sqreen_http_request]
306
306
 
307
307
  i = call.instance
308
308
  v = call.returned
@@ -328,13 +328,13 @@ class Sqreen::Weave::Legacy::Instrumentation
328
328
  when :raise, 'raise'
329
329
  throw(b, b.raise(ret[:exception])) if ret.key?(:exception)
330
330
  throw(b, b.raise(Sqreen::AttackBlocked.new("Sqreen blocked a security threat (type: #{callback.rule_name}). No action is required.")))
331
- end unless ret.nil?
331
+ end unless ret.nil? || !ret.is_a?(Hash)
332
332
  end
333
333
  end
334
334
 
335
335
  if callback.failing?
336
336
  raised(rule, rank: priority, mandatory: !callback.overtimeable, flow: block, ignore: ignore) do |call, b|
337
- return unless Thread.current[:sqreen_http_request]
337
+ next unless Thread.current[:sqreen_http_request]
338
338
 
339
339
  i = call.instance
340
340
  e = call.raised
@@ -354,7 +354,7 @@ class Sqreen::Weave::Legacy::Instrumentation
354
354
  end
355
355
  Sqreen::Weave.logger.debug { "#{rule} klass=#{callback.klass} method=#{callback.method} when=#failing instance=#{i} => return=#{ret.inspect}" }
356
356
 
357
- raise e if ret.nil?
357
+ throw(b, b.raise(e)) if ret.nil? || !ret.is_a?(Hash)
358
358
 
359
359
  case ret[:status]
360
360
  when :override, 'override'
@@ -368,7 +368,7 @@ class Sqreen::Weave::Legacy::Instrumentation
368
368
  throw(b, b.raise(e))
369
369
  else
370
370
  throw(b, b.raise(e))
371
- end unless ret.nil?
371
+ end unless ret.nil? || !ret.is_a?(Hash)
372
372
  end
373
373
  end
374
374
  end.install
metadata CHANGED
@@ -1,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sqreen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.19.0
4
+ version: 1.20.1
5
5
  platform: java
6
6
  authors:
7
7
  - Sqreen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-05-29 00:00:00.000000000 Z
11
+ date: 2020-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 0.1.0
19
+ name: sqreen-backport
20
+ prerelease: false
21
+ type: :runtime
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: 0.2.1
33
+ name: sqreen-kit
34
+ prerelease: false
35
+ type: :runtime
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.2.1
13
41
  - !ruby/object:Gem::Dependency
14
42
  requirement: !ruby/object:Gem::Requirement
15
43
  requirements:
@@ -65,11 +93,10 @@ files:
65
93
  - lib/sqreen/actions/user_action_class.rb
66
94
  - lib/sqreen/actions/users_index.rb
67
95
  - lib/sqreen/agent.rb
96
+ - lib/sqreen/agent_message.rb
97
+ - lib/sqreen/aggregated_metric.rb
68
98
  - lib/sqreen/attack_blocked.rb
69
99
  - lib/sqreen/attack_detected.html
70
- - lib/sqreen/backport.rb
71
- - lib/sqreen/backport/clock_gettime.rb
72
- - lib/sqreen/backport/original_name.rb
73
100
  - lib/sqreen/binding_accessor.rb
74
101
  - lib/sqreen/binding_accessor/path_elem.rb
75
102
  - lib/sqreen/binding_accessor/transforms.rb
@@ -96,6 +123,7 @@ files:
96
123
  - lib/sqreen/dependency/sentry.rb
97
124
  - lib/sqreen/dependency/sinatra.rb
98
125
  - lib/sqreen/encoding_sanitizer.rb
126
+ - lib/sqreen/endpoint_testing.rb
99
127
  - lib/sqreen/error_handling_middleware.rb
100
128
  - lib/sqreen/event.rb
101
129
  - lib/sqreen/events/attack.rb
@@ -129,8 +157,16 @@ files:
129
157
  - lib/sqreen/js/mini_racer_adapter.rb
130
158
  - lib/sqreen/js/mini_racer_executable_js.rb
131
159
  - lib/sqreen/js/thread_local_exec_js_runnable.rb
160
+ - lib/sqreen/kit/signals/specialized/aggregated_metric.rb
161
+ - lib/sqreen/kit/signals/specialized/attack.rb
162
+ - lib/sqreen/kit/signals/specialized/binning_metric.rb
163
+ - lib/sqreen/kit/signals/specialized/http_trace.rb
164
+ - lib/sqreen/kit/signals/specialized/sdk_track_call.rb
165
+ - lib/sqreen/kit/signals/specialized/sqreen_exception.rb
132
166
  - lib/sqreen/legacy.rb
133
167
  - lib/sqreen/legacy/instrumentation.rb
168
+ - lib/sqreen/legacy/old_event_submission_strategy.rb
169
+ - lib/sqreen/legacy/waf_redactions.rb
134
170
  - lib/sqreen/log.rb
135
171
  - lib/sqreen/log/loggable.rb
136
172
  - lib/sqreen/logger.rb
@@ -201,6 +237,9 @@ files:
201
237
  - lib/sqreen/shared_storage.rb
202
238
  - lib/sqreen/shared_storage23.rb
203
239
  - lib/sqreen/shrink_wrap.rb
240
+ - lib/sqreen/signals/conversions.rb
241
+ - lib/sqreen/signals/http_trace_redaction.rb
242
+ - lib/sqreen/signals/signals_submission_strategy.rb
204
243
  - lib/sqreen/signature_verifier.rb
205
244
  - lib/sqreen/sinatra_middleware.rb
206
245
  - lib/sqreen/sqreen_signed_verifier.rb
@@ -232,7 +271,12 @@ files:
232
271
  homepage: https://www.sqreen.com/
233
272
  licenses:
234
273
  - Sqreen
235
- metadata: {}
274
+ metadata:
275
+ homepage_uri: https://sqreen.com
276
+ documentation_uri: https://docs.sqreen.com/
277
+ changelog_uri: https://docs.sqreen.com/ruby/release-notes/
278
+ source_code_uri: https://github.com/sqreen/ruby-agent
279
+ bug_tracker_uri: https://github.com/sqreen/ruby-agent/issues
236
280
  post_install_message:
237
281
  rdoc_options: []
238
282
  require_paths:
@@ -1,9 +0,0 @@
1
- # typed: strong
2
-
3
- # Copyright (c) 2015 Sqreen. All Rights Reserved.
4
- # Please refer to our terms for more information: https://www.sqreen.com/terms.html
5
-
6
- module Sqreen
7
- module Backport
8
- end
9
- end
@@ -1,74 +0,0 @@
1
- # typed: ignore
2
-
3
- # Copyright (c) 2015 Sqreen. All Rights Reserved.
4
- # Please refer to our terms for more information: https://www.sqreen.com/terms.html
5
-
6
- require 'sqreen/backport'
7
-
8
- module Sqreen
9
- module Backport
10
- module ClockGettime
11
- class << self
12
- def supported?
13
- Process.respond_to?(:clock_gettime)
14
- end
15
- end
16
-
17
- unless supported?
18
- require 'ffi'
19
-
20
- class Timespec < FFI::Struct
21
- layout :tv_sec => :time_t, :tv_nsec => :long
22
- end
23
-
24
- module LibC
25
- extend FFI::Library
26
- ffi_lib FFI::Library::LIBC
27
-
28
- # TODO: FFI::NotFoundError
29
-
30
- if RUBY_PLATFORM =~ /darwin/
31
- attach_function :mach_absolute_time, [], :uint64
32
- end
33
-
34
- attach_function :clock_gettime, [:int, :pointer], :int
35
- end
36
-
37
- module Constants
38
- case RUBY_PLATFORM
39
- when /darwin/
40
- CLOCK_REALTIME = 0
41
- CLOCK_MONOTONIC = 6
42
- CLOCK_PROCESS_CPUTIME_ID = 12
43
- CLOCK_THERAD_CPUTIME_ID = 16
44
- when /linux/
45
- CLOCK_REALTIME = 0
46
- CLOCK_MONOTONIC = 1
47
- CLOCK_PROCESS_CPUTIME_ID = 2
48
- CLOCK_THREAD_CPUTIME_ID = 3
49
- end
50
- end
51
-
52
- def clock_gettime(clock_id, unit = :float_second)
53
- unless unit == :float_second
54
- raise "Process.clock_gettime: unsupported unit #{unit.inspect}"
55
- end
56
-
57
- t = Timespec.new
58
- ret = LibC.clock_gettime(clock_id, t.pointer)
59
-
60
- raise SystemCallError, "Errno #{FFI.errno}" if ret == -1
61
-
62
- t[:tv_sec].to_f + t[:tv_nsec].to_f / 1_000_000_000
63
- end
64
- end
65
- end
66
- end
67
- end
68
-
69
- unless Sqreen::Backport::ClockGettime.supported?
70
- Process.instance_eval do
71
- extend Sqreen::Backport::ClockGettime
72
- include Sqreen::Backport::ClockGettime::Constants
73
- end
74
- end
@@ -1,88 +0,0 @@
1
- # typed: false
2
-
3
- # Copyright (c) 2015 Sqreen. All Rights Reserved.
4
- # Please refer to our terms for more information: https://www.sqreen.com/terms.html
5
-
6
- module Sqreen
7
- module Backport
8
- module OriginalName
9
- HAS_UNBOUND_METHOD_ORIGINAL_NAME = ::UnboundMethod.instance_methods(false).include?(:original_name)
10
- HAS_METHOD_ORIGINAL_NAME = ::Method.instance_methods(false).include?(:original_name)
11
-
12
- def original_name
13
- self.class.get_original_name(owner, original_name_key) || self.original_name = name
14
- end
15
-
16
- private
17
-
18
- def original_name=(name)
19
- self.class.set_original_name(owner, original_name_key, name)
20
- end
21
-
22
- def original_name_key
23
- return hash if is_a?(::UnboundMethod)
24
-
25
- owner.instance_method(name).hash
26
- end
27
-
28
- class << self
29
- def supported?
30
- !::Kernel.const_defined?(:JRUBY_VERSION) && HAS_UNBOUND_METHOD_ORIGINAL_NAME && HAS_METHOD_ORIGINAL_NAME
31
- end
32
-
33
- def included(klass)
34
- klass.extend(ClassMethods)
35
- end
36
-
37
- def prepended(klass)
38
- klass.extend(ClassMethods)
39
- end
40
- end
41
-
42
- class Store < ::Hash; end
43
-
44
- module ClassMethods
45
- def original_names(owner)
46
- owner.instance_eval { @__sqreen_backport_original_names ||= Store.new }
47
- end
48
-
49
- def get_original_name(owner, key)
50
- original_names(owner)[key]
51
- end
52
-
53
- def set_original_name(owner, key, name)
54
- original_names(owner)[key] ||= name
55
- end
56
- end
57
- end
58
- end
59
- end
60
-
61
- class UnboundMethod
62
- if Sqreen::Backport::OriginalName::HAS_UNBOUND_METHOD_ORIGINAL_NAME
63
- prepend Sqreen::Backport::OriginalName
64
- else
65
- include Sqreen::Backport::OriginalName
66
- end
67
- end unless Sqreen::Backport::OriginalName.supported?
68
-
69
- class Method
70
- if Sqreen::Backport::OriginalName::HAS_METHOD_ORIGINAL_NAME
71
- prepend Sqreen::Backport::OriginalName
72
- else
73
- include Sqreen::Backport::OriginalName
74
- end
75
- end unless Sqreen::Backport::OriginalName.supported?
76
-
77
- class Module
78
- alias_method(:alias_method_without_original_name, :alias_method)
79
-
80
- def alias_method_with_original_name(newname, oldname)
81
- alias_method_without_original_name(newname, oldname).tap do
82
- instance_method(newname).send(:original_name=, :"#{oldname}")
83
- end
84
- end
85
-
86
- alias_method_with_original_name(:alias_method_without_original_name, :alias_method)
87
- alias_method_with_original_name(:alias_method, :alias_method_with_original_name)
88
- end unless Sqreen::Backport::OriginalName.supported?