tcell_agent 1.1.9 → 1.1.10

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a9da1add0ef1d226086bf8fd6b5de63a2999935161ffb7e5fb683680f66109d6
4
- data.tar.gz: 14bfae15721c764a040f64d0d65d48cd26cff39981e45e5c69af9b3539f5436b
3
+ metadata.gz: b84894f0c99387e227049af1f0cf23514630037a8a717b43283bcb19c66dfa37
4
+ data.tar.gz: 7464cb57bee06eea3c94717334ef755b0acbef4768f836f39b8de7cdb85cb505
5
5
  SHA512:
6
- metadata.gz: 572bbc76f6c521872a6b636e64ea4811d118e5e779be0e9a087db440cfde31d18d08ef691bb41160e7d4558f1aab98ac4114aac0cf7a34ef613998fe4a6c3b71
7
- data.tar.gz: c35853653b9cb150eefe4089461e2d14528ff14ee0a7c5ad5b82a74c01d9849a4277f4fee66242c60b26e0aa18530bd752705c961b6c469a6d0d95d4dba52043
6
+ metadata.gz: 60dabf811b67b4d762a8c39c96e47f7f3fff2e0287bb8586fec019976680b7c88efcbeb8e8ef541a8c719de0430a1c010e72ebaf7dfaffd03ff38b8c501fabca
7
+ data.tar.gz: 4974dccf426c1113ffbd238ef8006dc8600fc01bcbd29fbf940c2c78df5f979c80f48888b7565fa8a3c998b71edc60973e2e97ddd08c8648224755b270af9ae9
@@ -15,8 +15,7 @@ module TCellAgent
15
15
  end
16
16
 
17
17
  def self.create_request_response(appsensor_meta)
18
- post_params = convert_params(appsensor_meta.flattened_post_dict) +
19
- convert_params(appsensor_meta.flattened_body_dict)
18
+ post_params = convert_params(appsensor_meta.flattened_post_dict)
20
19
 
21
20
  request_response = {
22
21
  'method' => appsensor_meta.method,
@@ -33,6 +32,8 @@ module TCellAgent
33
32
  'session_id' => appsensor_meta.session_id,
34
33
  'user_id' => appsensor_meta.user_id,
35
34
  'user_agent' => appsensor_meta.user_agent,
35
+ :content_type => appsensor_meta.content_type,
36
+ :request_body => appsensor_meta.raw_request_body,
36
37
  'request_bytes_length' => appsensor_meta.request_content_bytes_len,
37
38
  'response_bytes_length' => appsensor_meta.response_content_bytes_len
38
39
  }
@@ -53,8 +54,7 @@ module TCellAgent
53
54
  end
54
55
 
55
56
  def self.create_patches_request(appsensor_meta)
56
- post_params = convert_params(appsensor_meta.flattened_post_dict) +
57
- convert_params(appsensor_meta.flattened_body_dict)
57
+ post_params = convert_params(appsensor_meta.flattened_post_dict)
58
58
 
59
59
  {
60
60
  'method' => appsensor_meta.method,
@@ -64,7 +64,8 @@ module TCellAgent
64
64
  'query_params' => convert_params(appsensor_meta.flattened_get_dict),
65
65
  'post_params' => post_params,
66
66
  'headers' => convert_params(appsensor_meta.flattened_headers_dict),
67
- 'cookies' => convert_params(appsensor_meta.flattened_cookie_dict)
67
+ 'cookies' => convert_params(appsensor_meta.flattened_cookie_dict),
68
+ :content_type => appsensor_meta.content_type
68
69
  }
69
70
  end
70
71
  end
@@ -93,8 +93,8 @@ module TCellAgent
93
93
  'js_agent_url' => TCellAgent.configuration.js_agent_url
94
94
  },
95
95
  'appfirewall' => {
96
- 'enable_body_xxe_inspection' => false,
97
- 'enable_body_json_inspection' => false,
96
+ 'enable_body_xxe_inspection' => true,
97
+ 'enable_body_json_inspection' => true,
98
98
  'allow_log_payloads' => true
99
99
  },
