Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support url.parse, url.URL.parse and new url.URL for IAST taint tracking #4836

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

uurien
Copy link
Collaborator

@uurien uurien commented Oct 29, 2024

What does this PR do?

Add support to taint tracking string in iast when they are parsed URLs.

Motivation

Improve iast vulnerabilities detection, especially SSRF

Checklist

  • Unit tests.

Copy link

github-actions bot commented Oct 29, 2024

Overall package size

Self size: 7.87 MB
Deduped: 64.89 MB
No deduping: 65.23 MB

Dependency sizes | name | version | self size | total size | |------|---------|-----------|------------| | @datadog/native-appsec | 8.2.1 | 19.18 MB | 19.19 MB | | @datadog/native-iast-taint-tracking | 3.2.0 | 13.9 MB | 13.91 MB | | @datadog/pprof | 5.4.1 | 9.76 MB | 10.13 MB | | protobufjs | 7.2.5 | 2.77 MB | 5.16 MB | | @datadog/native-iast-rewriter | 2.5.0 | 2.51 MB | 2.65 MB | | @opentelemetry/core | 1.14.0 | 872.87 kB | 1.47 MB | | @datadog/native-metrics | 3.0.1 | 1.06 MB | 1.46 MB | | @opentelemetry/api | 1.8.0 | 1.21 MB | 1.21 MB | | import-in-the-middle | 1.11.2 | 112.74 kB | 826.22 kB | | msgpack-lite | 0.1.26 | 201.16 kB | 281.59 kB | | opentracing | 0.14.7 | 194.81 kB | 194.81 kB | | lru-cache | 7.18.3 | 133.92 kB | 133.92 kB | | pprof-format | 2.1.0 | 111.69 kB | 111.69 kB | | @datadog/sketches-js | 2.1.0 | 109.9 kB | 109.9 kB | | semver | 7.6.3 | 95.82 kB | 95.82 kB | | lodash.sortby | 4.7.0 | 75.76 kB | 75.76 kB | | ignore | 5.3.1 | 51.46 kB | 51.46 kB | | int64-buffer | 0.1.10 | 49.18 kB | 49.18 kB | | shell-quote | 1.8.1 | 44.96 kB | 44.96 kB | | istanbul-lib-coverage | 3.2.0 | 29.34 kB | 29.34 kB | | rfdc | 1.3.1 | 25.21 kB | 25.21 kB | | tlhunter-sorted-set | 0.1.0 | 24.94 kB | 24.94 kB | | limiter | 1.1.5 | 23.17 kB | 23.17 kB | | dc-polyfill | 0.1.4 | 23.1 kB | 23.1 kB | | retry | 0.13.1 | 18.85 kB | 18.85 kB | | jest-docblock | 29.7.0 | 8.99 kB | 12.76 kB | | crypto-randomuuid | 1.0.0 | 11.18 kB | 11.18 kB | | koalas | 1.0.2 | 6.47 kB | 6.47 kB | | path-to-regexp | 0.1.10 | 6.38 kB | 6.38 kB | | module-details-from-path | 1.0.3 | 4.47 kB | 4.47 kB |

🤖 This report was automatically generated by heaviest-objects-in-the-universe

@pr-commenter
Copy link

pr-commenter bot commented Oct 29, 2024

Benchmarks

Benchmark execution time: 2024-10-31 09:55:34

Comparing candidate commit 70cb896 in PR branch ugaitz/iast-support-url-parse with baseline commit 1c0958e in branch master.

Found 0 performance improvements and 0 performance regressions! Performance is the same for 258 metrics, 8 unstable metrics.

@uurien uurien force-pushed the ugaitz/iast-support-url-parse branch 2 times, most recently from a29fd38 to 397c51b Compare October 29, 2024 19:19
@uurien uurien force-pushed the ugaitz/iast-support-url-parse branch from 397c51b to 1ea43eb Compare October 29, 2024 19:20
@uurien uurien changed the title Support url.parse, url.URL.parse and new url.URL for taint tracking Support url.parse, url.URL.parse and new url.URL for IAST taint tracking Oct 29, 2024
@uurien uurien marked this pull request as ready for review October 29, 2024 20:03
@uurien uurien requested review from a team as code owners October 29, 2024 20:03
Comment on lines 57 to 58
input: arguments[0],
base: arguments[1],
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I put the same comment in Ilyas' PR but why using arguments[x] instead of just named arguments ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that I am using it because I am already using arguments to call to apply(this, arguments) or super(...arguments). But yes, it is cleaner if I use input and base variables.

shimmer.wrap(url, 'parse', (parse) => {
return function wrappedParse (input) {
const parsedValue = parse.apply(this, arguments)
if (!parseFinishedChannel.hasSubscribers) return parsedValue
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will parseFinishedChannel have listeners if IAST is not enabled? I'm trying to think whether the url instrumentation should be enabled in Test Visibility or not

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

will parseFinishedChannel have listeners if IAST is not enabled?

I don't think so, I dunno in the future, but for now it is going to be used only to be able to track the string when it converted to URL object. It doesn't look like an object that tracer will want to track.

Copy link
Contributor

@CarlesDD CarlesDD left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that the following case will not be correctly tainted:

const { URL } = require('url')
const baseURL = URL.parse(req.body.url)
const url = URL.parse('/path', baseURL)

This could be addressed in a future PR

Copy link
Contributor

@CarlesDD CarlesDD left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If host name of input contains Unicode characters, range's parameterValue of tainted value will be the ASCII converted value, not the original one.

http://exаmple.com/ will be converted to xn--exmple-4nf.com. The latter is the value reported as valuePart in the evidence of a potential detected vulnerability.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants