dd-trace 5.53.0 → 5.55.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 -1
- package/ci/cypress/plugin.js +8 -0
- package/ci/cypress/polyfills.js +23 -0
- package/ci/init.js +8 -7
- package/index.d.ts +33 -16
- package/initialize.mjs +5 -6
- package/package.json +40 -38
- package/packages/datadog-code-origin/index.js +22 -4
- package/packages/datadog-core/src/utils/src/get.js +1 -1
- package/packages/datadog-core/src/utils/src/has.js +1 -1
- package/packages/datadog-core/src/utils/src/kebabcase.js +4 -6
- package/packages/datadog-core/src/utils/src/parse-tags.js +1 -1
- package/packages/datadog-core/src/utils/src/pick.js +2 -2
- package/packages/datadog-core/src/utils/src/set.js +1 -1
- package/packages/datadog-core/src/utils/src/uniq.js +1 -1
- package/packages/datadog-instrumentations/src/amqp10.js +19 -17
- package/packages/datadog-instrumentations/src/amqplib.js +52 -35
- package/packages/datadog-instrumentations/src/apollo.js +2 -2
- package/packages/datadog-instrumentations/src/aws-sdk.js +1 -1
- package/packages/datadog-instrumentations/src/cassandra-driver.js +10 -10
- package/packages/datadog-instrumentations/src/child_process.js +1 -2
- package/packages/datadog-instrumentations/src/confluentinc-kafka-javascript.js +89 -75
- package/packages/datadog-instrumentations/src/cookie-parser.js +1 -1
- package/packages/datadog-instrumentations/src/couchbase.js +6 -9
- package/packages/datadog-instrumentations/src/cucumber.js +108 -68
- package/packages/datadog-instrumentations/src/cypress.js +2 -1
- package/packages/datadog-instrumentations/src/dns.js +5 -5
- package/packages/datadog-instrumentations/src/elasticsearch.js +9 -10
- package/packages/datadog-instrumentations/src/fastify.js +7 -9
- package/packages/datadog-instrumentations/src/fs.js +1 -1
- package/packages/datadog-instrumentations/src/google-cloud-pubsub.js +35 -43
- package/packages/datadog-instrumentations/src/graphql.js +7 -10
- package/packages/datadog-instrumentations/src/grpc/client.js +11 -23
- package/packages/datadog-instrumentations/src/grpc/server.js +7 -20
- package/packages/datadog-instrumentations/src/hapi.js +10 -11
- package/packages/datadog-instrumentations/src/helpers/extract-package-and-module-path.js +16 -10
- package/packages/datadog-instrumentations/src/helpers/fetch.js +4 -5
- package/packages/datadog-instrumentations/src/helpers/hook.js +2 -3
- package/packages/datadog-instrumentations/src/helpers/hooks.js +0 -1
- package/packages/datadog-instrumentations/src/helpers/instrument.js +1 -41
- package/packages/datadog-instrumentations/src/helpers/register.js +11 -12
- package/packages/datadog-instrumentations/src/http/client.js +14 -20
- package/packages/datadog-instrumentations/src/jest.js +201 -143
- package/packages/datadog-instrumentations/src/kafkajs.js +52 -44
- package/packages/datadog-instrumentations/src/knex.js +4 -4
- package/packages/datadog-instrumentations/src/koa.js +2 -3
- package/packages/datadog-instrumentations/src/ldapjs.js +3 -4
- package/packages/datadog-instrumentations/src/mariadb.js +49 -65
- package/packages/datadog-instrumentations/src/mocha/main.js +116 -73
- package/packages/datadog-instrumentations/src/mocha/utils.js +36 -12
- package/packages/datadog-instrumentations/src/mocha/worker.js +6 -0
- package/packages/datadog-instrumentations/src/mocha.js +3 -1
- package/packages/datadog-instrumentations/src/mongodb-core.js +1 -1
- package/packages/datadog-instrumentations/src/mysql.js +30 -37
- package/packages/datadog-instrumentations/src/mysql2.js +53 -47
- package/packages/datadog-instrumentations/src/net.js +1 -1
- package/packages/datadog-instrumentations/src/next.js +1 -0
- package/packages/datadog-instrumentations/src/nyc.js +3 -2
- package/packages/datadog-instrumentations/src/openai.js +22 -24
- package/packages/datadog-instrumentations/src/oracledb.js +1 -1
- package/packages/datadog-instrumentations/src/otel-sdk-trace.js +4 -3
- package/packages/datadog-instrumentations/src/pg.js +3 -5
- package/packages/datadog-instrumentations/src/playwright.js +123 -83
- package/packages/datadog-instrumentations/src/protobufjs.js +3 -4
- package/packages/datadog-instrumentations/src/redis.js +4 -4
- package/packages/datadog-instrumentations/src/restify.js +9 -13
- package/packages/datadog-instrumentations/src/rhea.js +42 -54
- package/packages/datadog-instrumentations/src/router.js +30 -32
- package/packages/datadog-instrumentations/src/tedious.js +2 -3
- package/packages/datadog-instrumentations/src/vitest.js +87 -52
- package/packages/datadog-plugin-amqp10/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqp10/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/client.js +6 -2
- package/packages/datadog-plugin-amqplib/src/consumer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/producer.js +7 -3
- package/packages/datadog-plugin-amqplib/src/util.js +1 -1
- package/packages/datadog-plugin-apollo/src/gateway/request.js +5 -6
- package/packages/datadog-plugin-apollo/src/gateway/validate.js +2 -3
- package/packages/datadog-plugin-avsc/src/schema_iterator.js +12 -12
- package/packages/datadog-plugin-aws-sdk/src/base.js +15 -10
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/tracing.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/bedrockruntime/utils.js +13 -13
- package/packages/datadog-plugin-aws-sdk/src/services/cloudwatchlogs.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/dynamodb.js +28 -43
- package/packages/datadog-plugin-aws-sdk/src/services/eventbridge.js +2 -2
- package/packages/datadog-plugin-aws-sdk/src/services/kinesis.js +10 -11
- package/packages/datadog-plugin-aws-sdk/src/services/lambda.js +4 -6
- package/packages/datadog-plugin-aws-sdk/src/services/redshift.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/s3.js +3 -5
- package/packages/datadog-plugin-aws-sdk/src/services/sns.js +2 -3
- package/packages/datadog-plugin-aws-sdk/src/services/sqs.js +11 -15
- package/packages/datadog-plugin-aws-sdk/src/services/stepfunctions.js +1 -1
- package/packages/datadog-plugin-aws-sdk/src/util.js +5 -6
- package/packages/datadog-plugin-cassandra-driver/src/index.js +1 -1
- package/packages/datadog-plugin-child_process/src/index.js +4 -4
- package/packages/datadog-plugin-child_process/src/scrub-cmd-params.js +23 -23
- package/packages/datadog-plugin-cucumber/src/index.js +60 -4
- package/packages/datadog-plugin-cypress/src/cypress-plugin.js +99 -28
- package/packages/datadog-plugin-cypress/src/plugin.js +11 -1
- package/packages/datadog-plugin-cypress/src/support.js +24 -5
- package/packages/datadog-plugin-dd-trace-api/src/index.js +2 -1
- package/packages/datadog-plugin-elasticsearch/src/index.js +1 -1
- package/packages/datadog-plugin-express/src/code_origin.js +30 -0
- package/packages/datadog-plugin-express/src/index.js +10 -12
- package/packages/datadog-plugin-express/src/tracing.js +19 -0
- package/packages/datadog-plugin-google-cloud-pubsub/src/client.js +7 -3
- package/packages/datadog-plugin-google-cloud-pubsub/src/consumer.js +12 -7
- package/packages/datadog-plugin-google-cloud-pubsub/src/producer.js +6 -2
- package/packages/datadog-plugin-google-cloud-vertexai/src/tracing.js +27 -10
- package/packages/datadog-plugin-graphql/src/execute.js +2 -2
- package/packages/datadog-plugin-graphql/src/index.js +10 -8
- package/packages/datadog-plugin-graphql/src/resolve.js +19 -12
- package/packages/datadog-plugin-graphql/src/tools/index.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/signature.js +1 -0
- package/packages/datadog-plugin-graphql/src/tools/transforms.js +1 -0
- package/packages/datadog-plugin-grpc/src/client.js +2 -2
- package/packages/datadog-plugin-grpc/src/util.js +2 -2
- package/packages/datadog-plugin-http/src/client.js +23 -13
- package/packages/datadog-plugin-http2/src/client.js +24 -25
- package/packages/datadog-plugin-jest/src/index.js +26 -23
- package/packages/datadog-plugin-jest/src/util.js +8 -8
- package/packages/datadog-plugin-kafkajs/src/batch-consumer.js +3 -1
- package/packages/datadog-plugin-kafkajs/src/consumer.js +9 -5
- package/packages/datadog-plugin-kafkajs/src/producer.js +8 -3
- package/packages/datadog-plugin-kafkajs/src/utils.js +1 -1
- package/packages/datadog-plugin-langchain/src/handlers/chain.js +7 -7
- package/packages/datadog-plugin-langchain/src/handlers/embedding.js +2 -2
- package/packages/datadog-plugin-langchain/src/handlers/language_models/chat_model.js +6 -4
- package/packages/datadog-plugin-langchain/src/handlers/language_models/llm.js +5 -4
- package/packages/datadog-plugin-langchain/src/tracing.js +11 -10
- package/packages/datadog-plugin-mariadb/src/index.js +3 -9
- package/packages/datadog-plugin-mocha/src/index.js +39 -14
- package/packages/datadog-plugin-mongodb-core/src/index.js +3 -2
- package/packages/datadog-plugin-mysql/src/index.js +22 -9
- package/packages/datadog-plugin-mysql2/src/index.js +16 -0
- package/packages/datadog-plugin-net/src/tcp.js +1 -1
- package/packages/datadog-plugin-next/src/index.js +7 -6
- package/packages/datadog-plugin-openai/src/services.js +6 -10
- package/packages/datadog-plugin-openai/src/tracing.js +12 -18
- package/packages/datadog-plugin-oracledb/src/index.js +1 -1
- package/packages/datadog-plugin-playwright/src/index.js +25 -4
- package/packages/datadog-plugin-protobufjs/src/schema_iterator.js +8 -9
- package/packages/datadog-plugin-redis/src/index.js +2 -4
- package/packages/datadog-plugin-rhea/src/consumer.js +8 -6
- package/packages/datadog-plugin-rhea/src/producer.js +5 -2
- package/packages/datadog-plugin-router/src/index.js +1 -1
- package/packages/datadog-plugin-selenium/src/index.js +1 -6
- package/packages/datadog-plugin-vitest/src/index.js +52 -35
- package/packages/datadog-shimmer/src/shimmer.js +4 -8
- package/packages/dd-trace/src/appsec/api_security_sampler.js +2 -2
- package/packages/dd-trace/src/appsec/blocked_templates.js +1 -1
- package/packages/dd-trace/src/appsec/blocking.js +6 -20
- package/packages/dd-trace/src/appsec/iast/analyzers/analyzers.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-password-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secret-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hardcoded-secrets-rules.js +0 -1
- package/packages/dd-trace/src/appsec/iast/analyzers/hsts-header-missing-analyzer.js +7 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/missing-header-analyzer.js +5 -8
- package/packages/dd-trace/src/appsec/iast/analyzers/nosql-injection-mongodb-analyzer.js +4 -0
- package/packages/dd-trace/src/appsec/iast/analyzers/path-traversal-analyzer.js +9 -12
- package/packages/dd-trace/src/appsec/iast/analyzers/vulnerability-analyzer.js +5 -4
- package/packages/dd-trace/src/appsec/iast/context/context-plugin.js +2 -3
- package/packages/dd-trace/src/appsec/iast/iast-plugin.js +3 -3
- package/packages/dd-trace/src/appsec/iast/index.js +1 -0
- package/packages/dd-trace/src/appsec/iast/overhead-controller.js +102 -7
- package/packages/dd-trace/src/appsec/iast/path-line.js +7 -8
- package/packages/dd-trace/src/appsec/iast/security-controls/index.js +16 -24
- package/packages/dd-trace/src/appsec/iast/security-controls/parser.js +6 -6
- package/packages/dd-trace/src/appsec/iast/taint-tracking/filter.js +2 -2
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations-taint-object.js +3 -3
- package/packages/dd-trace/src/appsec/iast/taint-tracking/operations.js +4 -28
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugin.js +2 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/plugins/kafka.js +3 -4
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter-esm.mjs +1 -1
- package/packages/dd-trace/src/appsec/iast/taint-tracking/rewriter.js +7 -8
- package/packages/dd-trace/src/appsec/iast/taint-tracking/taint-tracking-impl.js +2 -2
- package/packages/dd-trace/src/appsec/iast/telemetry/span-tags.js +7 -7
- package/packages/dd-trace/src/appsec/iast/telemetry/verbosity.js +2 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/range-utils.js +10 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/command-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/ldap-sensitive-analyzer.js +1 -1
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/sql-sensitive-analyzer.js +7 -7
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-handler.js +23 -28
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-regex.js +3 -3
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/index.js +4 -4
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/utils.js +6 -11
- package/packages/dd-trace/src/appsec/iast/vulnerabilities.js +0 -1
- package/packages/dd-trace/src/appsec/iast/vulnerability-reporter.js +9 -11
- package/packages/dd-trace/src/appsec/index.js +5 -5
- package/packages/dd-trace/src/appsec/rasp/index.js +15 -15
- package/packages/dd-trace/src/appsec/rasp/lfi.js +2 -1
- package/packages/dd-trace/src/appsec/reporter.js +232 -41
- package/packages/dd-trace/src/appsec/rule_manager.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/set_user.js +2 -2
- package/packages/dd-trace/src/appsec/sdk/track_event.js +3 -3
- package/packages/dd-trace/src/appsec/stack_trace.js +2 -4
- package/packages/dd-trace/src/appsec/telemetry/index.js +31 -1
- package/packages/dd-trace/src/appsec/telemetry/rasp.js +3 -5
- package/packages/dd-trace/src/appsec/telemetry/waf.js +3 -5
- package/packages/dd-trace/src/appsec/user_tracking.js +3 -5
- package/packages/dd-trace/src/appsec/waf/waf_context_wrapper.js +8 -4
- package/packages/dd-trace/src/azure_metadata.js +9 -9
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/index.js +9 -8
- package/packages/dd-trace/src/ci-visibility/dynamic-instrumentation/worker/index.js +2 -2
- package/packages/dd-trace/src/ci-visibility/early-flake-detection/get-known-tests.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agent-proxy/index.js +3 -3
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/coverage-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/di-logs-writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/agentless/writer.js +3 -2
- package/packages/dd-trace/src/ci-visibility/exporters/ci-visibility-exporter.js +6 -4
- package/packages/dd-trace/src/ci-visibility/exporters/git/git_metadata.js +6 -5
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/index.js +7 -6
- package/packages/dd-trace/src/ci-visibility/exporters/test-worker/writer.js +0 -2
- package/packages/dd-trace/src/ci-visibility/intelligent-test-runner/get-skippable-suites.js +3 -2
- package/packages/dd-trace/src/ci-visibility/log-submission/log-submission-plugin.js +5 -4
- package/packages/dd-trace/src/ci-visibility/requests/get-library-configuration.js +12 -8
- package/packages/dd-trace/src/ci-visibility/telemetry.js +4 -0
- package/packages/dd-trace/src/ci-visibility/test-management/get-test-management-tests.js +3 -2
- package/packages/dd-trace/src/config-helper.js +89 -0
- package/packages/dd-trace/src/config.js +159 -129
- package/packages/dd-trace/src/config_stable.js +10 -7
- package/packages/dd-trace/src/datastreams/encoding.js +9 -9
- package/packages/dd-trace/src/datastreams/fnv.js +2 -2
- package/packages/dd-trace/src/datastreams/pathway.js +4 -4
- package/packages/dd-trace/src/datastreams/processor.js +5 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_builder.js +7 -7
- package/packages/dd-trace/src/datastreams/schemas/schema_sampler.js +4 -6
- package/packages/dd-trace/src/datastreams/size.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/breakpoints.js +75 -69
- package/packages/dd-trace/src/debugger/devtools_client/condition.js +7 -10
- package/packages/dd-trace/src/debugger/devtools_client/defaults.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/index.js +9 -2
- package/packages/dd-trace/src/debugger/devtools_client/remote_config.js +18 -38
- package/packages/dd-trace/src/debugger/devtools_client/send.js +3 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/collector.js +1 -2
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/index.js +1 -1
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/processor.js +11 -14
- package/packages/dd-trace/src/debugger/devtools_client/snapshot/redaction.js +4 -4
- package/packages/dd-trace/src/debugger/devtools_client/source-maps.js +2 -10
- package/packages/dd-trace/src/debugger/devtools_client/state.js +10 -3
- package/packages/dd-trace/src/debugger/index.js +1 -0
- package/packages/dd-trace/src/dogstatsd.js +7 -6
- package/packages/dd-trace/src/encode/0.4.js +14 -11
- package/packages/dd-trace/src/encode/0.5.js +4 -6
- package/packages/dd-trace/src/encode/agentless-ci-visibility.js +8 -8
- package/packages/dd-trace/src/encode/coverage-ci-visibility.js +1 -1
- package/packages/dd-trace/src/encode/tags-processors.js +1 -1
- package/packages/dd-trace/src/exporter.js +7 -6
- package/packages/dd-trace/src/exporters/agent/writer.js +1 -5
- package/packages/dd-trace/src/exporters/common/docker.js +4 -3
- package/packages/dd-trace/src/exporters/common/form-data.js +6 -4
- package/packages/dd-trace/src/exporters/common/request.js +5 -2
- package/packages/dd-trace/src/exporters/common/util.js +4 -2
- package/packages/dd-trace/src/external-logger/src/index.js +5 -5
- package/packages/dd-trace/src/flare/file.js +1 -5
- package/packages/dd-trace/src/format.js +1 -1
- package/packages/dd-trace/src/git_properties.js +1 -1
- package/packages/dd-trace/src/id.js +15 -9
- package/packages/dd-trace/src/iitm.js +10 -22
- package/packages/dd-trace/src/index.js +4 -3
- package/packages/dd-trace/src/lambda/handler.js +7 -6
- package/packages/dd-trace/src/lambda/index.js +2 -1
- package/packages/dd-trace/src/lambda/runtime/patch.js +7 -6
- package/packages/dd-trace/src/lambda/runtime/ritm.js +4 -3
- package/packages/dd-trace/src/llmobs/constants/tags.js +1 -0
- package/packages/dd-trace/src/llmobs/index.js +21 -5
- package/packages/dd-trace/src/llmobs/noop.js +18 -20
- package/packages/dd-trace/src/llmobs/plugins/bedrockruntime.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chain.js +2 -6
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/chat_model.js +3 -3
- package/packages/dd-trace/src/llmobs/plugins/langchain/handlers/index.js +11 -13
- package/packages/dd-trace/src/llmobs/plugins/langchain/index.js +6 -6
- package/packages/dd-trace/src/llmobs/plugins/openai.js +2 -3
- package/packages/dd-trace/src/llmobs/sdk.js +4 -3
- package/packages/dd-trace/src/llmobs/span_processor.js +1 -1
- package/packages/dd-trace/src/llmobs/tagger.js +129 -102
- package/packages/dd-trace/src/llmobs/util.js +9 -9
- package/packages/dd-trace/src/llmobs/writers/base.js +1 -1
- package/packages/dd-trace/src/llmobs/writers/util.js +1 -1
- package/packages/dd-trace/src/log/index.js +9 -8
- package/packages/dd-trace/src/log/log.js +1 -1
- package/packages/dd-trace/src/log/writer.js +3 -4
- package/packages/dd-trace/src/msgpack/chunk.js +3 -3
- package/packages/dd-trace/src/msgpack/encoder.js +31 -31
- package/packages/dd-trace/src/noop/dogstatsd.js +6 -6
- package/packages/dd-trace/src/noop/span.js +4 -6
- package/packages/dd-trace/src/noop/tracer.js +1 -2
- package/packages/dd-trace/src/opentelemetry/span_processor.js +2 -2
- package/packages/dd-trace/src/opentelemetry/tracer.js +7 -6
- package/packages/dd-trace/src/opentracing/propagation/log.js +10 -13
- package/packages/dd-trace/src/opentracing/propagation/text_map.js +40 -37
- package/packages/dd-trace/src/opentracing/propagation/tracestate.js +8 -4
- package/packages/dd-trace/src/opentracing/span.js +16 -20
- package/packages/dd-trace/src/opentracing/tracer.js +9 -6
- package/packages/dd-trace/src/payload-tagging/config/index.js +17 -21
- package/packages/dd-trace/src/payload-tagging/index.js +1 -1
- package/packages/dd-trace/src/payload-tagging/tagging.js +6 -6
- package/packages/dd-trace/src/pkg.js +1 -1
- package/packages/dd-trace/src/plugin_manager.js +4 -3
- package/packages/dd-trace/src/plugins/ci_plugin.js +87 -11
- package/packages/dd-trace/src/plugins/consumer.js +2 -2
- package/packages/dd-trace/src/plugins/inbound.js +5 -1
- package/packages/dd-trace/src/plugins/index.js +0 -1
- package/packages/dd-trace/src/plugins/outbound.js +4 -5
- package/packages/dd-trace/src/plugins/plugin.js +1 -1
- package/packages/dd-trace/src/plugins/producer.js +2 -2
- package/packages/dd-trace/src/plugins/storage.js +2 -2
- package/packages/dd-trace/src/plugins/util/ci.js +28 -20
- package/packages/dd-trace/src/plugins/util/git.js +166 -12
- package/packages/dd-trace/src/plugins/util/inferred_proxy.js +1 -1
- package/packages/dd-trace/src/plugins/util/ip_extractor.js +1 -1
- package/packages/dd-trace/src/plugins/util/llm.js +27 -10
- package/packages/dd-trace/src/plugins/util/stacktrace.js +9 -2
- package/packages/dd-trace/src/plugins/util/test.js +315 -51
- package/packages/dd-trace/src/plugins/util/url.js +1 -1
- package/packages/dd-trace/src/plugins/util/urlfilter.js +13 -17
- package/packages/dd-trace/src/plugins/util/user-provided-git.js +14 -4
- package/packages/dd-trace/src/plugins/util/web.js +8 -8
- package/packages/dd-trace/src/priority_sampler.js +64 -53
- package/packages/dd-trace/src/profiling/config.js +51 -35
- package/packages/dd-trace/src/profiling/exporter_cli.js +20 -20
- package/packages/dd-trace/src/profiling/exporters/agent.js +1 -1
- package/packages/dd-trace/src/profiling/exporters/event_serializer.js +7 -6
- package/packages/dd-trace/src/profiling/exporters/file.js +2 -1
- package/packages/dd-trace/src/profiling/index.js +2 -1
- package/packages/dd-trace/src/profiling/profiler.js +44 -6
- package/packages/dd-trace/src/profiling/profilers/events.js +14 -17
- package/packages/dd-trace/src/profiling/profilers/shared.js +6 -1
- package/packages/dd-trace/src/profiling/profilers/space.js +3 -3
- package/packages/dd-trace/src/profiling/profilers/wall.js +6 -7
- package/packages/dd-trace/src/profiling/ssi-heuristics.js +3 -5
- package/packages/dd-trace/src/profiling/ssi-telemetry-mock-profiler.js +3 -1
- package/packages/dd-trace/src/profiling/tagger.js +21 -13
- package/packages/dd-trace/src/profiling/webspan-utils.js +1 -1
- package/packages/dd-trace/src/proxy.js +9 -10
- package/packages/dd-trace/src/random_sampler.js +40 -0
- package/packages/dd-trace/src/rate_limiter.js +4 -4
- package/packages/dd-trace/src/remote_config/index.js +3 -7
- package/packages/dd-trace/src/remote_config/manager.js +25 -13
- package/packages/dd-trace/src/require-package-json.js +1 -1
- package/packages/dd-trace/src/ritm.js +8 -8
- package/packages/dd-trace/src/runtime_metrics/runtime_metrics.js +5 -4
- package/packages/dd-trace/src/sampler.js +41 -4
- package/packages/dd-trace/src/sampling_rule.js +12 -3
- package/packages/dd-trace/src/scope.js +1 -1
- package/packages/dd-trace/src/serverless.js +11 -4
- package/packages/dd-trace/src/service-naming/schemas/util.js +1 -1
- package/packages/dd-trace/src/service-naming/schemas/v0/web.js +2 -3
- package/packages/dd-trace/src/span_processor.js +5 -4
- package/packages/dd-trace/src/span_sampler.js +4 -1
- package/packages/dd-trace/src/standalone/tracesource.js +2 -3
- package/packages/dd-trace/src/standalone/tracesource_priority_sampler.js +1 -2
- package/packages/dd-trace/src/startup-log.js +6 -18
- package/packages/dd-trace/src/supported-configurations.json +439 -0
- package/packages/dd-trace/src/telemetry/dependencies.js +64 -59
- package/packages/dd-trace/src/telemetry/logs/log-collector.js +9 -10
- package/packages/dd-trace/src/telemetry/metrics.js +10 -5
- package/packages/dd-trace/src/telemetry/send-data.js +8 -7
- package/packages/dd-trace/src/telemetry/telemetry.js +31 -45
- package/packages/dd-trace/src/tracer.js +3 -7
- package/packages/dd-trace/src/util.js +1 -6
- package/version.js +1 -0
- package/packages/datadog-instrumentations/src/paperplane.js +0 -77
- package/packages/datadog-plugin-paperplane/src/index.js +0 -25
- package/packages/datadog-plugin-paperplane/src/logger.js +0 -11
- package/packages/datadog-plugin-paperplane/src/server.js +0 -24
- package/packages/dd-trace/src/appsec/iast/analyzers/header-injection-analyzer.js +0 -122
- package/packages/dd-trace/src/appsec/iast/vulnerabilities-formatter/evidence-redaction/sensitive-analyzers/header-sensitive-analyzer.js +0 -20
|
@@ -14,6 +14,7 @@ const log = require('../../../log')
|
|
|
14
14
|
const { isMainThread } = require('worker_threads')
|
|
15
15
|
const { LOG_MESSAGE, REWRITTEN_MESSAGE } = require('./constants')
|
|
16
16
|
const orchestrionConfig = require('../../../../../datadog-instrumentations/src/orchestrion-config')
|
|
17
|
+
const { getEnvironmentVariable } = require('../../../config-helper')
|
|
17
18
|
|
|
18
19
|
let config
|
|
19
20
|
const hardcodedSecretCh = dc.channel('datadog:secrets:result')
|
|
@@ -26,7 +27,7 @@ let kSymbolPrepareStackTrace
|
|
|
26
27
|
function noop () {}
|
|
27
28
|
|
|
28
29
|
function isFlagPresent (flag) {
|
|
29
|
-
return
|
|
30
|
+
return getEnvironmentVariable('NODE_OPTIONS')?.includes(flag) ||
|
|
30
31
|
process.execArgv?.some(arg => arg.includes(flag))
|
|
31
32
|
}
|
|
32
33
|
|
|
@@ -41,11 +42,9 @@ function setGetOriginalPathAndLineFromSourceMapFunction (chainSourceMap, { getOr
|
|
|
41
42
|
? (path, line, column) => {
|
|
42
43
|
// if --enable-source-maps is present stacktraces of the rewritten files contain the original path, file and
|
|
43
44
|
// column because the sourcemap chaining is done during the rewriting process so we can skip it
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
return getOriginalPathAndLineFromSourceMap(path, line, column)
|
|
48
|
-
}
|
|
45
|
+
return isPrivateModule(path) && !isDdTrace(path)
|
|
46
|
+
? { path, line, column }
|
|
47
|
+
: getOriginalPathAndLineFromSourceMap(path, line, column)
|
|
49
48
|
}
|
|
50
49
|
: getOriginalPathAndLineFromSourceMap
|
|
51
50
|
}
|
|
@@ -138,7 +137,7 @@ function esmRewritePostProcess (rewritten, filename) {
|
|
|
138
137
|
|
|
139
138
|
if (metrics?.status === 'modified') {
|
|
140
139
|
if (filename.startsWith('file://')) {
|
|
141
|
-
filename = filename.
|
|
140
|
+
filename = filename.slice(7)
|
|
142
141
|
}
|
|
143
142
|
|
|
144
143
|
cacheRewrittenSourceMap(filename, rewritten.content)
|
|
@@ -157,7 +156,7 @@ function shimPrepareStackTrace () {
|
|
|
157
156
|
return
|
|
158
157
|
}
|
|
159
158
|
const pstDescriptor = Object.getOwnPropertyDescriptor(global.Error, 'prepareStackTrace')
|
|
160
|
-
if (pstDescriptor
|
|
159
|
+
if (!pstDescriptor || pstDescriptor.configurable || pstDescriptor.writable) {
|
|
161
160
|
Object.defineProperty(global.Error, 'prepareStackTrace', getPrepareStackTraceAccessor())
|
|
162
161
|
}
|
|
163
162
|
shimmedPrepareStackTrace = true
|
|
@@ -71,7 +71,7 @@ function notString () {
|
|
|
71
71
|
}
|
|
72
72
|
|
|
73
73
|
function isValidCsiMethod (fn, protos) {
|
|
74
|
-
return protos.
|
|
74
|
+
return protos.includes(fn)
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
function getCsiFn (cb, getContext, ...protos) {
|
|
@@ -90,7 +90,7 @@ function getCsiFn (cb, getContext, ...protos) {
|
|
|
90
90
|
function csiMethodsDefaults (names, excluded, getContext) {
|
|
91
91
|
const impl = {}
|
|
92
92
|
names.forEach(name => {
|
|
93
|
-
if (excluded.
|
|
93
|
+
if (excluded.includes(name)) return
|
|
94
94
|
impl[name] = getCsiFn(
|
|
95
95
|
(transactionId, res, target, ...rest) => TaintedUtils[name](transactionId, res, target, ...rest),
|
|
96
96
|
getContext,
|
|
@@ -10,10 +10,10 @@ function addMetricsToSpan (rootSpan, metrics, tagPrefix) {
|
|
|
10
10
|
const name = taggedMetricName(data)
|
|
11
11
|
let total = flattenMap.get(name)
|
|
12
12
|
const value = flatten(data)
|
|
13
|
-
if (
|
|
14
|
-
total = value
|
|
15
|
-
} else {
|
|
13
|
+
if (total) {
|
|
16
14
|
total += value
|
|
15
|
+
} else {
|
|
16
|
+
total = value
|
|
17
17
|
}
|
|
18
18
|
flattenMap.set(name, total)
|
|
19
19
|
})
|
|
@@ -34,9 +34,9 @@ function flatten (metricData) {
|
|
|
34
34
|
function taggedMetricName (data) {
|
|
35
35
|
const metric = data.metric
|
|
36
36
|
const tags = filterTags(data.tags)
|
|
37
|
-
return
|
|
38
|
-
? metric
|
|
39
|
-
:
|
|
37
|
+
return tags?.length
|
|
38
|
+
? `${metric}.${processTagValue(tags)}`
|
|
39
|
+
: metric
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
function filterTags (tags) {
|
|
@@ -45,7 +45,7 @@ function filterTags (tags) {
|
|
|
45
45
|
|
|
46
46
|
function processTagValue (tags) {
|
|
47
47
|
return tags.map(tag => tag.includes(':') ? tag.split(':')[1] : tag)
|
|
48
|
-
.join('_').
|
|
48
|
+
.join('_').replaceAll('.', '_')
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
module.exports = {
|
|
@@ -18,10 +18,9 @@ function isInfoAllowed (value) {
|
|
|
18
18
|
function getVerbosity (verbosity) {
|
|
19
19
|
if (verbosity) {
|
|
20
20
|
verbosity = verbosity.toUpperCase()
|
|
21
|
-
return Verbosity[verbosity]
|
|
22
|
-
} else {
|
|
23
|
-
return Verbosity.INFORMATION
|
|
21
|
+
return Verbosity[verbosity] === undefined ? Verbosity.INFORMATION : Verbosity[verbosity]
|
|
24
22
|
}
|
|
23
|
+
return Verbosity.INFORMATION
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
function getName (verbosityValue) {
|
|
@@ -16,18 +16,17 @@ function remove (range, rangeToRemove) {
|
|
|
16
16
|
return [range]
|
|
17
17
|
} else if (contains(rangeToRemove, range)) {
|
|
18
18
|
return []
|
|
19
|
-
} else {
|
|
20
|
-
const result = []
|
|
21
|
-
if (rangeToRemove.start > range.start) {
|
|
22
|
-
const offset = rangeToRemove.start - range.start
|
|
23
|
-
result.push({ start: range.start, end: range.start + offset })
|
|
24
|
-
}
|
|
25
|
-
if (rangeToRemove.end < range.end) {
|
|
26
|
-
const offset = range.end - rangeToRemove.end
|
|
27
|
-
result.push({ start: rangeToRemove.end, end: rangeToRemove.end + offset })
|
|
28
|
-
}
|
|
29
|
-
return result
|
|
30
19
|
}
|
|
20
|
+
const result = []
|
|
21
|
+
if (rangeToRemove.start > range.start) {
|
|
22
|
+
const offset = rangeToRemove.start - range.start
|
|
23
|
+
result.push({ start: range.start, end: range.start + offset })
|
|
24
|
+
}
|
|
25
|
+
if (rangeToRemove.end < range.end) {
|
|
26
|
+
const offset = range.end - rangeToRemove.end
|
|
27
|
+
result.push({ start: rangeToRemove.end, end: rangeToRemove.end + offset })
|
|
28
|
+
}
|
|
29
|
+
return result
|
|
31
30
|
}
|
|
32
31
|
|
|
33
32
|
module.exports = {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const log = require('../../../../../log')
|
|
4
4
|
|
|
5
|
-
const COMMAND_PATTERN =
|
|
5
|
+
const COMMAND_PATTERN = String.raw`^(?:\s*(?:sudo|doas)\s+)?\b\S+\b\s(.*)`
|
|
6
6
|
const pattern = new RegExp(COMMAND_PATTERN, 'gmi')
|
|
7
7
|
|
|
8
8
|
module.exports = function extractSensitiveRanges (evidence) {
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
const log = require('../../../../../log')
|
|
4
4
|
|
|
5
|
-
const LDAP_PATTERN =
|
|
5
|
+
const LDAP_PATTERN = String.raw`\(.*?(?:~=|=|<=|>=)(?<LITERAL>[^)]+)\)`
|
|
6
6
|
const pattern = new RegExp(LDAP_PATTERN, 'gmi')
|
|
7
7
|
|
|
8
8
|
module.exports = function extractSensitiveRanges (evidence) {
|
|
@@ -3,13 +3,13 @@
|
|
|
3
3
|
const log = require('../../../../../log')
|
|
4
4
|
|
|
5
5
|
const STRING_LITERAL = '\'(?:\'\'|[^\'])*\''
|
|
6
|
-
const POSTGRESQL_ESCAPED_LITERAL =
|
|
7
|
-
const MYSQL_STRING_LITERAL =
|
|
6
|
+
const POSTGRESQL_ESCAPED_LITERAL = String.raw`\$([^$]*)\$.*?\$\1\$`
|
|
7
|
+
const MYSQL_STRING_LITERAL = String.raw`"(?:\\"|[^"])*"|'(?:\\'|[^'])*'`
|
|
8
8
|
const LINE_COMMENT = '--.*$'
|
|
9
|
-
const BLOCK_COMMENT =
|
|
10
|
-
const EXPONENT =
|
|
11
|
-
const INTEGER_NUMBER =
|
|
12
|
-
const DECIMAL_NUMBER =
|
|
9
|
+
const BLOCK_COMMENT = String.raw`/\*[\s\S]*\*/`
|
|
10
|
+
const EXPONENT = String.raw`(?:E[-+]?\d+[fd]?)?`
|
|
11
|
+
const INTEGER_NUMBER = String.raw`(?<!\w)\d+`
|
|
12
|
+
const DECIMAL_NUMBER = String.raw`\d*\.\d+`
|
|
13
13
|
const HEX_NUMBER = 'x\'[0-9a-f]+\'|0x[0-9a-f]+'
|
|
14
14
|
const BIN_NUMBER = 'b\'[0-9a-f]+\'|0b[0-9a-f]+'
|
|
15
15
|
const NUMERIC_LITERAL =
|
|
@@ -21,7 +21,7 @@ const NUMERIC_LITERAL =
|
|
|
21
21
|
INTEGER_NUMBER + EXPONENT
|
|
22
22
|
].join('|')
|
|
23
23
|
})`
|
|
24
|
-
const ORACLE_ESCAPED_LITERAL =
|
|
24
|
+
const ORACLE_ESCAPED_LITERAL = String.raw`q'<.*?>'|q'\(.*?\)'|q'\{.*?\}'|q'\[.*?\]'|q'(?<ESCAPE>.).*?\k<ESCAPE>'`
|
|
25
25
|
|
|
26
26
|
const patterns = {
|
|
27
27
|
ANSI: new RegExp( // Default
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
'use strict'
|
|
2
|
+
/* eslint-disable unicorn/prefer-string-slice */
|
|
2
3
|
|
|
3
4
|
const log = require('../../../../log')
|
|
4
5
|
const vulnerabilities = require('../../vulnerabilities')
|
|
@@ -7,7 +8,6 @@ const { contains, intersects, remove } = require('./range-utils')
|
|
|
7
8
|
|
|
8
9
|
const commandSensitiveAnalyzer = require('./sensitive-analyzers/command-sensitive-analyzer')
|
|
9
10
|
const hardcodedPasswordAnalyzer = require('./sensitive-analyzers/hardcoded-password-analyzer')
|
|
10
|
-
const headerSensitiveAnalyzer = require('./sensitive-analyzers/header-sensitive-analyzer')
|
|
11
11
|
const jsonSensitiveAnalyzer = require('./sensitive-analyzers/json-sensitive-analyzer')
|
|
12
12
|
const ldapSensitiveAnalyzer = require('./sensitive-analyzers/ldap-sensitive-analyzer')
|
|
13
13
|
const sqlSensitiveAnalyzer = require('./sensitive-analyzers/sql-sensitive-analyzer')
|
|
@@ -29,9 +29,6 @@ class SensitiveHandler {
|
|
|
29
29
|
this._sensitiveAnalyzers.set(vulnerabilities.HARDCODED_PASSWORD, (evidence) => {
|
|
30
30
|
return hardcodedPasswordAnalyzer(evidence, this._valuePattern)
|
|
31
31
|
})
|
|
32
|
-
this._sensitiveAnalyzers.set(vulnerabilities.HEADER_INJECTION, (evidence) => {
|
|
33
|
-
return headerSensitiveAnalyzer(evidence, this._namePattern, this._valuePattern)
|
|
34
|
-
})
|
|
35
32
|
this._sensitiveAnalyzers.set(vulnerabilities.LDAP_INJECTION, ldapSensitiveAnalyzer)
|
|
36
33
|
this._sensitiveAnalyzers.set(vulnerabilities.NOSQL_MONGODB_INJECTION, jsonSensitiveAnalyzer)
|
|
37
34
|
this._sensitiveAnalyzers.set(vulnerabilities.SQL_INJECTION, sqlSensitiveAnalyzer)
|
|
@@ -82,7 +79,7 @@ class SensitiveHandler {
|
|
|
82
79
|
|
|
83
80
|
for (let i = 0; i < value.length; i++) {
|
|
84
81
|
if (nextTainted != null && nextTainted.start === i) {
|
|
85
|
-
this.writeValuePart(valueParts, value.
|
|
82
|
+
this.writeValuePart(valueParts, value.slice(start, i), sourceIndex)
|
|
86
83
|
|
|
87
84
|
sourceIndex = sourcesIndexes[nextTaintedIndex]
|
|
88
85
|
|
|
@@ -113,16 +110,14 @@ class SensitiveHandler {
|
|
|
113
110
|
nextSensitive = entries.length > 0 ? entries[0] : null
|
|
114
111
|
}
|
|
115
112
|
|
|
116
|
-
if (this.isSensibleSource(sources[sourceIndex])) {
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
sources[sourceIndex].redacted = true
|
|
121
|
-
}
|
|
113
|
+
if (this.isSensibleSource(sources[sourceIndex]) && !sources[sourceIndex].redacted) {
|
|
114
|
+
redactedSources.push(sourceIndex)
|
|
115
|
+
sources[sourceIndex].pattern = ''.padEnd(sources[sourceIndex].value.length, REDACTED_SOURCE_BUFFER)
|
|
116
|
+
sources[sourceIndex].redacted = true
|
|
122
117
|
}
|
|
123
118
|
|
|
124
|
-
if (redactedSources.
|
|
125
|
-
const partValue = value.
|
|
119
|
+
if (redactedSources.includes(sourceIndex)) {
|
|
120
|
+
const partValue = value.slice(i, i + (nextTainted.end - nextTainted.start))
|
|
126
121
|
this.writeRedactedValuePart(
|
|
127
122
|
valueParts,
|
|
128
123
|
partValue.length,
|
|
@@ -135,7 +130,7 @@ class SensitiveHandler {
|
|
|
135
130
|
redactedSourcesContext[sourceIndex] = []
|
|
136
131
|
} else {
|
|
137
132
|
const substringEnd = Math.min(nextTainted.end, value.length)
|
|
138
|
-
this.writeValuePart(valueParts, value.
|
|
133
|
+
this.writeValuePart(valueParts, value.slice(nextTainted.start, substringEnd), sourceIndex)
|
|
139
134
|
}
|
|
140
135
|
|
|
141
136
|
start = i + (nextTainted.end - nextTainted.start)
|
|
@@ -144,7 +139,7 @@ class SensitiveHandler {
|
|
|
144
139
|
nextTaintedIndex++
|
|
145
140
|
sourceIndex = null
|
|
146
141
|
} else if (nextSensitive != null && nextSensitive.start === i) {
|
|
147
|
-
this.writeValuePart(valueParts, value.
|
|
142
|
+
this.writeValuePart(valueParts, value.slice(start, i), sourceIndex)
|
|
148
143
|
if (nextTainted != null && intersects(nextSensitive, nextTainted)) {
|
|
149
144
|
sourceIndex = sourcesIndexes[nextTaintedIndex]
|
|
150
145
|
|
|
@@ -171,7 +166,7 @@ class SensitiveHandler {
|
|
|
171
166
|
}
|
|
172
167
|
|
|
173
168
|
if (start < value.length) {
|
|
174
|
-
this.writeValuePart(valueParts, value.
|
|
169
|
+
this.writeValuePart(valueParts, value.slice(start))
|
|
175
170
|
}
|
|
176
171
|
|
|
177
172
|
return { redactedValueParts: valueParts, redactedSources }
|
|
@@ -197,10 +192,10 @@ class SensitiveHandler {
|
|
|
197
192
|
|
|
198
193
|
writeValuePart (valueParts, value, source) {
|
|
199
194
|
if (value.length > 0) {
|
|
200
|
-
if (source
|
|
201
|
-
valueParts.push({ value, source })
|
|
202
|
-
} else {
|
|
195
|
+
if (source == null) {
|
|
203
196
|
valueParts.push({ value })
|
|
197
|
+
} else {
|
|
198
|
+
valueParts.push({ value, source })
|
|
204
199
|
}
|
|
205
200
|
}
|
|
206
201
|
}
|
|
@@ -214,7 +209,9 @@ class SensitiveHandler {
|
|
|
214
209
|
sourceRedactionContext,
|
|
215
210
|
isSensibleSource
|
|
216
211
|
) {
|
|
217
|
-
if (sourceIndex
|
|
212
|
+
if (sourceIndex == null) {
|
|
213
|
+
valueParts.push({ redacted: true })
|
|
214
|
+
} else {
|
|
218
215
|
const placeholder = source.value.includes(partValue)
|
|
219
216
|
? source.pattern
|
|
220
217
|
: '*'.repeat(length)
|
|
@@ -252,9 +249,9 @@ class SensitiveHandler {
|
|
|
252
249
|
_value.substring(_sourceRedactionContext.start - offset, _sourceRedactionContext.end - offset)
|
|
253
250
|
const indexOfPartValueInPattern = source.value.indexOf(sensitive)
|
|
254
251
|
|
|
255
|
-
const pattern = indexOfPartValueInPattern
|
|
256
|
-
? placeholder.substring(
|
|
257
|
-
: placeholder.substring(
|
|
252
|
+
const pattern = indexOfPartValueInPattern === -1
|
|
253
|
+
? placeholder.substring(_sourceRedactionContext.start, _sourceRedactionContext.end)
|
|
254
|
+
: placeholder.substring(indexOfPartValueInPattern, indexOfPartValueInPattern + sensitive.length)
|
|
258
255
|
|
|
259
256
|
valueParts.push({
|
|
260
257
|
redacted: true,
|
|
@@ -262,7 +259,7 @@ class SensitiveHandler {
|
|
|
262
259
|
pattern
|
|
263
260
|
})
|
|
264
261
|
|
|
265
|
-
_value = _value.
|
|
262
|
+
_value = _value.slice(pattern.length)
|
|
266
263
|
offset += pattern.length
|
|
267
264
|
})
|
|
268
265
|
|
|
@@ -273,8 +270,6 @@ class SensitiveHandler {
|
|
|
273
270
|
})
|
|
274
271
|
}
|
|
275
272
|
}
|
|
276
|
-
} else {
|
|
277
|
-
valueParts.push({ redacted: true })
|
|
278
273
|
}
|
|
279
274
|
}
|
|
280
275
|
|
|
@@ -282,7 +277,7 @@ class SensitiveHandler {
|
|
|
282
277
|
if (redactionNamePattern) {
|
|
283
278
|
try {
|
|
284
279
|
this._namePattern = new RegExp(redactionNamePattern, 'gmi')
|
|
285
|
-
} catch
|
|
280
|
+
} catch {
|
|
286
281
|
log.warn('[ASM] Redaction name pattern is not valid')
|
|
287
282
|
}
|
|
288
283
|
}
|
|
@@ -290,7 +285,7 @@ class SensitiveHandler {
|
|
|
290
285
|
if (redactionValuePattern) {
|
|
291
286
|
try {
|
|
292
287
|
this._valuePattern = new RegExp(redactionValuePattern, 'gmi')
|
|
293
|
-
} catch
|
|
288
|
+
} catch {
|
|
294
289
|
log.warn('[ASM] Redaction value pattern is not valid')
|
|
295
290
|
}
|
|
296
291
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
// eslint-disable-next-line @stylistic/
|
|
1
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
2
2
|
const DEFAULT_IAST_REDACTION_NAME_PATTERN = '(?:p(?:ass)?w(?:or)?d|pass(?:_?phrase)?|secret|(?:api_?|private_?|public_?|access_?|secret_?)key(?:_?id)?|token|consumer_?(?:id|key|secret)|sign(?:ed|ature)?|auth(?:entication|orization)?|(?:sur|last)name|user(?:name)?|address|e?mail)'
|
|
3
|
-
// eslint-disable-next-line @stylistic/
|
|
4
|
-
const DEFAULT_IAST_REDACTION_VALUE_PATTERN =
|
|
3
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
4
|
+
const DEFAULT_IAST_REDACTION_VALUE_PATTERN = String.raw`(?:bearer\s+[a-z0-9\._\-]+|glpat-[\w\-]{20}|gh[opsu]_[0-9a-zA-Z]{36}|ey[I-L][\w=\-]+\.ey[I-L][\w=\-]+(?:\.[\w.+/=\-]+)?|(?:[\-]{5}BEGIN[a-z\s]+PRIVATE\sKEY[\-]{5}[^\-]+[\-]{5}END[a-z\s]+PRIVATE\sKEY[\-]{5}|ssh-rsa\s*[a-z0-9/\.+]{100,})|[\w\.-]+@[a-zA-Z\d\.-]+\.[a-zA-Z]{2,})`
|
|
5
5
|
|
|
6
6
|
module.exports = {
|
|
7
7
|
DEFAULT_IAST_REDACTION_NAME_PATTERN,
|
|
@@ -57,14 +57,14 @@ class VulnerabilityFormatter {
|
|
|
57
57
|
|
|
58
58
|
evidence.ranges.forEach((range, rangeIndex) => {
|
|
59
59
|
if (fromIndex < range.start) {
|
|
60
|
-
valueParts.push({ value: evidence.value.
|
|
60
|
+
valueParts.push({ value: evidence.value.slice(fromIndex, range.start) })
|
|
61
61
|
}
|
|
62
|
-
valueParts.push({ value: evidence.value.
|
|
62
|
+
valueParts.push({ value: evidence.value.slice(range.start, range.end), source: sourcesIndexes[rangeIndex] })
|
|
63
63
|
fromIndex = range.end
|
|
64
64
|
})
|
|
65
65
|
|
|
66
66
|
if (fromIndex < evidence.value.length) {
|
|
67
|
-
valueParts.push({ value: evidence.value.
|
|
67
|
+
valueParts.push({ value: evidence.value.slice(fromIndex) })
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
return { valueParts }
|
|
@@ -72,7 +72,7 @@ class VulnerabilityFormatter {
|
|
|
72
72
|
|
|
73
73
|
formatEvidence (type, evidence, sourcesIndexes, sources) {
|
|
74
74
|
if (evidence.value === undefined) {
|
|
75
|
-
return
|
|
75
|
+
return
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
return this._redactVulnearbilities
|
|
@@ -7,7 +7,7 @@ const STRINGIFY_RANGE_KEY = 'DD_' + crypto.randomBytes(20).toString('hex')
|
|
|
7
7
|
const STRINGIFY_SENSITIVE_KEY = STRINGIFY_RANGE_KEY + 'SENSITIVE'
|
|
8
8
|
const STRINGIFY_SENSITIVE_NOT_STRING_KEY = STRINGIFY_SENSITIVE_KEY + 'NOTSTRING'
|
|
9
9
|
|
|
10
|
-
// eslint-disable-next-line @stylistic/
|
|
10
|
+
// eslint-disable-next-line @stylistic/max-len
|
|
11
11
|
const KEYS_REGEX_WITH_SENSITIVE_RANGES = new RegExp(`(?:"(${STRINGIFY_RANGE_KEY}_\\d+_))|(?:"(${STRINGIFY_SENSITIVE_KEY}_\\d+_(\\d+)_))|("${STRINGIFY_SENSITIVE_NOT_STRING_KEY}_\\d+_([\\s0-9.a-zA-Z]*)")`, 'gm')
|
|
12
12
|
const KEYS_REGEX_WITHOUT_SENSITIVE_RANGES = new RegExp(`"(${STRINGIFY_RANGE_KEY}_\\d+_)`, 'gm')
|
|
13
13
|
|
|
@@ -99,22 +99,17 @@ function stringifyWithRanges (obj, objRanges, loadSensitiveRanges = false) {
|
|
|
99
99
|
} else {
|
|
100
100
|
currentLevelClone[key] = val
|
|
101
101
|
}
|
|
102
|
-
} else if (Array.isArray(val)) {
|
|
103
|
-
currentLevelClone[key] = []
|
|
104
102
|
} else {
|
|
105
|
-
currentLevelClone[key] = {}
|
|
103
|
+
currentLevelClone[key] = Array.isArray(val) ? [] : {}
|
|
106
104
|
}
|
|
107
105
|
})
|
|
108
106
|
|
|
109
107
|
value = JSON.stringify(cloneObj, null, 2)
|
|
110
108
|
|
|
111
109
|
if (counter > 0) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
} else {
|
|
116
|
-
keysRegex = KEYS_REGEX_WITHOUT_SENSITIVE_RANGES
|
|
117
|
-
}
|
|
110
|
+
const keysRegex = loadSensitiveRanges
|
|
111
|
+
? KEYS_REGEX_WITH_SENSITIVE_RANGES
|
|
112
|
+
: KEYS_REGEX_WITHOUT_SENSITIVE_RANGES
|
|
118
113
|
keysRegex.lastIndex = 0
|
|
119
114
|
|
|
120
115
|
let regexRes = keysRegex.exec(value)
|
|
@@ -141,7 +136,7 @@ function stringifyWithRanges (obj, objRanges, loadSensitiveRanges = false) {
|
|
|
141
136
|
|
|
142
137
|
sensitiveRanges.push({
|
|
143
138
|
start: offset,
|
|
144
|
-
end: offset + parseInt(regexRes[3])
|
|
139
|
+
end: offset + Number.parseInt(regexRes[3])
|
|
145
140
|
})
|
|
146
141
|
|
|
147
142
|
value = value.replace(sensitiveId, '')
|
|
@@ -3,7 +3,6 @@ module.exports = {
|
|
|
3
3
|
CODE_INJECTION: 'CODE_INJECTION',
|
|
4
4
|
HARDCODED_PASSWORD: 'HARDCODED_PASSWORD',
|
|
5
5
|
HARDCODED_SECRET: 'HARDCODED_SECRET',
|
|
6
|
-
HEADER_INJECTION: 'HEADER_INJECTION',
|
|
7
6
|
HSTS_HEADER_MISSING: 'HSTS_HEADER_MISSING',
|
|
8
7
|
INSECURE_COOKIE: 'INSECURE_COOKIE',
|
|
9
8
|
LDAP_INJECTION: 'LDAP_INJECTION',
|
|
@@ -79,17 +79,15 @@ function isValidVulnerability (vulnerability) {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
function sendVulnerabilities (vulnerabilities, span) {
|
|
82
|
-
if (vulnerabilities &&
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
span.addTags(tags)
|
|
92
|
-
}
|
|
82
|
+
if (vulnerabilities?.length && span?.addTags) {
|
|
83
|
+
const validatedVulnerabilities = vulnerabilities.filter(isValidVulnerability)
|
|
84
|
+
const jsonToSend = vulnerabilitiesFormatter.toJson(validatedVulnerabilities)
|
|
85
|
+
|
|
86
|
+
if (jsonToSend.vulnerabilities.length > 0) {
|
|
87
|
+
const tags = {}
|
|
88
|
+
// TODO: Store this outside of the span and set the tag in the exporter.
|
|
89
|
+
tags[IAST_JSON_TAG_KEY] = JSON.stringify(jsonToSend)
|
|
90
|
+
span.addTags(tags)
|
|
93
91
|
}
|
|
94
92
|
}
|
|
95
93
|
return IAST_JSON_TAG_KEY
|
|
@@ -45,7 +45,7 @@ function enable (_config) {
|
|
|
45
45
|
if (isEnabled) return
|
|
46
46
|
|
|
47
47
|
try {
|
|
48
|
-
appsecTelemetry.enable(_config
|
|
48
|
+
appsecTelemetry.enable(_config)
|
|
49
49
|
graphql.enable()
|
|
50
50
|
|
|
51
51
|
if (_config.appsec.rasp.enabled) {
|
|
@@ -58,7 +58,7 @@ function enable (_config) {
|
|
|
58
58
|
|
|
59
59
|
remoteConfig.enableWafUpdate(_config.appsec)
|
|
60
60
|
|
|
61
|
-
Reporter.
|
|
61
|
+
Reporter.init(_config.appsec)
|
|
62
62
|
|
|
63
63
|
apiSecuritySampler.configure(_config)
|
|
64
64
|
|
|
@@ -139,7 +139,7 @@ function incomingHttpStartTranslator ({ req, res, abortController }) {
|
|
|
139
139
|
[HTTP_CLIENT_IP]: clientIp
|
|
140
140
|
})
|
|
141
141
|
|
|
142
|
-
const requestHeaders =
|
|
142
|
+
const requestHeaders = { ...req.headers }
|
|
143
143
|
delete requestHeaders.cookie
|
|
144
144
|
|
|
145
145
|
const persistent = {
|
|
@@ -299,12 +299,12 @@ function onResponseWriteHead ({ req, res, abortController, statusCode, responseH
|
|
|
299
299
|
const rootSpan = web.root(req)
|
|
300
300
|
if (!rootSpan) return
|
|
301
301
|
|
|
302
|
-
responseHeaders =
|
|
302
|
+
responseHeaders = { ...responseHeaders }
|
|
303
303
|
delete responseHeaders['set-cookie']
|
|
304
304
|
|
|
305
305
|
const results = waf.run({
|
|
306
306
|
persistent: {
|
|
307
|
-
[addresses.HTTP_INCOMING_RESPONSE_CODE]:
|
|
307
|
+
[addresses.HTTP_INCOMING_RESPONSE_CODE]: String(statusCode),
|
|
308
308
|
[addresses.HTTP_INCOMING_RESPONSE_HEADERS]: responseHeaders
|
|
309
309
|
}
|
|
310
310
|
}, req)
|
|
@@ -22,8 +22,8 @@ function removeAllListeners (emitter, event) {
|
|
|
22
22
|
}
|
|
23
23
|
cleaned = true
|
|
24
24
|
|
|
25
|
-
for (
|
|
26
|
-
emitter.on(event,
|
|
25
|
+
for (const listener of listeners) {
|
|
26
|
+
emitter.on(event, listener)
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
}
|
|
@@ -41,19 +41,7 @@ function findDatadogRaspAbortError (err, deep = 10) {
|
|
|
41
41
|
function handleUncaughtExceptionMonitor (error) {
|
|
42
42
|
if (!blockOnDatadogRaspAbortError({ error })) return
|
|
43
43
|
|
|
44
|
-
if (
|
|
45
|
-
const cleanUp = removeAllListeners(process, 'uncaughtException')
|
|
46
|
-
const handler = () => {
|
|
47
|
-
process.removeListener('uncaughtException', handler)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
setTimeout(() => {
|
|
51
|
-
process.removeListener('uncaughtException', handler)
|
|
52
|
-
cleanUp()
|
|
53
|
-
})
|
|
54
|
-
|
|
55
|
-
process.on('uncaughtException', handler)
|
|
56
|
-
} else {
|
|
44
|
+
if (process.hasUncaughtExceptionCaptureCallback()) {
|
|
57
45
|
// uncaughtException event is not executed when hasUncaughtExceptionCaptureCallback is true
|
|
58
46
|
let previousCb
|
|
59
47
|
const cb = ({ currentCallback, abortController }) => {
|
|
@@ -78,6 +66,18 @@ function handleUncaughtExceptionMonitor (error) {
|
|
|
78
66
|
process.setUncaughtExceptionCaptureCallback(previousCb)
|
|
79
67
|
})
|
|
80
68
|
}
|
|
69
|
+
} else {
|
|
70
|
+
const cleanUp = removeAllListeners(process, 'uncaughtException')
|
|
71
|
+
const handler = () => {
|
|
72
|
+
process.removeListener('uncaughtException', handler)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
setTimeout(() => {
|
|
76
|
+
process.removeListener('uncaughtException', handler)
|
|
77
|
+
cleanUp()
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
process.on('uncaughtException', handler)
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
|
|
@@ -88,6 +88,7 @@ function pathToStr (path) {
|
|
|
88
88
|
if (!path) return
|
|
89
89
|
|
|
90
90
|
if (typeof path === 'string' ||
|
|
91
|
+
// eslint-disable-next-line unicorn/no-instanceof-builtins
|
|
91
92
|
path instanceof String ||
|
|
92
93
|
path instanceof Buffer ||
|
|
93
94
|
path instanceof URL) {
|
|
@@ -104,7 +105,7 @@ function shouldAnalyze (path, fs) {
|
|
|
104
105
|
|
|
105
106
|
function shouldAnalyzeURLFile (path, fs) {
|
|
106
107
|
if (path.startsWith('file://')) {
|
|
107
|
-
return shouldAnalyze(path.
|
|
108
|
+
return shouldAnalyze(path.slice(7), fs)
|
|
108
109
|
}
|
|
109
110
|
}
|
|
110
111
|
|