@contrast/assess 1.9.0 → 1.11.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.
- package/lib/dataflow/event-factory.js +1 -1
- package/lib/dataflow/index.js +1 -1
- package/lib/dataflow/propagation/common.js +1 -1
- package/lib/dataflow/propagation/index.js +3 -1
- package/lib/dataflow/propagation/install/JSON/index.js +1 -1
- package/lib/dataflow/propagation/install/JSON/parse-fn.js +1 -1
- package/lib/dataflow/propagation/install/JSON/parse.js +1 -1
- package/lib/dataflow/propagation/install/JSON/stringify.js +1 -1
- package/lib/dataflow/propagation/install/array-prototype-join.js +1 -1
- package/lib/dataflow/propagation/install/buffer.js +1 -1
- package/lib/dataflow/propagation/install/contrast-methods/add.js +1 -1
- package/lib/dataflow/propagation/install/contrast-methods/index.js +1 -1
- package/lib/dataflow/propagation/install/contrast-methods/number.js +1 -1
- package/lib/dataflow/propagation/install/contrast-methods/string.js +1 -1
- package/lib/dataflow/propagation/install/contrast-methods/tag.js +1 -1
- package/lib/dataflow/propagation/install/decode-uri-component.js +1 -1
- package/lib/dataflow/propagation/install/ejs/escape-xml.js +1 -1
- package/lib/dataflow/propagation/install/ejs/index.js +1 -1
- package/lib/dataflow/propagation/install/encode-uri-component.js +1 -1
- package/lib/dataflow/propagation/install/escape-html.js +1 -1
- package/lib/dataflow/propagation/install/escape.js +1 -1
- package/lib/dataflow/propagation/install/handlebars-utils-escape-expression.js +1 -1
- package/lib/dataflow/propagation/install/isnumeric-0.js +1 -1
- package/lib/dataflow/propagation/install/mongoose/common.js +20 -0
- package/lib/dataflow/propagation/install/mongoose/index.js +5 -9
- package/lib/dataflow/propagation/install/mongoose/schema-map.js +149 -0
- package/lib/dataflow/propagation/install/mongoose/schema-mixed.js +162 -0
- package/lib/dataflow/propagation/install/mongoose/schema-string.js +91 -37
- package/lib/dataflow/propagation/install/mysql-connection-escape.js +1 -1
- package/lib/dataflow/propagation/install/parse-int.js +1 -1
- package/lib/dataflow/propagation/install/path/basename.js +124 -0
- package/lib/dataflow/propagation/install/path/common.js +176 -0
- package/lib/dataflow/propagation/install/path/index.js +32 -0
- package/lib/dataflow/propagation/install/path/join-and-resolve.js +141 -0
- package/lib/dataflow/propagation/install/path/normalize.js +123 -0
- package/lib/dataflow/propagation/install/pug/index.js +1 -1
- package/lib/dataflow/propagation/install/pug-runtime-escape.js +1 -1
- package/lib/dataflow/propagation/install/querystring/index.js +1 -1
- package/lib/dataflow/propagation/install/querystring/parse.js +2 -2
- package/lib/dataflow/propagation/install/reg-exp-prototype-exec.js +182 -0
- package/lib/dataflow/propagation/install/sequelize.js +1 -1
- package/lib/dataflow/propagation/install/sql-template-strings.js +1 -1
- package/lib/dataflow/propagation/install/string/concat.js +1 -1
- package/lib/dataflow/propagation/install/string/format-methods.js +1 -1
- package/lib/dataflow/propagation/install/string/html-methods.js +1 -1
- package/lib/dataflow/propagation/install/string/index.js +65 -1
- package/lib/dataflow/propagation/install/string/match-all.js +236 -0
- package/lib/dataflow/propagation/install/string/match.js +84 -38
- package/lib/dataflow/propagation/install/string/replace.js +3 -3
- package/lib/dataflow/propagation/install/string/slice.js +2 -2
- package/lib/dataflow/propagation/install/string/split.js +2 -2
- package/lib/dataflow/propagation/install/string/substring.js +3 -3
- package/lib/dataflow/propagation/install/string/trim.js +2 -2
- package/lib/dataflow/propagation/install/unescape.js +1 -1
- package/lib/dataflow/propagation/install/url/domain-parsers.js +1 -1
- package/lib/dataflow/propagation/install/url/index.js +4 -1
- package/lib/dataflow/propagation/install/url/parse.js +131 -0
- package/lib/dataflow/propagation/install/url/searchParams.js +133 -0
- package/lib/dataflow/propagation/install/url/url.js +185 -0
- package/lib/dataflow/propagation/install/validator/hooks.js +1 -1
- package/lib/dataflow/propagation/install/validator/index.js +1 -1
- package/lib/dataflow/propagation/install/validator/methods.js +1 -1
- package/lib/dataflow/sinks/common.js +1 -1
- package/lib/dataflow/sinks/index.js +9 -5
- package/lib/dataflow/sinks/install/child-process.js +1 -1
- package/lib/dataflow/sinks/install/eval.js +138 -0
- package/lib/dataflow/sinks/install/express/index.js +1 -1
- package/lib/dataflow/sinks/install/express/unvalidated-redirect.js +2 -2
- package/lib/dataflow/sinks/install/fastify/index.js +1 -1
- package/lib/dataflow/sinks/install/fastify/unvalidated-redirect.js +3 -2
- package/lib/dataflow/sinks/install/fs.js +4 -4
- package/lib/dataflow/sinks/install/function.js +160 -0
- package/lib/dataflow/sinks/install/http/index.js +31 -0
- package/lib/dataflow/sinks/install/http/request.js +152 -0
- package/lib/dataflow/sinks/install/{http.js → http/server-response.js} +3 -3
- package/lib/dataflow/sinks/install/koa/index.js +1 -1
- package/lib/dataflow/sinks/install/koa/unvalidated-redirect.js +2 -2
- package/lib/dataflow/sinks/install/marsdb.js +1 -1
- package/lib/dataflow/sinks/install/mongodb.js +34 -46
- package/lib/dataflow/sinks/install/mssql.js +45 -32
- package/lib/dataflow/sinks/install/mysql.js +1 -1
- package/lib/dataflow/sinks/install/postgres.js +1 -1
- package/lib/dataflow/sinks/install/sequelize.js +1 -1
- package/lib/dataflow/sinks/install/sqlite3.js +1 -1
- package/lib/dataflow/sinks/install/vm.js +276 -0
- package/lib/dataflow/sources/common.js +1 -1
- package/lib/dataflow/sources/handler.js +1 -1
- package/lib/dataflow/sources/index.js +1 -1
- package/lib/dataflow/sources/install/body-parser1.js +1 -1
- package/lib/dataflow/sources/install/busboy1.js +1 -1
- package/lib/dataflow/sources/install/cookie-parser1.js +1 -1
- package/lib/dataflow/sources/install/express/index.js +1 -1
- package/lib/dataflow/sources/install/express/params.js +1 -1
- package/lib/dataflow/sources/install/express/parsedUrl.js +1 -1
- package/lib/dataflow/sources/install/fastify/fastify.js +1 -1
- package/lib/dataflow/sources/install/fastify/index.js +1 -1
- package/lib/dataflow/sources/install/formidable1.js +1 -1
- package/lib/dataflow/sources/install/http.js +1 -1
- package/lib/dataflow/sources/install/koa/index.js +1 -1
- package/lib/dataflow/sources/install/koa/koa-bodyparsers.js +1 -1
- package/lib/dataflow/sources/install/koa/koa-routers.js +1 -1
- package/lib/dataflow/sources/install/koa/koa2.js +1 -1
- package/lib/dataflow/sources/install/qs6.js +1 -1
- package/lib/dataflow/sources/install/querystring.js +1 -1
- package/lib/dataflow/tag-utils.js +71 -2
- package/lib/dataflow/tracker.js +1 -1
- package/lib/dataflow/utils/is-safe-content-type.js +1 -1
- package/lib/dataflow/utils/is-vulnerable.js +1 -1
- package/lib/index.js +1 -1
- package/lib/response-scanning/handlers/index.js +36 -30
- package/lib/response-scanning/handlers/utils.js +1 -1
- package/lib/response-scanning/index.js +1 -1
- package/lib/response-scanning/install/http.js +3 -3
- package/lib/session-configuration/index.js +1 -1
- package/lib/session-configuration/install/http.js +1 -1
- package/package.json +2 -2
package/lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright:
|
|
2
|
+
* Copyright: 2023 Contrast Security, Inc
|
|
3
3
|
* Contact: support@contrastsecurity.com
|
|
4
4
|
* License: Commercial
|
|
5
5
|
|
|
@@ -15,6 +15,12 @@
|
|
|
15
15
|
|
|
16
16
|
'use strict';
|
|
17
17
|
|
|
18
|
+
const {
|
|
19
|
+
toLowerCase,
|
|
20
|
+
stringify,
|
|
21
|
+
substring,
|
|
22
|
+
ResponseScanningRule
|
|
23
|
+
} = require('@contrast/common');
|
|
18
24
|
const {
|
|
19
25
|
escapeHtml,
|
|
20
26
|
isHtmlContent,
|
|
@@ -26,7 +32,6 @@ const {
|
|
|
26
32
|
getCspHeaders,
|
|
27
33
|
checkCspSources
|
|
28
34
|
} = require('./utils');
|
|
29
|
-
const { toLowerCase, substring, ResponseScanningRule } = require('@contrast/common');
|
|
30
35
|
|
|
31
36
|
module.exports = function(core) {
|
|
32
37
|
const {
|
|
@@ -106,7 +111,7 @@ module.exports = function(core) {
|
|
|
106
111
|
reportFindings(sourceContext, {
|
|
107
112
|
ruleId: ResponseScanningRule.CACHE_CONTROLS_MISSING,
|
|
108
113
|
vulnerabilityMetadata: {
|
|
109
|
-
data:
|
|
114
|
+
data: stringify(instructions)
|
|
110
115
|
}
|
|
111
116
|
});
|
|
112
117
|
}
|
|
@@ -176,7 +181,10 @@ module.exports = function(core) {
|
|
|
176
181
|
delete vulnerabilityMetadata.referrerSecure;
|
|
177
182
|
delete vulnerabilityMetadata.referrerValue;
|
|
178
183
|
|
|
179
|
-
reportFindings(sourceContext, {
|
|
184
|
+
reportFindings(sourceContext, {
|
|
185
|
+
ruleId: ResponseScanningRule.CSP_HEADER_INSECURE,
|
|
186
|
+
vulnerabilityMetadata: { data: JSON.stringify(vulnerabilityMetadata) }
|
|
187
|
+
});
|
|
180
188
|
}
|
|
181
189
|
};
|
|
182
190
|
|
|
@@ -210,7 +218,27 @@ module.exports = function(core) {
|
|
|
210
218
|
}
|
|
211
219
|
};
|
|
212
220
|
|
|
213
|
-
responseScanning.
|
|
221
|
+
responseScanning.handleXContentTypeHeaderMissing = function(sourceContext, { responseHeaders }) {
|
|
222
|
+
const headerName = 'x-content-type-options';
|
|
223
|
+
let header = responseHeaders[headerName];
|
|
224
|
+
|
|
225
|
+
if (header) {
|
|
226
|
+
header = toLowerCase(header);
|
|
227
|
+
if (header === 'nosniff') {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
reportFindings(sourceContext, {
|
|
233
|
+
ruleId: ResponseScanningRule.XCONTENTTYPE_HEADER_MISSING,
|
|
234
|
+
vulnerabilityMetadata: {
|
|
235
|
+
data: header || ''
|
|
236
|
+
}
|
|
237
|
+
});
|
|
238
|
+
};
|
|
239
|
+
|
|
240
|
+
// NODE-3135
|
|
241
|
+
responseScanning.handleXPoweredByHeader = function(sourceContext, { responseHeaders }) {
|
|
214
242
|
const headerName = 'x-powered-by';
|
|
215
243
|
let header = responseHeaders[headerName];
|
|
216
244
|
|
|
@@ -226,7 +254,7 @@ module.exports = function(core) {
|
|
|
226
254
|
];
|
|
227
255
|
|
|
228
256
|
reportFindings(sourceContext, {
|
|
229
|
-
ruleId: ResponseScanningRule.
|
|
257
|
+
ruleId: ResponseScanningRule.X_POWERED_BY_HEADER,
|
|
230
258
|
vulnerabilityMetadata: {
|
|
231
259
|
data: JSON.stringify(instructions)
|
|
232
260
|
}
|
|
@@ -234,37 +262,15 @@ module.exports = function(core) {
|
|
|
234
262
|
}
|
|
235
263
|
};
|
|
236
264
|
|
|
237
|
-
responseScanning.handleXContentTypeHeaderMissing = function(sourceContext, { responseHeaders }) {
|
|
238
|
-
const headerName = 'x-content-type-options';
|
|
239
|
-
let header = responseHeaders[headerName];
|
|
240
|
-
|
|
241
|
-
if (header) {
|
|
242
|
-
header = toLowerCase(header);
|
|
243
|
-
if (header === 'nosniff') {
|
|
244
|
-
return;
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
|
|
248
|
-
reportFindings(sourceContext, {
|
|
249
|
-
ruleId: ResponseScanningRule.XCONTENTTYPE_HEADER_MISSING,
|
|
250
|
-
vulnerabilityMetadata: {
|
|
251
|
-
data: header || ''
|
|
252
|
-
}
|
|
253
|
-
});
|
|
254
|
-
};
|
|
255
|
-
|
|
256
265
|
responseScanning.handleXxsProtectionHeaderDisabled = function(sourceContext, { responseHeaders }) {
|
|
257
266
|
const header = responseHeaders['x-xss-protection'];
|
|
258
267
|
|
|
259
|
-
|
|
260
|
-
if (header && header.startsWith('1')) {
|
|
261
|
-
return;
|
|
262
|
-
}
|
|
268
|
+
if (header?.startsWith?.('1')) return;
|
|
263
269
|
|
|
264
270
|
reportFindings(sourceContext, {
|
|
265
271
|
ruleId: ResponseScanningRule.XXSPROTECTION_HEADER_DISABLED,
|
|
266
272
|
vulnerabilityMetadata: {
|
|
267
|
-
data: header
|
|
273
|
+
data: header,
|
|
268
274
|
}
|
|
269
275
|
});
|
|
270
276
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright:
|
|
2
|
+
* Copyright: 2023 Contrast Security, Inc
|
|
3
3
|
* Contact: support@contrastsecurity.com
|
|
4
4
|
* License: Commercial
|
|
5
5
|
|
|
@@ -30,7 +30,7 @@ module.exports = function(core) {
|
|
|
30
30
|
handleParameterPollution,
|
|
31
31
|
handleCspHeader,
|
|
32
32
|
handleHstsHeaderMissing,
|
|
33
|
-
|
|
33
|
+
handleXPoweredByHeader,
|
|
34
34
|
handleXContentTypeHeaderMissing,
|
|
35
35
|
handleXxsProtectionHeaderDisabled,
|
|
36
36
|
}
|
|
@@ -76,7 +76,7 @@ module.exports = function(core) {
|
|
|
76
76
|
handleParameterPollution(sourceContext, evaluationContext);
|
|
77
77
|
handleCspHeader(sourceContext, evaluationContext);
|
|
78
78
|
handleHstsHeaderMissing(sourceContext, evaluationContext);
|
|
79
|
-
|
|
79
|
+
handleXPoweredByHeader(sourceContext, evaluationContext);
|
|
80
80
|
handleXContentTypeHeaderMissing(sourceContext, evaluationContext);
|
|
81
81
|
handleXxsProtectionHeaderDisabled(sourceContext, evaluationContext);
|
|
82
82
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contrast/assess",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
"dependencies": {
|
|
16
16
|
"@contrast/distringuish": "^4.1.0",
|
|
17
17
|
"@contrast/scopes": "1.4.0",
|
|
18
|
-
"@contrast/common": "1.
|
|
18
|
+
"@contrast/common": "1.14.0",
|
|
19
19
|
"parseurl": "^1.3.3"
|
|
20
20
|
}
|
|
21
21
|
}
|