dd-trace 3.38.1 → 3.40.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/LICENSE-3rdparty.csv +2 -2
- package/README.md +3 -3
- package/ext/kinds.d.ts +1 -0
- package/ext/kinds.js +2 -1
- package/ext/tags.d.ts +2 -1
- package/ext/tags.js +6 -1
- package/index.d.ts +9 -1
- package/package.json +8 -8
- package/packages/datadog-core/src/storage/async_resource.js +1 -1
- package/packages/datadog-esbuild/index.js +1 -20
- package/packages/datadog-instrumentations/src/cucumber.js +5 -0
- package/packages/datadog-instrumentations/src/helpers/bundler-register.js +1 -2
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -1
- package/packages/datadog-instrumentations/src/helpers/register.js +1 -1
- package/packages/datadog-instrumentations/src/jest.js +39 -10
- package/packages/datadog-instrumentations/src/knex.js +24 -17
- package/packages/datadog-instrumentations/src/mocha.js +16 -1
- package/packages/datadog-instrumentations/src/next.js +58 -23
- package/packages/datadog-instrumentations/src/playwright.js +11 -6
- package/packages/datadog-instrumentations/src/restify.js +14 -1
- package/packages/datadog-plugin-http/src/client.js +2 -0
- package/packages/datadog-plugin-jest/src/index.js +11 -3
- package/packages/datadog-plugin-kafkajs/src/consumer.js +8 -6
- package/packages/datadog-plugin-kafkajs/src/producer.js +9 -6
- package/packages/datadog-plugin-mocha/src/index.js +7 -1
- package/packages/datadog-plugin-next/src/index.js +4 -3
- package/packages/datadog-plugin-playwright/src/index.js +4 -1
- package/packages/dd-trace/src/appsec/channels.js +1 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +1 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-analyzer.js +60 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +269 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +5 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +22 -4
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +9 -2
- package/packages/dd-trace/src/appsec/iast/analyzers/xcontenttype-header-missing-analyzer.js +2 -2
- package/packages/dd-trace/src/appsec/iast/iast-log.js +9 -4
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +1 -1
- package/packages/dd-trace/src/appsec/iast/index.js +1 -1
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +13 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/index.js +1 -14
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +19 -0
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +2 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +1 -0
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +5 -1
- package/packages/dd-trace/src/appsec/recommended.json +272 -48
- package/packages/dd-trace/src/appsec/reporter.js +31 -34
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-itr-configuration.js +16 -4
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +2 -0
- package/packages/dd-trace/src/config.js +35 -17
- package/packages/dd-trace/src/datastreams/processor.js +60 -15
- package/packages/dd-trace/src/format.js +6 -1
- package/packages/dd-trace/src/git_properties.js +16 -15
- package/packages/dd-trace/src/iitm.js +1 -1
- package/packages/dd-trace/src/log/channels.js +1 -1
- package/packages/dd-trace/src/opentelemetry/span.js +95 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +9 -10
- package/packages/dd-trace/src/opentracing/span.js +4 -0
- package/packages/dd-trace/src/opentracing/span_context.js +5 -2
- package/packages/dd-trace/src/plugin_manager.js +1 -1
- package/packages/dd-trace/src/plugins/database.js +1 -1
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/util/ci.js +6 -19
- package/packages/dd-trace/src/plugins/util/git.js +2 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +7 -6
- package/packages/dd-trace/src/plugins/util/test.js +29 -1
- package/packages/dd-trace/src/plugins/util/url.js +26 -0
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +1 -14
- package/packages/dd-trace/src/profiling/config.js +23 -20
- package/packages/dd-trace/src/profiling/profilers/events.js +161 -0
- package/packages/dd-trace/src/profiling/profilers/shared.js +9 -0
- package/packages/dd-trace/src/profiling/profilers/wall.js +84 -47
- package/packages/dd-trace/src/ritm.js +1 -1
- package/packages/dd-trace/src/span_processor.js +4 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +1 -1
- package/packages/dd-trace/src/telemetry/index.js +5 -1
- package/packages/dd-trace/src/telemetry/logs/index.js +65 -0
- package/packages/dd-trace/src/{appsec/iast/telemetry/log → telemetry/logs}/log-collector.js +9 -22
- package/packages/dd-trace/src/tracer.js +4 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/log/index.js +0 -87
- package/packages/diagnostics_channel/index.js +0 -3
- package/packages/diagnostics_channel/src/index.js +0 -121
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "2.2",
|
|
3
3
|
"metadata": {
|
|
4
|
-
"rules_version": "1.
|
|
4
|
+
"rules_version": "1.9.0"
|
|
5
5
|
},
|
|
6
6
|
"rules": [
|
|
7
7
|
{
|
|
@@ -3004,6 +3004,7 @@
|
|
|
3004
3004
|
],
|
|
3005
3005
|
"regex": "<script[^>]*>[\\s\\S]*?",
|
|
3006
3006
|
"options": {
|
|
3007
|
+
"case_sensitive": false,
|
|
3007
3008
|
"min_length": 8
|
|
3008
3009
|
}
|
|
3009
3010
|
},
|
|
@@ -4207,7 +4208,6 @@
|
|
|
4207
4208
|
"name": "Remote Command Execution: Java process spawn (CVE-2017-9805)",
|
|
4208
4209
|
"tags": {
|
|
4209
4210
|
"type": "java_code_injection",
|
|
4210
|
-
"crs_id": "944110",
|
|
4211
4211
|
"category": "attack_attempt",
|
|
4212
4212
|
"cwe": "94",
|
|
4213
4213
|
"capec": "1000/152/242"
|
|
@@ -4235,48 +4235,16 @@
|
|
|
4235
4235
|
"address": "graphql.server.all_resolvers"
|
|
4236
4236
|
}
|
|
4237
4237
|
],
|
|
4238
|
-
"regex": "(?:runtime|processbuilder)",
|
|
4238
|
+
"regex": "(?:unmarshaller|base64data|java\\.).*(?:runtime|processbuilder)",
|
|
4239
4239
|
"options": {
|
|
4240
|
-
"case_sensitive":
|
|
4241
|
-
"min_length":
|
|
4242
|
-
}
|
|
4243
|
-
},
|
|
4244
|
-
"operator": "match_regex"
|
|
4245
|
-
},
|
|
4246
|
-
{
|
|
4247
|
-
"parameters": {
|
|
4248
|
-
"inputs": [
|
|
4249
|
-
{
|
|
4250
|
-
"address": "server.request.query"
|
|
4251
|
-
},
|
|
4252
|
-
{
|
|
4253
|
-
"address": "server.request.body"
|
|
4254
|
-
},
|
|
4255
|
-
{
|
|
4256
|
-
"address": "server.request.path_params"
|
|
4257
|
-
},
|
|
4258
|
-
{
|
|
4259
|
-
"address": "server.request.headers.no_cookies"
|
|
4260
|
-
},
|
|
4261
|
-
{
|
|
4262
|
-
"address": "grpc.server.request.message"
|
|
4263
|
-
},
|
|
4264
|
-
{
|
|
4265
|
-
"address": "graphql.server.all_resolvers"
|
|
4266
|
-
}
|
|
4267
|
-
],
|
|
4268
|
-
"regex": "(?:unmarshaller|base64data|java\\.)",
|
|
4269
|
-
"options": {
|
|
4270
|
-
"case_sensitive": true,
|
|
4271
|
-
"min_length": 5
|
|
4240
|
+
"case_sensitive": false,
|
|
4241
|
+
"min_length": 13
|
|
4272
4242
|
}
|
|
4273
4243
|
},
|
|
4274
4244
|
"operator": "match_regex"
|
|
4275
4245
|
}
|
|
4276
4246
|
],
|
|
4277
|
-
"transformers": [
|
|
4278
|
-
"lowercase"
|
|
4279
|
-
]
|
|
4247
|
+
"transformers": []
|
|
4280
4248
|
},
|
|
4281
4249
|
{
|
|
4282
4250
|
"id": "crs-944-130",
|
|
@@ -4479,6 +4447,9 @@
|
|
|
4479
4447
|
},
|
|
4480
4448
|
{
|
|
4481
4449
|
"address": "graphql.server.all_resolvers"
|
|
4450
|
+
},
|
|
4451
|
+
{
|
|
4452
|
+
"address": "server.request.headers.no_cookies"
|
|
4482
4453
|
}
|
|
4483
4454
|
],
|
|
4484
4455
|
"regex": "[#%$]{(?:[^}]+[^\\w\\s}\\-_][^}]+|\\d+-\\d+)}",
|
|
@@ -4752,7 +4723,7 @@
|
|
|
4752
4723
|
"address": "graphql.server.all_resolvers"
|
|
4753
4724
|
}
|
|
4754
4725
|
],
|
|
4755
|
-
"regex": "\\bqualysperiscope\\.com\\b"
|
|
4726
|
+
"regex": "\\bqualysperiscope\\.com\\b|\\.oscomm\\."
|
|
4756
4727
|
},
|
|
4757
4728
|
"operator": "match_regex"
|
|
4758
4729
|
}
|
|
@@ -4833,7 +4804,7 @@
|
|
|
4833
4804
|
"address": "graphql.server.all_resolvers"
|
|
4834
4805
|
}
|
|
4835
4806
|
],
|
|
4836
|
-
"regex": "\\b(?:webhook\\.site|\\.canarytokens\\.com|vii\\.one|act1on3\\.ru|gdsburp\\.com)\\b"
|
|
4807
|
+
"regex": "\\b(?:webhook\\.site|\\.canarytokens\\.com|vii\\.one|act1on3\\.ru|gdsburp\\.com|arcticwolf\\.net|oob\\.li|htbiw\\.com|h4\\.vc|mochan\\.cloud|imshopping\\.com|bootstrapnodejs\\.com|mooo-ng\\.com|securitytrails\\.com|canyouhackit\\.io|7bae\\.xyz)\\b"
|
|
4837
4808
|
},
|
|
4838
4809
|
"operator": "match_regex"
|
|
4839
4810
|
}
|
|
@@ -4955,7 +4926,7 @@
|
|
|
4955
4926
|
"address": "graphql.server.all_resolvers"
|
|
4956
4927
|
}
|
|
4957
4928
|
],
|
|
4958
|
-
"regex": "\\b(?:interact\\.sh|oast\\.(?:pro|live|site|online|fun|me))\\b"
|
|
4929
|
+
"regex": "\\b(?:interact\\.sh|oast\\.(?:pro|live|site|online|fun|me)|indusfacefinder\\.in|where\\.land|syhunt\\.net|tssrt\\.de|boardofcyber\\.io|assetnote-callback\\.com|praetorianlabs\\.dev|netspi\\.sh)\\b"
|
|
4959
4930
|
},
|
|
4960
4931
|
"operator": "match_regex"
|
|
4961
4932
|
}
|
|
@@ -4996,7 +4967,187 @@
|
|
|
4996
4967
|
"address": "graphql.server.all_resolvers"
|
|
4997
4968
|
}
|
|
4998
4969
|
],
|
|
4999
|
-
"regex": "\\b(?:\\.|(?:\\\\|&#)(?:0*46|x0*2e);)r87(?:\\.|(?:\\\\|&#)(?:0*46|x0*2e);)(?:me|com)\\b",
|
|
4970
|
+
"regex": "\\b(?:\\.|(?:\\\\|&#)(?:0*46|x0*2e);)?r87(?:\\.|(?:\\\\|&#)(?:0*46|x0*2e);)(?:me|com)\\b",
|
|
4971
|
+
"options": {
|
|
4972
|
+
"case_sensitive": false,
|
|
4973
|
+
"min_length": 7
|
|
4974
|
+
}
|
|
4975
|
+
},
|
|
4976
|
+
"operator": "match_regex"
|
|
4977
|
+
}
|
|
4978
|
+
],
|
|
4979
|
+
"transformers": []
|
|
4980
|
+
},
|
|
4981
|
+
{
|
|
4982
|
+
"id": "dog-913-009",
|
|
4983
|
+
"name": "WhiteHat Security OOB domain",
|
|
4984
|
+
"tags": {
|
|
4985
|
+
"type": "commercial_scanner",
|
|
4986
|
+
"category": "attack_attempt",
|
|
4987
|
+
"tool_name": "WhiteHatSecurity",
|
|
4988
|
+
"cwe": "200",
|
|
4989
|
+
"capec": "1000/118/169",
|
|
4990
|
+
"confidence": "0"
|
|
4991
|
+
},
|
|
4992
|
+
"conditions": [
|
|
4993
|
+
{
|
|
4994
|
+
"parameters": {
|
|
4995
|
+
"inputs": [
|
|
4996
|
+
{
|
|
4997
|
+
"address": "server.request.query"
|
|
4998
|
+
},
|
|
4999
|
+
{
|
|
5000
|
+
"address": "server.request.body"
|
|
5001
|
+
},
|
|
5002
|
+
{
|
|
5003
|
+
"address": "server.request.path_params"
|
|
5004
|
+
},
|
|
5005
|
+
{
|
|
5006
|
+
"address": "server.request.headers.no_cookies"
|
|
5007
|
+
},
|
|
5008
|
+
{
|
|
5009
|
+
"address": "grpc.server.request.message"
|
|
5010
|
+
},
|
|
5011
|
+
{
|
|
5012
|
+
"address": "graphql.server.all_resolvers"
|
|
5013
|
+
}
|
|
5014
|
+
],
|
|
5015
|
+
"regex": "\\bwhsec(?:\\.|(?:\\\\|&#)(?:0*46|x0*2e);)us\\b",
|
|
5016
|
+
"options": {
|
|
5017
|
+
"case_sensitive": false,
|
|
5018
|
+
"min_length": 8
|
|
5019
|
+
}
|
|
5020
|
+
},
|
|
5021
|
+
"operator": "match_regex"
|
|
5022
|
+
}
|
|
5023
|
+
],
|
|
5024
|
+
"transformers": []
|
|
5025
|
+
},
|
|
5026
|
+
{
|
|
5027
|
+
"id": "dog-913-010",
|
|
5028
|
+
"name": "Nessus OOB domain",
|
|
5029
|
+
"tags": {
|
|
5030
|
+
"type": "commercial_scanner",
|
|
5031
|
+
"category": "attack_attempt",
|
|
5032
|
+
"tool_name": "Nessus",
|
|
5033
|
+
"cwe": "200",
|
|
5034
|
+
"capec": "1000/118/169",
|
|
5035
|
+
"confidence": "0"
|
|
5036
|
+
},
|
|
5037
|
+
"conditions": [
|
|
5038
|
+
{
|
|
5039
|
+
"parameters": {
|
|
5040
|
+
"inputs": [
|
|
5041
|
+
{
|
|
5042
|
+
"address": "server.request.query"
|
|
5043
|
+
},
|
|
5044
|
+
{
|
|
5045
|
+
"address": "server.request.body"
|
|
5046
|
+
},
|
|
5047
|
+
{
|
|
5048
|
+
"address": "server.request.path_params"
|
|
5049
|
+
},
|
|
5050
|
+
{
|
|
5051
|
+
"address": "server.request.headers.no_cookies"
|
|
5052
|
+
},
|
|
5053
|
+
{
|
|
5054
|
+
"address": "grpc.server.request.message"
|
|
5055
|
+
},
|
|
5056
|
+
{
|
|
5057
|
+
"address": "graphql.server.all_resolvers"
|
|
5058
|
+
}
|
|
5059
|
+
],
|
|
5060
|
+
"regex": "\\b\\.nessus\\.org\\b",
|
|
5061
|
+
"options": {
|
|
5062
|
+
"case_sensitive": false,
|
|
5063
|
+
"min_length": 8
|
|
5064
|
+
}
|
|
5065
|
+
},
|
|
5066
|
+
"operator": "match_regex"
|
|
5067
|
+
}
|
|
5068
|
+
],
|
|
5069
|
+
"transformers": []
|
|
5070
|
+
},
|
|
5071
|
+
{
|
|
5072
|
+
"id": "dog-913-011",
|
|
5073
|
+
"name": "Watchtowr OOB domain",
|
|
5074
|
+
"tags": {
|
|
5075
|
+
"type": "commercial_scanner",
|
|
5076
|
+
"category": "attack_attempt",
|
|
5077
|
+
"tool_name": "Watchtowr",
|
|
5078
|
+
"cwe": "200",
|
|
5079
|
+
"capec": "1000/118/169",
|
|
5080
|
+
"confidence": "0"
|
|
5081
|
+
},
|
|
5082
|
+
"conditions": [
|
|
5083
|
+
{
|
|
5084
|
+
"parameters": {
|
|
5085
|
+
"inputs": [
|
|
5086
|
+
{
|
|
5087
|
+
"address": "server.request.query"
|
|
5088
|
+
},
|
|
5089
|
+
{
|
|
5090
|
+
"address": "server.request.body"
|
|
5091
|
+
},
|
|
5092
|
+
{
|
|
5093
|
+
"address": "server.request.path_params"
|
|
5094
|
+
},
|
|
5095
|
+
{
|
|
5096
|
+
"address": "server.request.headers.no_cookies"
|
|
5097
|
+
},
|
|
5098
|
+
{
|
|
5099
|
+
"address": "grpc.server.request.message"
|
|
5100
|
+
},
|
|
5101
|
+
{
|
|
5102
|
+
"address": "graphql.server.all_resolvers"
|
|
5103
|
+
}
|
|
5104
|
+
],
|
|
5105
|
+
"regex": "\\bwatchtowr\\.com\\b",
|
|
5106
|
+
"options": {
|
|
5107
|
+
"case_sensitive": false,
|
|
5108
|
+
"min_length": 8
|
|
5109
|
+
}
|
|
5110
|
+
},
|
|
5111
|
+
"operator": "match_regex"
|
|
5112
|
+
}
|
|
5113
|
+
],
|
|
5114
|
+
"transformers": []
|
|
5115
|
+
},
|
|
5116
|
+
{
|
|
5117
|
+
"id": "dog-913-012",
|
|
5118
|
+
"name": "AppCheck NG OOB domain",
|
|
5119
|
+
"tags": {
|
|
5120
|
+
"type": "commercial_scanner",
|
|
5121
|
+
"category": "attack_attempt",
|
|
5122
|
+
"tool_name": "AppCheckNG",
|
|
5123
|
+
"cwe": "200",
|
|
5124
|
+
"capec": "1000/118/169",
|
|
5125
|
+
"confidence": "0"
|
|
5126
|
+
},
|
|
5127
|
+
"conditions": [
|
|
5128
|
+
{
|
|
5129
|
+
"parameters": {
|
|
5130
|
+
"inputs": [
|
|
5131
|
+
{
|
|
5132
|
+
"address": "server.request.query"
|
|
5133
|
+
},
|
|
5134
|
+
{
|
|
5135
|
+
"address": "server.request.body"
|
|
5136
|
+
},
|
|
5137
|
+
{
|
|
5138
|
+
"address": "server.request.path_params"
|
|
5139
|
+
},
|
|
5140
|
+
{
|
|
5141
|
+
"address": "server.request.headers.no_cookies"
|
|
5142
|
+
},
|
|
5143
|
+
{
|
|
5144
|
+
"address": "grpc.server.request.message"
|
|
5145
|
+
},
|
|
5146
|
+
{
|
|
5147
|
+
"address": "graphql.server.all_resolvers"
|
|
5148
|
+
}
|
|
5149
|
+
],
|
|
5150
|
+
"regex": "\\bptst\\.io\\b",
|
|
5000
5151
|
"options": {
|
|
5001
5152
|
"case_sensitive": false,
|
|
5002
5153
|
"min_length": 7
|
|
@@ -5048,6 +5199,50 @@
|
|
|
5048
5199
|
],
|
|
5049
5200
|
"transformers": []
|
|
5050
5201
|
},
|
|
5202
|
+
{
|
|
5203
|
+
"id": "dog-932-100",
|
|
5204
|
+
"name": "Shell spawn executing network command",
|
|
5205
|
+
"tags": {
|
|
5206
|
+
"type": "command_injection",
|
|
5207
|
+
"category": "attack_attempt",
|
|
5208
|
+
"cwe": "77",
|
|
5209
|
+
"capec": "1000/152/248/88",
|
|
5210
|
+
"confidence": "0"
|
|
5211
|
+
},
|
|
5212
|
+
"conditions": [
|
|
5213
|
+
{
|
|
5214
|
+
"parameters": {
|
|
5215
|
+
"inputs": [
|
|
5216
|
+
{
|
|
5217
|
+
"address": "server.request.query"
|
|
5218
|
+
},
|
|
5219
|
+
{
|
|
5220
|
+
"address": "server.request.body"
|
|
5221
|
+
},
|
|
5222
|
+
{
|
|
5223
|
+
"address": "server.request.path_params"
|
|
5224
|
+
},
|
|
5225
|
+
{
|
|
5226
|
+
"address": "server.request.headers.no_cookies"
|
|
5227
|
+
},
|
|
5228
|
+
{
|
|
5229
|
+
"address": "grpc.server.request.message"
|
|
5230
|
+
},
|
|
5231
|
+
{
|
|
5232
|
+
"address": "graphql.server.all_resolvers"
|
|
5233
|
+
}
|
|
5234
|
+
],
|
|
5235
|
+
"regex": "(?:(?:['\"\\x60({|;&]|(?:^|['\"\\x60({|;&])(?:cmd(?:\\.exe)?\\s+(?:/\\w(?::\\w+)?\\s+)*))(?:ping|curl|wget|telnet)|\\bnslookup)[\\s,]",
|
|
5236
|
+
"options": {
|
|
5237
|
+
"case_sensitive": true,
|
|
5238
|
+
"min_length": 5
|
|
5239
|
+
}
|
|
5240
|
+
},
|
|
5241
|
+
"operator": "match_regex"
|
|
5242
|
+
}
|
|
5243
|
+
],
|
|
5244
|
+
"transformers": []
|
|
5245
|
+
},
|
|
5051
5246
|
{
|
|
5052
5247
|
"id": "dog-934-001",
|
|
5053
5248
|
"name": "XXE - XML file loads external entity",
|
|
@@ -5056,7 +5251,7 @@
|
|
|
5056
5251
|
"category": "attack_attempt",
|
|
5057
5252
|
"cwe": "91",
|
|
5058
5253
|
"capec": "1000/152/248/250",
|
|
5059
|
-
"confidence": "
|
|
5254
|
+
"confidence": "1"
|
|
5060
5255
|
},
|
|
5061
5256
|
"conditions": [
|
|
5062
5257
|
{
|
|
@@ -5091,7 +5286,7 @@
|
|
|
5091
5286
|
"category": "attack_attempt",
|
|
5092
5287
|
"cwe": "83",
|
|
5093
5288
|
"capec": "1000/152/242/63/591/243",
|
|
5094
|
-
"confidence": "
|
|
5289
|
+
"confidence": "1"
|
|
5095
5290
|
},
|
|
5096
5291
|
"conditions": [
|
|
5097
5292
|
{
|
|
@@ -5125,7 +5320,7 @@
|
|
|
5125
5320
|
"address": "graphql.server.all_resolvers"
|
|
5126
5321
|
}
|
|
5127
5322
|
],
|
|
5128
|
-
"regex": "<(?:iframe|esi:include)(?:(?:\\s|/)*\\w+=[\"'\\w]+)*(?:\\s|/)*src(?:doc)?=[\"']?(?:data:|javascript:|http:|//)[^\\s'\"]+['\"]?",
|
|
5323
|
+
"regex": "<(?:iframe|esi:include)(?:(?:\\s|/)*\\w+=[\"'\\w]+)*(?:\\s|/)*src(?:doc)?=[\"']?(?:data:|javascript:|http:|dns:|//)[^\\s'\"]+['\"]?",
|
|
5129
5324
|
"options": {
|
|
5130
5325
|
"min_length": 14
|
|
5131
5326
|
}
|
|
@@ -5171,7 +5366,7 @@
|
|
|
5171
5366
|
"address": "graphql.server.all_resolvers"
|
|
5172
5367
|
}
|
|
5173
5368
|
],
|
|
5174
|
-
"regex": "https?:\\/\\/(?:.*\\.)?(?:bxss\\.in|xss\\.ht|js\\.rip)",
|
|
5369
|
+
"regex": "https?:\\/\\/(?:.*\\.)?(?:bxss\\.(?:in|me)|xss\\.ht|js\\.rip)",
|
|
5175
5370
|
"options": {
|
|
5176
5371
|
"case_sensitive": false
|
|
5177
5372
|
}
|
|
@@ -6110,7 +6305,7 @@
|
|
|
6110
6305
|
"address": "graphql.server.all_resolvers"
|
|
6111
6306
|
}
|
|
6112
6307
|
],
|
|
6113
|
-
"regex": "(http|https):\\/\\/(?:.*\\.)?(?:burpcollaborator\\.net|localtest\\.me|mail\\.ebc\\.apple\\.com|bugbounty\\.dod\\.network|.*\\.[nx]ip\\.io|oastify\\.com|oast\\.(?:pro|live|site|online|fun|me)|sslip\\.io|requestbin\\.com|requestbin\\.net|hookbin\\.com|webhook\\.site|canarytokens\\.com|interact\\.sh|ngrok\\.io|bugbounty\\.click|prbly\\.win|qualysperiscope\\.com|vii
|
|
6308
|
+
"regex": "(http|https):\\/\\/(?:.*\\.)?(?:burpcollaborator\\.net|localtest\\.me|mail\\.ebc\\.apple\\.com|bugbounty\\.dod\\.network|.*\\.[nx]ip\\.io|oastify\\.com|oast\\.(?:pro|live|site|online|fun|me)|sslip\\.io|requestbin\\.com|requestbin\\.net|hookbin\\.com|webhook\\.site|canarytokens\\.com|interact\\.sh|ngrok\\.io|bugbounty\\.click|prbly\\.win|qualysperiscope\\.com|vii\\.one|act1on3\\.ru)"
|
|
6114
6309
|
},
|
|
6115
6310
|
"operator": "match_regex"
|
|
6116
6311
|
}
|
|
@@ -7610,6 +7805,35 @@
|
|
|
7610
7805
|
],
|
|
7611
7806
|
"transformers": []
|
|
7612
7807
|
},
|
|
7808
|
+
{
|
|
7809
|
+
"id": "ua0-600-63x",
|
|
7810
|
+
"name": "FeroxBuster",
|
|
7811
|
+
"tags": {
|
|
7812
|
+
"type": "attack_tool",
|
|
7813
|
+
"category": "attack_attempt",
|
|
7814
|
+
"cwe": "200",
|
|
7815
|
+
"capec": "1000/118/169",
|
|
7816
|
+
"tool_name": "feroxbuster",
|
|
7817
|
+
"confidence": "1"
|
|
7818
|
+
},
|
|
7819
|
+
"conditions": [
|
|
7820
|
+
{
|
|
7821
|
+
"parameters": {
|
|
7822
|
+
"inputs": [
|
|
7823
|
+
{
|
|
7824
|
+
"address": "server.request.headers.no_cookies",
|
|
7825
|
+
"key_path": [
|
|
7826
|
+
"user-agent"
|
|
7827
|
+
]
|
|
7828
|
+
}
|
|
7829
|
+
],
|
|
7830
|
+
"regex": "^feroxbuster/"
|
|
7831
|
+
},
|
|
7832
|
+
"operator": "match_regex"
|
|
7833
|
+
}
|
|
7834
|
+
],
|
|
7835
|
+
"transformers": []
|
|
7836
|
+
},
|
|
7613
7837
|
{
|
|
7614
7838
|
"id": "ua0-600-6xx",
|
|
7615
7839
|
"name": "Stealthy scanner",
|
|
@@ -7631,7 +7855,7 @@
|
|
|
7631
7855
|
]
|
|
7632
7856
|
}
|
|
7633
7857
|
],
|
|
7634
|
-
"regex": "mozilla/4\\.0 \\(compatible(; msie (?:6\\.0; win32|4\\.0; Windows NT))?\\)",
|
|
7858
|
+
"regex": "mozilla/4\\.0 \\(compatible(; msie (?:6\\.0; (?:win32|Windows NT 5\\.0)|4\\.0; Windows NT))?\\)",
|
|
7635
7859
|
"options": {
|
|
7636
7860
|
"case_sensitive": false
|
|
7637
7861
|
}
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
const Limiter = require('../rate_limiter')
|
|
4
4
|
const { storage } = require('../../../datadog-core')
|
|
5
5
|
const web = require('../plugins/util/web')
|
|
6
|
+
const { ipHeaderList } = require('../plugins/util/ip_extractor')
|
|
6
7
|
const {
|
|
7
8
|
incrementWafInitMetric,
|
|
8
9
|
updateWafRequestsMetricTags,
|
|
@@ -13,54 +14,49 @@ const {
|
|
|
13
14
|
// default limiter, configurable with setRateLimit()
|
|
14
15
|
let limiter = new Limiter(100)
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
'accept-encoding',
|
|
20
|
-
'accept-language',
|
|
17
|
+
const metricsQueue = new Map()
|
|
18
|
+
|
|
19
|
+
const contentHeaderList = [
|
|
21
20
|
'content-encoding',
|
|
22
21
|
'content-language',
|
|
23
22
|
'content-length',
|
|
24
|
-
'content-type'
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
'content-type'
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
const REQUEST_HEADERS_MAP = mapHeaderAndTags([
|
|
27
|
+
'accept',
|
|
28
|
+
'accept-encoding',
|
|
29
|
+
'accept-language',
|
|
27
30
|
'host',
|
|
28
|
-
'true-client-ip',
|
|
29
31
|
'user-agent',
|
|
32
|
+
'forwarded',
|
|
30
33
|
'via',
|
|
31
|
-
'x-client-ip',
|
|
32
|
-
'x-cluster-client-ip',
|
|
33
|
-
'x-forwarded',
|
|
34
|
-
'x-forwarded-for',
|
|
35
|
-
'x-real-ip'
|
|
36
|
-
]
|
|
37
34
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
'content-length',
|
|
42
|
-
'content-type'
|
|
43
|
-
]
|
|
35
|
+
...ipHeaderList,
|
|
36
|
+
...contentHeaderList
|
|
37
|
+
], 'http.request.headers.')
|
|
44
38
|
|
|
45
|
-
const
|
|
39
|
+
const RESPONSE_HEADERS_MAP = mapHeaderAndTags(contentHeaderList, 'http.response.headers.')
|
|
46
40
|
|
|
47
|
-
function
|
|
41
|
+
function mapHeaderAndTags (headerList, tagPrefix) {
|
|
42
|
+
return new Map(headerList.map(headerName => [headerName, `${tagPrefix}${formatHeaderName(headerName)}`]))
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function filterHeaders (headers, map) {
|
|
48
46
|
const result = {}
|
|
49
47
|
|
|
50
48
|
if (!headers) return result
|
|
51
49
|
|
|
52
|
-
for (
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
result[`${prefix}${formatHeaderName(headerName)}`] = '' + headers[headerName]
|
|
50
|
+
for (const [headerName, tagName] of map) {
|
|
51
|
+
const headerValue = headers[headerName]
|
|
52
|
+
if (headerValue) {
|
|
53
|
+
result[tagName] = '' + headerValue
|
|
57
54
|
}
|
|
58
55
|
}
|
|
59
56
|
|
|
60
57
|
return result
|
|
61
58
|
}
|
|
62
59
|
|
|
63
|
-
// TODO: this can be precomputed at start time
|
|
64
60
|
function formatHeaderName (name) {
|
|
65
61
|
return name
|
|
66
62
|
.trim()
|
|
@@ -86,7 +82,7 @@ function reportWafInit (wafVersion, rulesVersion, diagnosticsRules = {}) {
|
|
|
86
82
|
function reportMetrics (metrics) {
|
|
87
83
|
// TODO: metrics should be incremental, there already is an RFC to report metrics
|
|
88
84
|
const store = storage.getStore()
|
|
89
|
-
const rootSpan = store
|
|
85
|
+
const rootSpan = store?.req && web.root(store.req)
|
|
90
86
|
if (!rootSpan) return
|
|
91
87
|
|
|
92
88
|
if (metrics.duration) {
|
|
@@ -106,13 +102,13 @@ function reportMetrics (metrics) {
|
|
|
106
102
|
|
|
107
103
|
function reportAttack (attackData) {
|
|
108
104
|
const store = storage.getStore()
|
|
109
|
-
const req = store
|
|
105
|
+
const req = store?.req
|
|
110
106
|
const rootSpan = web.root(req)
|
|
111
107
|
if (!rootSpan) return
|
|
112
108
|
|
|
113
109
|
const currentTags = rootSpan.context()._tags
|
|
114
110
|
|
|
115
|
-
const newTags = filterHeaders(req.headers,
|
|
111
|
+
const newTags = filterHeaders(req.headers, REQUEST_HEADERS_MAP)
|
|
116
112
|
|
|
117
113
|
newTags['appsec.event'] = 'true'
|
|
118
114
|
|
|
@@ -158,7 +154,7 @@ function finishRequest (req, res) {
|
|
|
158
154
|
|
|
159
155
|
if (!rootSpan.context()._tags['appsec.event']) return
|
|
160
156
|
|
|
161
|
-
const newTags = filterHeaders(res.getHeaders(),
|
|
157
|
+
const newTags = filterHeaders(res.getHeaders(), RESPONSE_HEADERS_MAP)
|
|
162
158
|
|
|
163
159
|
if (req.route && typeof req.route.path === 'string') {
|
|
164
160
|
newTags['http.endpoint'] = req.route.path
|
|
@@ -180,5 +176,6 @@ module.exports = {
|
|
|
180
176
|
reportAttack,
|
|
181
177
|
reportWafUpdate: incrementWafUpdatesMetric,
|
|
182
178
|
finishRequest,
|
|
183
|
-
setRateLimit
|
|
179
|
+
setRateLimit,
|
|
180
|
+
mapHeaderAndTags
|
|
184
181
|
}
|
package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-itr-configuration.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
const request = require('../../exporters/common/request')
|
|
2
2
|
const id = require('../../id')
|
|
3
|
+
const log = require('../../log')
|
|
3
4
|
|
|
4
5
|
function getItrConfiguration ({
|
|
5
6
|
url,
|
|
@@ -66,13 +67,24 @@ function getItrConfiguration ({
|
|
|
66
67
|
try {
|
|
67
68
|
const {
|
|
68
69
|
data: {
|
|
69
|
-
attributes
|
|
70
|
-
code_coverage: isCodeCoverageEnabled,
|
|
71
|
-
tests_skipping: isSuitesSkippingEnabled
|
|
72
|
-
}
|
|
70
|
+
attributes
|
|
73
71
|
}
|
|
74
72
|
} = JSON.parse(res)
|
|
75
73
|
|
|
74
|
+
let isCodeCoverageEnabled = attributes.code_coverage
|
|
75
|
+
let isSuitesSkippingEnabled = attributes.tests_skipping
|
|
76
|
+
|
|
77
|
+
log.debug(() => `Remote settings: ${{ isCodeCoverageEnabled, isSuitesSkippingEnabled }}`)
|
|
78
|
+
|
|
79
|
+
if (process.env.DD_CIVISIBILITY_DANGEROUSLY_FORCE_COVERAGE) {
|
|
80
|
+
isCodeCoverageEnabled = true
|
|
81
|
+
log.debug(() => 'Dangerously set code coverage to true')
|
|
82
|
+
}
|
|
83
|
+
if (process.env.DD_CIVISIBILITY_DANGEROUSLY_FORCE_TEST_SKIPPING) {
|
|
84
|
+
isSuitesSkippingEnabled = true
|
|
85
|
+
log.debug(() => 'Dangerously set test skipping to true')
|
|
86
|
+
}
|
|
87
|
+
|
|
76
88
|
done(null, { isCodeCoverageEnabled, isSuitesSkippingEnabled })
|
|
77
89
|
} catch (err) {
|
|
78
90
|
done(err)
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const request = require('../../exporters/common/request')
|
|
2
|
+
const log = require('../../log')
|
|
2
3
|
|
|
3
4
|
function getSkippableSuites ({
|
|
4
5
|
url,
|
|
@@ -73,6 +74,7 @@ function getSkippableSuites ({
|
|
|
73
74
|
}
|
|
74
75
|
return { suite, name }
|
|
75
76
|
})
|
|
77
|
+
log.debug(() => `Number of received skippable ${testLevel}s: ${skippableSuites.length}`)
|
|
76
78
|
done(null, skippableSuites)
|
|
77
79
|
} catch (err) {
|
|
78
80
|
done(err)
|