100
100
  'policy_versions' => {
@@ -1,5 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'tcell_agent/logger'
2
4
  require 'tcell_agent/utils/params'
5
+ require 'cgi'
6
+
7
+ TCELL_MAX_BODY_LENGTH = 20_000
3
8
 
4
9
  # TODO(ralba): move TCellData from instrumentation.rb here
5
10
  # and merge both models into one and drop usage of MetaData.
@@ -38,6 +43,8 @@ module TCellAgent
38
43
  :transaction_id,
39
44
  :location,
40
45
  :path,
46
+ :raw_request_body,
47
+ :content_type,
41
48
  :request_content_bytes_len,
42
49
  :response_content_bytes_len,
43
50
  :response_code,
@@ -113,38 +120,38 @@ module TCellAgent
113
120
  @flattened_path_parameters = TCellAgent::Utils::Params.flatten(value)
114
121
  end
115
122
 
123
+ def get_raw_post_data(request)
124
+ if request.env.key?('RAW_POST_DATA')
125
+ raw_post_data = request.env['RAW_POST_DATA']
126
+ else
127
+ body = request.body
128
+ # Positions strio to the beginning of input, resetting lineno to zero.
129
+ # rails 4.1 seems to read the stringIO directly and so body.gets is empty
130
+ # this is called
131
+ body.rewind if body.respond_to?(:rewind)
132
+ raw_post_data = body.read(request.content_length.to_i) if request.content_length
133
+ body.rewind if body.respond_to?(:rewind)
134
+ end
135
+ raw_post_data if raw_post_data.respond_to?(:length) && raw_post_data.length < TCELL_MAX_BODY_LENGTH
136
+ end
137
+
116
138
  def set_parameter_dicts(request)
117
139
  self.get_dict = request.GET
118
140
  self.cookie_dict = request.cookies
119
- self.post_dict = request.POST
120
- self.headers_dict = request.env
121
141
 
122
- # Positions strio to the beginning of input, resetting lineno to zero.
123
- # rails 4.1 seems to read the stringIO directly and so body.gets is empty
124
- # this is called
125
- request.body.rewind
142
+ self.post_dict = if !(request.content_type =~ %r{application/json}i).nil? ||
143
+ !(request.content_type =~ %r{application/xml}i).nil?
144
+ {}
145
+ else
146
+ request.POST
147
+ end
126
148
 
127
- @request_content_bytes_len = (request.content_length || 0).to_i
128
- set_body_dict(
129
- @request_content_bytes_len,
130
- request.content_type,
131
- request.body.gets
132
- )
133
- end
134
-
135
- def set_body_dict(request_content_bytes_len, request_content_type, request_body)
136
- @flattened_body_dict = {}
137
-
138
- return if request_content_bytes_len > 2_000_000
139
-
140
- return unless request_body && (request_content_type =~ %r{application/json}i)
149
+ self.headers_dict = request.env
141
150
 
142
- begin
143
- # don't enqueue parameter values of unknown type to avoid any serialization issues
144
- @flattened_body_dict = TCellAgent::Utils::Params.flatten(JSON.parse(request_body))
145
- rescue JSON::ParserError
146
- TCellAgent.logger.debug('JSON body parameter parsing failed')
147
- end
151
+ @flattened_body_dict = {} # deprecated
152
+ @content_type = request.content_type
153
+ @raw_request_body = get_raw_post_data(request)
154
+ @request_content_bytes_len = (request.content_length || 0).to_i
148
155
  end
149
156
  end
150
157
  end
@@ -1,5 +1,5 @@
1
1
  # See the file "LICENSE" for the full license governing this code.
2
2
 
3
3
  module TCellAgent
4
- VERSION = '1.1.9'.freeze
4
+ VERSION = '1.1.10'.freeze
5
5
  end
@@ -26,9 +26,8 @@ module TCellAgent
26
26
  meta_data.post_dict = { 'xss_param' => '<script>' }
27
27
  meta_data.cookie_dict = { 'xss_param' => '<script>' }
28
28
  meta_data.headers_dict = { 'HTTP_XSS_PARAM' => '<script>' }
29
-
30
- json_body = { 'xss_param' => '<script>' }.to_json
31
- meta_data.set_body_dict(json_body.bytesize, 'application/json', json_body)
29
+ meta_data.content_type = 'hi'
30
+ meta_data.raw_request_body = { 'xss_param' => '<script>' }.to_json
32
31
 
33
32
  result = Models.create_request_response(meta_data)
34
33
 
@@ -42,7 +41,6 @@ module TCellAgent
42
41
  { 'name' => 'xss_param', 'value' => '<script>' }
43
42
  ],
44
43
  'post_params' => [
45
- { 'name' => 'xss_param', 'value' => '<script>' },
46
44
  { 'name' => 'xss_param', 'value' => '<script>' }
47
45
  ],
48
46
  'headers' => [
@@ -59,6 +57,8 @@ module TCellAgent
59
57
  'session_id' => 'session_id',
60
58
  'user_id' => 'user_id',
61
59
  'user_agent' => 'Mozilla',
60
+ :content_type => 'hi',
61
+ :request_body => '{"xss_param":"<script>"}',
62
62
  'request_bytes_length' => 1024,
63
63
  'response_bytes_length' => 2048,
64
64
  'csrf_exception' => {
@@ -93,9 +93,9 @@ module TCellAgent
93
93
  meta_data.post_dict = { 'user' => { 'xss_param' => '<script>' } }
94
94
  meta_data.cookie_dict = { 'xss_param' => '<script>' }
95
95
  meta_data.headers_dict = { 'HTTP_XSS_PARAM' => '<script>' }
96
-
97
- json_body = { 'user' => { 'xss_param' => '<script>' } }.to_json
98
- meta_data.set_body_dict(json_body.bytesize, 'application/json', json_body)
96
+ meta_data.content_type = 'hi'
97
+ # patches does not use the request body.
98
+ meta_data.raw_request_body = { 'user' => { 'xss_param' => '<script>' } }.to_json
99
99
 
100
100
  result = Models.create_patches_request(meta_data)
101
101
 
@@ -105,9 +105,9 @@ module TCellAgent
105
105
  'path' => '/some/path',
106
106
  'remote_address' => '192.168.1.1',
107
107
  'request_bytes_length' => 1024,
108
+ :content_type => 'hi',
108
109
  'query_params' => [{ 'name' => 'xss_param', 'value' => '<script>' }],
109
110
  'post_params' => [
110
- { 'name' => 'xss_param', 'value' => '<script>' },
111
111
  { 'name' => 'xss_param', 'value' => '<script>' }
112
112
  ],
113
113
  'headers' => [{ 'name' => 'xss-param', 'value' => '<script>' }],
@@ -75,79 +75,7 @@ module TCellAgent
75
75
  )
76
76
  end
77
77
 
78
- context 'with text/html content type' do
79
- it 'should set the body params to empty' do
80
- @meta_data.set_body_dict(
81
- 67,
82
- 'text/html',
83
- {
84
- :username => 'tester',
85
- :password => 'pass'
86
- }.to_json
87
- )
88
-
89
- expect(@meta_data.flattened_body_dict).to eq({})
90
- end
91
- end
92
-
93
78
  context 'with application/json content type' do
94
- context 'with empty request body' do
95
- it 'should set the body params to empty' do
96
- @meta_data.set_body_dict(
97
- 67,
98
- 'application/json',
99
- nil
100
- )
101
-
102
- expect(@meta_data.flattened_body_dict).to eq({})
103
- end
104
- end
105
-
106
- context 'with bad json in the body' do
107
- it 'should set the body params to empty' do
108
- @meta_data.set_body_dict(
109
- 67,
110
- 'application/json',
111
- '{"username":"tester""password":"pass"}'
112
- )
113
-
114
- expect(@meta_data.flattened_body_dict).to eq({})
115
- end
116
- end
117
-
118
- context 'with valid json in the body' do
119
- it 'should set the body params' do
120
- @meta_data.set_body_dict(
121
- 67,
122
- 'application/json',
123
- {
124
- :username => 'tester',
125
- :password => 'pass'
126
- }.to_json
127
- )
128
-
129
- expect(@meta_data.flattened_body_dict).to eq(
130
- {
131
- ['username'] => 'tester',
132
- ['password'] => 'pass'
133
- }
134
- )
135
- end
136
- end
137
-
138
- context 'with a json body that is too big' do
139
- it 'should set the body params to empty' do
140
- @meta_data.set_body_dict(
141
- 20_000_000,
142
- 'application/json',
143
- {
144
- :username => 'tester',
145
- :password => 'pass'
146
- }.to_json
147
- )
148
- expect(@meta_data.flattened_body_dict).to eq({})
149
- end
150
- end
151
79
  end
152
80
  end
153
81
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tcell_agent
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.9
4
+ version: 1.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Rafael
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-08-12 00:00:00.000000000 Z
11
+ date: 2019-09-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: ffi