contrast-agent 7.5.0 → 7.6.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.
- checksums.yaml +4 -4
- data/ext/cs__common/cs__common.c +5 -5
- data/ext/cs__contrast_patch/cs__contrast_patch.c +2 -1
- data/ext/cs__scope/cs__scope.c +6 -5
- data/lib/contrast/agent/assess/events/event_data.rb +11 -2
- data/lib/contrast/agent/assess/finalizers/freeze.rb +1 -0
- data/lib/contrast/agent/assess/finalizers/hash.rb +7 -0
- data/lib/contrast/agent/assess/policy/patcher.rb +2 -0
- data/lib/contrast/agent/assess/policy/policy.rb +4 -0
- data/lib/contrast/agent/assess/policy/policy_node.rb +29 -7
- data/lib/contrast/agent/assess/policy/preshift.rb +34 -1
- data/lib/contrast/agent/assess/policy/propagation_method.rb +16 -1
- data/lib/contrast/agent/assess/policy/propagation_node.rb +40 -1
- data/lib/contrast/agent/assess/policy/propagator/append.rb +5 -0
- data/lib/contrast/agent/assess/policy/propagator/base.rb +10 -0
- data/lib/contrast/agent/assess/policy/propagator/buffer.rb +6 -0
- data/lib/contrast/agent/assess/policy/propagator/center.rb +14 -0
- data/lib/contrast/agent/assess/policy/propagator/custom.rb +6 -0
- data/lib/contrast/agent/assess/policy/propagator/database_write.rb +14 -0
- data/lib/contrast/agent/assess/policy/propagator/insert.rb +6 -0
- data/lib/contrast/agent/assess/policy/propagator/match_data.rb +38 -0
- data/lib/contrast/agent/assess/policy/propagator/next.rb +6 -0
- data/lib/contrast/agent/assess/policy/propagator/prepend.rb +5 -0
- data/lib/contrast/agent/assess/policy/propagator/remove.rb +4 -0
- data/lib/contrast/agent/assess/policy/propagator/replace.rb +5 -0
- data/lib/contrast/agent/assess/policy/propagator/reverse.rb +5 -0
- data/lib/contrast/agent/assess/policy/propagator/select.rb +30 -0
- data/lib/contrast/agent/assess/policy/propagator/splat.rb +10 -0
- data/lib/contrast/agent/assess/policy/source_node.rb +5 -1
- data/lib/contrast/agent/assess/policy/source_validation/cross_site_validator.rb +4 -0
- data/lib/contrast/agent/assess/policy/trigger/reflected_xss.rb +16 -0
- data/lib/contrast/agent/assess/policy/trigger/xpath.rb +19 -0
- data/lib/contrast/agent/assess/policy/trigger_method.rb +8 -1
- data/lib/contrast/agent/assess/policy/trigger_node.rb +11 -1
- data/lib/contrast/agent/assess/policy/trigger_validation/redos_validator.rb +4 -0
- data/lib/contrast/agent/assess/policy/trigger_validation/ssrf_validator.rb +6 -0
- data/lib/contrast/agent/assess/policy/trigger_validation/xss_validator.rb +6 -0
- data/lib/contrast/agent/assess/rule/response/base_rule.rb +2 -1
- data/lib/contrast/agent/hooks/at_exit_hook.rb +1 -0
- data/lib/contrast/agent/reporting/reporting_utilities/audit.rb +1 -1
- data/lib/contrast/agent/reporting/reporting_utilities/reporter_client.rb +35 -7
- data/lib/contrast/agent/reporting/reporting_utilities/reporter_client_utils.rb +8 -2
- data/lib/contrast/agent/reporting/reporting_utilities/reporting_storage.rb +1 -6
- data/lib/contrast/agent/reporting/reporting_utilities/response_handler.rb +4 -3
- data/lib/contrast/agent/reporting/reporting_utilities/response_handler_utils.rb +22 -12
- data/lib/contrast/agent/request/request.rb +1 -1
- data/lib/contrast/agent/request/request_handler.rb +1 -0
- data/lib/contrast/agent/version.rb +1 -1
- data/lib/contrast/configuration.rb +1 -1
- data/lib/contrast/utils/hash_digest.rb +0 -14
- data/lib/contrast/utils/hash_digest_extend.rb +16 -5
- data/lib/contrast/utils/json.rb +1 -1
- data/lib/contrast/utils/middleware_utils.rb +9 -0
- data/lib/contrast/utils/routes_sent.rb +3 -2
- data/lib/contrast.rb +2 -2
- data/resources/assess/policy.json +50 -1
- data/ruby-agent.gemspec +13 -13
- metadata +24 -23
@@ -14,7 +14,6 @@ module Contrast
|
|
14
14
|
include Contrast::Agent::Reporting::NgResponseExtractor
|
15
15
|
include Contrast::Agent::Reporting::ResponseExtractor
|
16
16
|
|
17
|
-
ANALYZE_WHEN = %w[200 204].cs__freeze
|
18
17
|
ERROR_CODES = {
|
19
18
|
message_not_sent: '400',
|
20
19
|
access_forbidden: '401',
|
@@ -68,7 +67,7 @@ module Contrast
|
|
68
67
|
|
69
68
|
# check if response code is valid before analyze it
|
70
69
|
#
|
71
|
-
# @param response [Net::
|
70
|
+
# @param response [Net::HTTPResponse, nil]
|
72
71
|
# @return [Boolean]
|
73
72
|
def analyze_response? response
|
74
73
|
# Code descriptions:
|
@@ -112,13 +111,12 @@ module Contrast
|
|
112
111
|
# used for in observed routes message.
|
113
112
|
return false unless response && (response_code = response&.code)
|
114
113
|
|
115
|
-
# We still need to check the response code even if we are not analyzing it, since the 304 code does not
|
116
|
-
# contain settings to be extracted but we still need to know for the diagnostics. Do not move this bellow
|
117
|
-
# the ANALYZE_WHEN check.
|
118
114
|
@_last_response_code = response_code
|
119
|
-
return true if
|
115
|
+
return true if response_code == '200'
|
116
|
+
return false if response_code == '204'
|
117
|
+
return false if response_code == '304'
|
120
118
|
|
121
|
-
handle_error(response) if ERROR_CODES.value?(response_code)
|
119
|
+
handle_error(response) if ERROR_CODES.value?(response_code) && response&.body
|
122
120
|
# There was error, so analyze the Error and nothing more.
|
123
121
|
false
|
124
122
|
end
|
@@ -126,7 +124,7 @@ module Contrast
|
|
126
124
|
# Analyze the headers of the response code. They have information about the
|
127
125
|
# retry timeout and some response bodies contains error messages.
|
128
126
|
#
|
129
|
-
# @param response [
|
127
|
+
# @param response [Net::HTTPResponse]
|
130
128
|
# Integer
|
131
129
|
# @param message [String] Message to log.
|
132
130
|
# @param mode [Symbol, nil]
|
@@ -142,6 +140,8 @@ module Contrast
|
|
142
140
|
error_message: error_message || 'none',
|
143
141
|
auth_error: auth_error || 'none')
|
144
142
|
end
|
143
|
+
return unless rejected_by_ts?(response)
|
144
|
+
|
145
145
|
suspend_reporting(message, ready_after, error_message) if mode == @_mode.resending
|
146
146
|
return unless mode == @_mode.disabled
|
147
147
|
|
@@ -152,7 +152,7 @@ module Contrast
|
|
152
152
|
|
153
153
|
# Extract what we've received.
|
154
154
|
#
|
155
|
-
# @param response [Net::
|
155
|
+
# @param response [Net::HTTPResponse, nil]
|
156
156
|
# @return [Array<String, Integer>] all collected error info.
|
157
157
|
def extract_response_info response
|
158
158
|
# Extract what we got from the response:
|
@@ -164,11 +164,21 @@ module Contrast
|
|
164
164
|
[ready_after.to_i, error_message, auth_error]
|
165
165
|
end
|
166
166
|
|
167
|
+
# We only want to shut down the agent if TeamServer actually told us to, not because of a network error
|
168
|
+
#
|
169
|
+
# @param [Net::HTTPResponse]
|
170
|
+
# @return Boolean
|
171
|
+
def rejected_by_ts? response
|
172
|
+
response_body = response&.body || Contrast::Utils::ObjectShare::EMPTY_STRING
|
173
|
+
response_data = Contrast::Utils::Json.parse(response_body, deep_symbolize: true)
|
174
|
+
response_data.key?(:success) && response_data[:success] == false
|
175
|
+
end
|
176
|
+
|
167
177
|
# Extract Last-Modified header from ServerSettings response.
|
168
178
|
# The new GET server settings endpoint have different payload.
|
169
179
|
# Extract the last modify headers with last update form TS.
|
170
180
|
#
|
171
|
-
# @param response [Net::
|
181
|
+
# @param response [Net::HTTPResponse, nil]
|
172
182
|
# @param event [Contrast::Agent::Reporting::ServerSettings,
|
173
183
|
# Contrast::Agent::Reporting::ApplicationSettings, nil]
|
174
184
|
# @return last_modified[integer, nil] Time since last server update
|
@@ -250,12 +260,12 @@ module Contrast
|
|
250
260
|
#
|
251
261
|
# This method works to extract away these differences.
|
252
262
|
#
|
253
|
-
# @param response [Net::
|
263
|
+
# @param response [Net::HTTPResponse, nil]
|
254
264
|
# @param event [Contrast::Agent::Reporting::ReportingEvent] The event sent to TeamServer.
|
255
265
|
# @return response [Contrast::Agent::Reporting::Response]
|
256
266
|
def convert_response response, event
|
257
267
|
response_body = response&.body
|
258
|
-
return unless response_body
|
268
|
+
return unless response_body && !response_body.blank?
|
259
269
|
|
260
270
|
response_data = Contrast::Utils::Json.parse(response_body, deep_symbolize: true)
|
261
271
|
return unless response_data.cs__is_a?(Hash)
|
@@ -180,7 +180,7 @@ module Contrast
|
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
183
|
-
# returns or
|
183
|
+
# returns or generates the hash checksum for the request
|
184
184
|
#
|
185
185
|
# @return @_hash_id [String] Contrast::Utils::HashDigest generated string checksum
|
186
186
|
def hash_id
|
@@ -26,6 +26,7 @@ module Contrast
|
|
26
26
|
#
|
27
27
|
def report_observed_route
|
28
28
|
return unless (reporter = Contrast::Agent.reporter)
|
29
|
+
return if Contrast::Agent::REQUEST_TRACKER.current&.response&.response_code == 404
|
29
30
|
|
30
31
|
reporter.send_event(context.observed_route) if Contrast::ROUTES_SENT.sendable?(context.observed_route)
|
31
32
|
end
|
@@ -124,7 +124,7 @@ module Contrast
|
|
124
124
|
|
125
125
|
# @return [Contrast::Components::Assess::Interface]
|
126
126
|
def assess
|
127
|
-
@assess ||= Contrast::Components::
|
127
|
+
@assess ||= Contrast::Components::Settings::Interface.new # rubocop:disable Naming/MemoizedInstanceVariableName
|
128
128
|
end
|
129
129
|
|
130
130
|
# @return [Contrast::Components::Inventory::Interface]
|
@@ -15,7 +15,6 @@ module Contrast
|
|
15
15
|
class HashDigest < Digest::Class
|
16
16
|
include Digest::Instance
|
17
17
|
extend Contrast::Utils::HashDigestExtend
|
18
|
-
CONTENT_LENGTH_HEADER = 'Content-Length'
|
19
18
|
CHARS = %w[a b c d e f g].cs__freeze
|
20
19
|
CRYPTO_RULES = %w[crypto-bad-ciphers crypto-bad-mac].cs__freeze
|
21
20
|
CONFIG_PATH_KEY = 'path'
|
@@ -34,8 +33,6 @@ module Contrast
|
|
34
33
|
#
|
35
34
|
# @param finding [Contrast::Agent::Reporting::Finding] finding to be reported
|
36
35
|
# @param request [Contrast::Agent::Request] our wrapper around the Rack::Request.
|
37
|
-
# @return checksum [Integer, nil] returns nil if there is no request context or tracking
|
38
|
-
# is disabled.
|
39
36
|
def update_on_request finding, request
|
40
37
|
context = Contrast::Agent::REQUEST_TRACKER.current
|
41
38
|
return unless context || ::Contrast::ASSESS.non_request_tracking?
|
@@ -58,7 +55,6 @@ module Contrast
|
|
58
55
|
# Update to CRC checksum the event source name and source type.
|
59
56
|
#
|
60
57
|
# @param events [Array<Contrast::Agent::Reporting::FindingEvent>]
|
61
|
-
# @return checksum [Integer, nil] returns nil if there is no events
|
62
58
|
def update_on_sources events
|
63
59
|
events.each do |event|
|
64
60
|
event.event_sources.each do |source|
|
@@ -68,22 +64,12 @@ module Contrast
|
|
68
64
|
end
|
69
65
|
end
|
70
66
|
|
71
|
-
# This method converts and integer value for length into a string value
|
72
|
-
# that we can hash on, based on the logarithmic value of the length, and
|
73
|
-
# updates the current hash with that value.
|
74
|
-
# @param chr [Numeric] the length to translate
|
75
|
-
def update_on_content_length chr
|
76
|
-
update(CHARS[Math.log10(chr.to_s.length).to_i] || CHARS[-1])
|
77
|
-
end
|
78
|
-
|
79
67
|
# Converts given string to CRC checksum. CRC32 checksum ensures that If error
|
80
68
|
# of a single bit occurs, the CRC checksum will fail, regardless of any other
|
81
69
|
# property of the transmitted data, including its length. Called several times
|
82
70
|
# with previous CRC to recalculate the new output.
|
83
71
|
#
|
84
72
|
# @param str [String]
|
85
|
-
# @return @crc32 [Integer, nil] updated value of crc 32 bit integer checksum or
|
86
|
-
# nil if passed string is nil or empty
|
87
73
|
def update str
|
88
74
|
return unless str
|
89
75
|
|
@@ -17,7 +17,7 @@ module Contrast
|
|
17
17
|
# param names and content length to CRC checksum and returns string representation
|
18
18
|
#
|
19
19
|
# @param request [Contrast::Agent::Request] our wrapper around the Rack::Request.
|
20
|
-
# @return
|
20
|
+
# @return [String] String representation of CRC32 checksum
|
21
21
|
def generate_request_hash request
|
22
22
|
hash = new
|
23
23
|
hash.update(request.request_method)
|
@@ -25,8 +25,6 @@ module Contrast
|
|
25
25
|
request.parameters.each_key do |name|
|
26
26
|
hash.update(name)
|
27
27
|
end
|
28
|
-
cl = request.headers[Contrast::Utils::HashDigest::CONTENT_LENGTH_HEADER]
|
29
|
-
hash.update_on_content_length(cl) if cl
|
30
28
|
hash.finish
|
31
29
|
end
|
32
30
|
|
@@ -37,7 +35,7 @@ module Contrast
|
|
37
35
|
# @param finding [Contrast::Agent::Reporting::Finding] to be reported
|
38
36
|
# @param source [Object] the source of the Trigger Event
|
39
37
|
# @param request [Contrast::Agent::Request] our wrapper around the Rack::Request.
|
40
|
-
# @return
|
38
|
+
# @return [String] String representation of CRC32 checksum
|
41
39
|
def generate_event_hash finding, source, request
|
42
40
|
return generate_dataflow_hash(finding, request) if finding.events.length.to_i > 1
|
43
41
|
|
@@ -51,7 +49,7 @@ module Contrast
|
|
51
49
|
# to CRC32 checksum and returns string representation to be appended to Contrast::Api::Dtm::Finding
|
52
50
|
#
|
53
51
|
# @param finding [Contrast::Agent::Reporting::Finding] to be reported
|
54
|
-
# @return
|
52
|
+
# @return [String] String representation of CRC32 checksum.
|
55
53
|
def generate_config_hash finding
|
56
54
|
hash = new
|
57
55
|
hash.update(finding.rule_id)
|
@@ -80,6 +78,19 @@ module Contrast
|
|
80
78
|
hash.finish
|
81
79
|
end
|
82
80
|
|
81
|
+
# Generates the hash checksum for response scanning. Converts the rule_id and request to CRC32 checksum and
|
82
|
+
# returns string representation.
|
83
|
+
#
|
84
|
+
# @param finding [Contrast::Agent::Reporting::Finding] to be reported
|
85
|
+
# # @param request [Contrast::Agent::Request]
|
86
|
+
# @return [String] String representation of CRC32 checksum.
|
87
|
+
def generate_response_hash finding, request
|
88
|
+
hash = new
|
89
|
+
hash.update(finding.rule_id)
|
90
|
+
hash.update_on_request(finding, request)
|
91
|
+
hash.finish
|
92
|
+
end
|
93
|
+
|
83
94
|
private
|
84
95
|
|
85
96
|
# Generates the hash checksum for crypto(crypto-bad-ciphers, crypto-bad-mac) rules.
|
data/lib/contrast/utils/json.rb
CHANGED
@@ -14,7 +14,7 @@ module Contrast
|
|
14
14
|
|
15
15
|
# Add any known cases where parsing error might arise from older json parser:
|
16
16
|
# @return [Array<String>]
|
17
|
-
SPECIAL_CASES = ["\"\"", "\"0\""].cs__freeze # rubocop:disable Style/StringLiterals
|
17
|
+
SPECIAL_CASES = [nil, "", "\"\"", "\"0\""].cs__freeze # rubocop:disable Style/StringLiterals
|
18
18
|
|
19
19
|
# Parses a string using JSON.parser. This method is used instead of standard JSON.parse to
|
20
20
|
# support older versions of json gem => not supporting key-value second parameter, which is
|
@@ -91,6 +91,15 @@ module Contrast
|
|
91
91
|
rescue Contrast::SecurityException => e
|
92
92
|
logger.trace('Security Exception raised during application lifecycle to prevent an attack', e)
|
93
93
|
raise(e)
|
94
|
+
rescue StandardError => e
|
95
|
+
# If there is a routing error of this type, then we cannot find a method explicitly mapped to this route.
|
96
|
+
# In this case, we should report nothing.
|
97
|
+
if Contrast::Utils::ClassUtil.truly_defined?('ActionController::RoutingError') &&
|
98
|
+
e.is_a?(ActionController::RoutingError)
|
99
|
+
|
100
|
+
Contrast::Agent::REQUEST_TRACKER.current&.observed_route = nil
|
101
|
+
end
|
102
|
+
raise(e)
|
94
103
|
end
|
95
104
|
end
|
96
105
|
end
|
@@ -25,8 +25,9 @@ module Contrast
|
|
25
25
|
# @param route [Contrast::Agent::Reporting::ObservedRoute] the route
|
26
26
|
# @return [boolean]
|
27
27
|
def sendable? route
|
28
|
-
return false
|
29
|
-
return false
|
28
|
+
return false unless route
|
29
|
+
return false unless route.signature && !route.signature.blank?
|
30
|
+
return false unless route.url && !route.url.blank?
|
30
31
|
|
31
32
|
route_hash = route.hash_id
|
32
33
|
|
data/lib/contrast.rb
CHANGED
@@ -95,15 +95,15 @@ end
|
|
95
95
|
|
96
96
|
# This needs to be required very early, after component interfaces, and before instrumentation attempts
|
97
97
|
require 'contrast/funchook/funchook'
|
98
|
-
|
99
98
|
require 'contrast/agent/version'
|
100
99
|
|
101
100
|
# shared utils
|
102
101
|
require 'contrast/utils/timer'
|
103
|
-
|
104
102
|
require 'contrast/utils/assess/sampling_util'
|
105
103
|
require 'contrast/agent'
|
106
104
|
|
105
|
+
# Prepend fix for Ruby 3.0
|
106
|
+
# TODO: RUBY-99999 remove once obsolete.
|
107
107
|
if RUBY_VERSION >= '3.0.0' && RUBY_VERSION < '3.1.0'
|
108
108
|
# Put prepend back as it was.
|
109
109
|
Class.alias_method(:prepend, :cs__orig_prepend)
|
@@ -304,7 +304,15 @@
|
|
304
304
|
"class_name":"String",
|
305
305
|
"instance_method": true,
|
306
306
|
"method_visibility": "public",
|
307
|
-
"method_name":"capitalize
|
307
|
+
"method_name":"capitalize",
|
308
|
+
"source":"O",
|
309
|
+
"target":"R",
|
310
|
+
"action":"KEEP"
|
311
|
+
}, {
|
312
|
+
"class_name":"String",
|
313
|
+
"instance_method": true,
|
314
|
+
"method_visibility": "public",
|
315
|
+
"method_name":"html_safe",
|
308
316
|
"source":"O",
|
309
317
|
"target":"R",
|
310
318
|
"action":"KEEP"
|
@@ -908,6 +916,36 @@
|
|
908
916
|
"action":"SPLAT",
|
909
917
|
"tags":["HTML_ENCODED"],
|
910
918
|
"untags":["HTML_DECODED"]
|
919
|
+
}, {
|
920
|
+
"class_name": "ActiveSupport::CoreExt::ERBUtil",
|
921
|
+
"method_name": "html_escape",
|
922
|
+
"method_visibility": "public",
|
923
|
+
"instance_method": true,
|
924
|
+
"source": "P0",
|
925
|
+
"target": "R",
|
926
|
+
"action": "SPLAT",
|
927
|
+
"tags":["HTML_ENCODED"],
|
928
|
+
"untags":["HTML_DECODED"]
|
929
|
+
}, {
|
930
|
+
"class_name": "ActiveSupport::CoreExt::ERBUtil",
|
931
|
+
"method_name": "h",
|
932
|
+
"method_visibility": "public",
|
933
|
+
"instance_method": true,
|
934
|
+
"source": "P0",
|
935
|
+
"target": "R",
|
936
|
+
"action": "SPLAT",
|
937
|
+
"tags":["HTML_ENCODED"],
|
938
|
+
"untags":["HTML_DECODED"]
|
939
|
+
}, {
|
940
|
+
"class_name": "ActiveSupport::CoreExt::ERBUtil",
|
941
|
+
"method_name": "unwrapped_html_escape",
|
942
|
+
"method_visibility": "public",
|
943
|
+
"instance_method": true,
|
944
|
+
"source": "P0",
|
945
|
+
"target": "R",
|
946
|
+
"action": "SPLAT",
|
947
|
+
"tags":["HTML_ENCODED"],
|
948
|
+
"untags":["HTML_DECODED"]
|
911
949
|
}, {
|
912
950
|
"class_name":"ERB::Util",
|
913
951
|
"method_name":"h",
|
@@ -1028,6 +1066,17 @@
|
|
1028
1066
|
"target": "R",
|
1029
1067
|
"action": "SPLAT"
|
1030
1068
|
},
|
1069
|
+
{
|
1070
|
+
"class_name": "ActiveSupport::Multibyte::Unicode",
|
1071
|
+
"instance_method": true,
|
1072
|
+
"method_visibility": "public",
|
1073
|
+
"method_name":"tidy_bytes",
|
1074
|
+
"source":"P0",
|
1075
|
+
"target":"R",
|
1076
|
+
"action": "KEEP",
|
1077
|
+
"tags":["HTML_ENCODED"],
|
1078
|
+
"untags":["HTML_DECODED"]
|
1079
|
+
},
|
1031
1080
|
{
|
1032
1081
|
"class_name": "JSON",
|
1033
1082
|
"method_name": "generate",
|
data/ruby-agent.gemspec
CHANGED
@@ -9,14 +9,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
9
9
|
|
10
10
|
# Add the team as authors of the Agent
|
11
11
|
def self.add_authors spec
|
12
|
-
spec.authors = %w[
|
13
|
-
galen.palmer@contrastsecurity.com
|
14
|
-
harold.mcginnis@contrastsecurity.com
|
15
|
-
donald.propst@contrastsecurity.com
|
16
|
-
alex.macdonald@contrastsecurity.com
|
17
|
-
mark.petersen@contrastsecurity.com
|
18
|
-
joshua.reed@contrastsecurity.com
|
19
|
-
]
|
12
|
+
spec.authors = %w[ruby@contrastsecurity.com]
|
20
13
|
end
|
21
14
|
|
22
15
|
# Add those dependencies required to develop or test the Agent
|
@@ -44,7 +37,6 @@ end
|
|
44
37
|
def self.add_debuggers spec
|
45
38
|
spec.add_development_dependency 'pry'
|
46
39
|
spec.add_development_dependency 'pry-byebug', '>= 3.9'
|
47
|
-
spec.add_development_dependency 'ruby-debug-ide'
|
48
40
|
end
|
49
41
|
|
50
42
|
# Dependencies used for framework testing.
|
@@ -52,7 +44,7 @@ def self.add_frameworks spec
|
|
52
44
|
spec.add_development_dependency 'grape', '~> 1.5', '>= 1.5.2'
|
53
45
|
spec.add_development_dependency 'rack-protection', '>= 2'
|
54
46
|
spec.add_development_dependency 'rails', '>= 6', '~> 7'
|
55
|
-
spec.add_development_dependency 'sinatra', '>= 2'
|
47
|
+
spec.add_development_dependency 'sinatra', '>= 2', '<4.0.0'
|
56
48
|
end
|
57
49
|
|
58
50
|
# Dependencies used for linting prior to commit.
|
@@ -105,9 +97,14 @@ def self.add_tested_gems spec
|
|
105
97
|
spec.add_development_dependency 'async'
|
106
98
|
spec.add_development_dependency 'execjs'
|
107
99
|
spec.add_development_dependency 'rhino'
|
108
|
-
|
100
|
+
if ENV.fetch('CONTRAST__PIPELINE__RUN', nil) == 'true'
|
101
|
+
spec.add_development_dependency 'sqlite3', '1.6.6'
|
102
|
+
else
|
103
|
+
spec.add_development_dependency 'sqlite3'
|
104
|
+
end
|
109
105
|
spec.add_development_dependency 'tilt'
|
110
106
|
spec.add_development_dependency 'xpath'
|
107
|
+
spec.add_development_dependency 'ruby'
|
111
108
|
end
|
112
109
|
|
113
110
|
# Add those dependencies required to run the Agent in customer applications.
|
@@ -116,8 +113,11 @@ end
|
|
116
113
|
# dependencies.csv in this directory to indicate that and create a
|
117
114
|
# corresponding update to the fake gem server data in TeamServer.
|
118
115
|
def self.add_dependencies spec
|
119
|
-
|
120
|
-
|
116
|
+
if ENV.fetch('CONTRAST__PIPELINE__RUN', nil) == 'true'
|
117
|
+
spec.add_dependency 'ffi', '1.15.5'
|
118
|
+
else
|
119
|
+
spec.add_dependency 'ffi'
|
120
|
+
end
|
121
121
|
spec.add_dependency 'ougai', '>= 1.8', '< 3.0.0'
|
122
122
|
spec.add_dependency 'rack', '>= 2.0', '< 4.0.0'
|
123
123
|
|
metadata
CHANGED
@@ -1,19 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: contrast-agent
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.
|
4
|
+
version: 7.6.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
- harold.mcginnis@contrastsecurity.com
|
9
|
-
- donald.propst@contrastsecurity.com
|
10
|
-
- alex.macdonald@contrastsecurity.com
|
11
|
-
- mark.petersen@contrastsecurity.com
|
12
|
-
- joshua.reed@contrastsecurity.com
|
7
|
+
- ruby@contrastsecurity.com
|
13
8
|
autorequire:
|
14
9
|
bindir: exe
|
15
10
|
cert_chain: []
|
16
|
-
date:
|
11
|
+
date: 2024-05-30 00:00:00.000000000 Z
|
17
12
|
dependencies:
|
18
13
|
- !ruby/object:Gem::Dependency
|
19
14
|
name: bundler
|
@@ -85,20 +80,6 @@ dependencies:
|
|
85
80
|
- - ">="
|
86
81
|
- !ruby/object:Gem::Version
|
87
82
|
version: '3.9'
|
88
|
-
- !ruby/object:Gem::Dependency
|
89
|
-
name: ruby-debug-ide
|
90
|
-
requirement: !ruby/object:Gem::Requirement
|
91
|
-
requirements:
|
92
|
-
- - ">="
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
version: '0'
|
95
|
-
type: :development
|
96
|
-
prerelease: false
|
97
|
-
version_requirements: !ruby/object:Gem::Requirement
|
98
|
-
requirements:
|
99
|
-
- - ">="
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
version: '0'
|
102
83
|
- !ruby/object:Gem::Dependency
|
103
84
|
name: debride
|
104
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -300,6 +281,9 @@ dependencies:
|
|
300
281
|
- - ">="
|
301
282
|
- !ruby/object:Gem::Version
|
302
283
|
version: '2'
|
284
|
+
- - "<"
|
285
|
+
- !ruby/object:Gem::Version
|
286
|
+
version: 4.0.0
|
303
287
|
type: :development
|
304
288
|
prerelease: false
|
305
289
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -307,6 +291,9 @@ dependencies:
|
|
307
291
|
- - ">="
|
308
292
|
- !ruby/object:Gem::Version
|
309
293
|
version: '2'
|
294
|
+
- - "<"
|
295
|
+
- !ruby/object:Gem::Version
|
296
|
+
version: 4.0.0
|
310
297
|
- !ruby/object:Gem::Dependency
|
311
298
|
name: async
|
312
299
|
requirement: !ruby/object:Gem::Requirement
|
@@ -391,6 +378,20 @@ dependencies:
|
|
391
378
|
- - ">="
|
392
379
|
- !ruby/object:Gem::Version
|
393
380
|
version: '0'
|
381
|
+
- !ruby/object:Gem::Dependency
|
382
|
+
name: ruby
|
383
|
+
requirement: !ruby/object:Gem::Requirement
|
384
|
+
requirements:
|
385
|
+
- - ">="
|
386
|
+
- !ruby/object:Gem::Version
|
387
|
+
version: '0'
|
388
|
+
type: :development
|
389
|
+
prerelease: false
|
390
|
+
version_requirements: !ruby/object:Gem::Requirement
|
391
|
+
requirements:
|
392
|
+
- - ">="
|
393
|
+
- !ruby/object:Gem::Version
|
394
|
+
version: '0'
|
394
395
|
- !ruby/object:Gem::Dependency
|
395
396
|
name: benchmark-ips
|
396
397
|
requirement: !ruby/object:Gem::Requirement
|
@@ -1394,7 +1395,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
1394
1395
|
- !ruby/object:Gem::Version
|
1395
1396
|
version: '0'
|
1396
1397
|
requirements: []
|
1397
|
-
rubygems_version: 3.3.
|
1398
|
+
rubygems_version: 3.3.27
|
1398
1399
|
signing_key:
|
1399
1400
|
specification_version: 4
|
1400
1401
|
summary: Contrast Security's agent for rack-based applications.
|