|
Site name:
m
Scanned:
Duration:
13m 53s
Status:
Completed
|
Start URLs:
https://instance.example.com/fe/m3/m-login
In-scope URL prefixes:
https://instance.example.com/fe/m3/
https://instance.example.com/m/v3/
Application logins:
Reference:
#150
|
Issues by severity
|
Scan statistics
|
| URLs By issue type | Severity | Confidence | More detail |
|---|---|---|---|
| Strict transport security not enforced [7] | |||
| /fe/m3/m-login | Low | Certain | >> |
| /m/v3/actions/action-log | Low | Certain | >> |
| /m/v3/actions/event-log | Low | Certain | >> |
| /m/v3/actions/login-m-by-name | Low | Certain | >> |
| /m/v3/actions/request-m-password-reset | Low | Certain | >> |
| /m/v3/translations | Low | Certain | >> |
| /m/v3/translations/locales | Low | Certain | >> |
| Open redirection (DOM-based) [4] | |||
| /fe/m3/m-login | Low | Tentative | >> |
| /fe/m3/m-login | Low | Tentative | >> |
| /fe/m3/m-login | Low | Tentative | >> |
| /fe/m3/m-login | Low | Tentative | >> |
| TLS certificate [1] | |||
| / | Info | Certain | >> |
| Content security policy: allows untrusted script execution [7] | |||
| /fe/m3/m-login | Info | Certain | >> |
| /m/v3/actions/action-log | Info | Certain | >> |
| /m/v3/actions/event-log | Info | Certain | >> |
| /m/v3/actions/login-m-by-name | Info | Certain | >> |
| /m/v3/actions/request-m-password-reset | Info | Certain | >> |
| /m/v3/translations | Info | Certain | >> |
| /m/v3/translations/locales | Info | Certain | >> |
| Content security policy: allows untrusted style execution [7] | |||
| /fe/m3/m-login | Info | Certain | >> |
| /m/v3/actions/action-log | Info | Certain | >> |
| /m/v3/actions/event-log | Info | Certain | >> |
| /m/v3/actions/login-m-by-name | Info | Certain | >> |
| /m/v3/actions/request-m-password-reset | Info | Certain | >> |
| /m/v3/translations | Info | Certain | >> |
| /m/v3/translations/locales | Info | Certain | >> |
| Content security policy: allows form hijacking [7] | |||
| /fe/m3/m-login | Info | Certain | >> |
| /m/v3/actions/action-log | Info | Certain | >> |
| /m/v3/actions/event-log | Info | Certain | >> |
| /m/v3/actions/login-m-by-name | Info | Certain | >> |
| /m/v3/actions/request-m-password-reset | Info | Certain | >> |
| /m/v3/translations | Info | Certain | >> |
| /m/v3/translations/locales | Info | Certain | >> |
| Cross-origin resource sharing [6] | |||
| /m/v3/actions/action-log | Info | Certain | >> |
| /m/v3/actions/event-log | Info | Certain | >> |
| /m/v3/actions/login-m-by-name | Info | Certain | >> |
| /m/v3/actions/request-m-password-reset | Info | Certain | >> |
| /m/v3/translations | Info | Certain | >> |
| /m/v3/translations/locales | Info | Certain | >> |
| Cross-origin resource sharing: arbitrary origin trusted [6] | |||
| /m/v3/actions/action-log | Info | Certain | >> |
| /m/v3/actions/event-log | Info | Certain | >> |
| /m/v3/actions/login-m-by-name | Info | Certain | >> |
| /m/v3/actions/request-m-password-reset | Info | Certain | >> |
| /m/v3/translations | Info | Certain | >> |
| /m/v3/translations/locales | Info | Certain | >> |
| Robots.txt file [1] | |||
| /robots.txt | Info | Certain | >> |
| Cacheable HTTPS response [1] | |||
| /fe/m3/m-login | Info | Certain | >> |
| DOM data manipulation (DOM-based) [6] | |||
| /fe/m3/m-login | Info | Firm | >> |
| /fe/m3/m-login | Info | Firm | >> |
| /fe/m3/m-login | Info | Firm | >> |
| /fe/m3/m-login | Info | Firm | >> |
| /fe/m3/m-login | Info | Firm | >> |
| /fe/m3/m-login | Info | Firm | >> |
| URLs By issue type | Severity | Confidence | More detail |
|---|---|---|---|
| Input returned in response (reflected) [2] | |||
| /fe/m3/m-login | Info | Certain | >> |
| /fe/m3/m-login | Info | Certain | >> |
The application fails to prevent users from connecting to it over unencrypted connections. An attacker able to modify a legitimate user's network traffic could bypass the application's use of SSL/TLS encryption, and use the application as a platform for attacks against its users. This attack is performed by rewriting HTTPS links as HTTP, so that if a targeted user follows a link to the site from an HTTP page, their browser never attempts to use an encrypted connection. The sslstrip tool automates this process.
To exploit this vulnerability, an attacker must be suitably positioned to intercept and modify the victim's network traffic.This scenario typically occurs when a client communicates with the server over an insecure connection such as public Wi-Fi, or a corporate or home network that is shared with a compromised computer. Common defenses such as switched networks are not sufficient to prevent this. An attacker situated in the user's ISP or the application's hosting infrastructure could also perform this attack. Note that an advanced adversary could potentially target any connection made over the Internet's core infrastructure.
The application should instruct web browsers to only access the application using HTTPS. To do this, enable HTTP Strict Transport Security (HSTS) by adding a response header with the name 'Strict-Transport-Security' and the value 'max-age=expireTime', where expireTime is the time in seconds that browsers should remember that the site should only be accessed using HTTPS. Consider adding the 'includeSubDomains' flag if appropriate.
Note that because HSTS is a "trust on first use" (TOFU) protocol, a user who has never accessed the application will never have seen the HSTS header, and will therefore still be vulnerable to SSL stripping attacks. To mitigate this risk, you can optionally add the 'preload' flag to the HSTS header, and submit the domain for review by browser vendors.
The application fails to prevent users from connecting to it over unencrypted connections. An attacker able to modify a legitimate user's network traffic could bypass the application's use of SSL/TLS encryption, and use the application as a platform for attacks against its users. This attack is performed by rewriting HTTPS links as HTTP, so that if a targeted user follows a link to the site from an HTTP page, their browser never attempts to use an encrypted connection. The sslstrip tool automates this process.
To exploit this vulnerability, an attacker must be suitably positioned to intercept and modify the victim's network traffic.This scenario typically occurs when a client communicates with the server over an insecure connection such as public Wi-Fi, or a corporate or home network that is shared with a compromised computer. Common defenses such as switched networks are not sufficient to prevent this. An attacker situated in the user's ISP or the application's hosting infrastructure could also perform this attack. Note that an advanced adversary could potentially target any connection made over the Internet's core infrastructure.
The application should instruct web browsers to only access the application using HTTPS. To do this, enable HTTP Strict Transport Security (HSTS) by adding a response header with the name 'Strict-Transport-Security' and the value 'max-age=expireTime', where expireTime is the time in seconds that browsers should remember that the site should only be accessed using HTTPS. Consider adding the 'includeSubDomains' flag if appropriate.
Note that because HSTS is a "trust on first use" (TOFU) protocol, a user who has never accessed the application will never have seen the HSTS header, and will therefore still be vulnerable to SSL stripping attacks. To mitigate this risk, you can optionally add the 'preload' flag to the HSTS header, and submit the domain for review by browser vendors.
The application fails to prevent users from connecting to it over unencrypted connections. An attacker able to modify a legitimate user's network traffic could bypass the application's use of SSL/TLS encryption, and use the application as a platform for attacks against its users. This attack is performed by rewriting HTTPS links as HTTP, so that if a targeted user follows a link to the site from an HTTP page, their browser never attempts to use an encrypted connection. The sslstrip tool automates this process.
To exploit this vulnerability, an attacker must be suitably positioned to intercept and modify the victim's network traffic.This scenario typically occurs when a client communicates with the server over an insecure connection such as public Wi-Fi, or a corporate or home network that is shared with a compromised computer. Common defenses such as switched networks are not sufficient to prevent this. An attacker situated in the user's ISP or the application's hosting infrastructure could also perform this attack. Note that an advanced adversary could potentially target any connection made over the Internet's core infrastructure.
The application should instruct web browsers to only access the application using HTTPS. To do this, enable HTTP Strict Transport Security (HSTS) by adding a response header with the name 'Strict-Transport-Security' and the value 'max-age=expireTime', where expireTime is the time in seconds that browsers should remember that the site should only be accessed using HTTPS. Consider adding the 'includeSubDomains' flag if appropriate.
Note that because HSTS is a "trust on first use" (TOFU) protocol, a user who has never accessed the application will never have seen the HSTS header, and will therefore still be vulnerable to SSL stripping attacks. To mitigate this risk, you can optionally add the 'preload' flag to the HSTS header, and submit the domain for review by browser vendors.
The application fails to prevent users from connecting to it over unencrypted connections. An attacker able to modify a legitimate user's network traffic could bypass the application's use of SSL/TLS encryption, and use the application as a platform for attacks against its users. This attack is performed by rewriting HTTPS links as HTTP, so that if a targeted user follows a link to the site from an HTTP page, their browser never attempts to use an encrypted connection. The sslstrip tool automates this process.
To exploit this vulnerability, an attacker must be suitably positioned to intercept and modify the victim's network traffic.This scenario typically occurs when a client communicates with the server over an insecure connection such as public Wi-Fi, or a corporate or home network that is shared with a compromised computer. Common defenses such as switched networks are not sufficient to prevent this. An attacker situated in the user's ISP or the application's hosting infrastructure could also perform this attack. Note that an advanced adversary could potentially target any connection made over the Internet's core infrastructure.
The application should instruct web browsers to only access the application using HTTPS. To do this, enable HTTP Strict Transport Security (HSTS) by adding a response header with the name 'Strict-Transport-Security' and the value 'max-age=expireTime', where expireTime is the time in seconds that browsers should remember that the site should only be accessed using HTTPS. Consider adding the 'includeSubDomains' flag if appropriate.
Note that because HSTS is a "trust on first use" (TOFU) protocol, a user who has never accessed the application will never have seen the HSTS header, and will therefore still be vulnerable to SSL stripping attacks. To mitigate this risk, you can optionally add the 'preload' flag to the HSTS header, and submit the domain for review by browser vendors.
The application fails to prevent users from connecting to it over unencrypted connections. An attacker able to modify a legitimate user's network traffic could bypass the application's use of SSL/TLS encryption, and use the application as a platform for attacks against its users. This attack is performed by rewriting HTTPS links as HTTP, so that if a targeted user follows a link to the site from an HTTP page, their browser never attempts to use an encrypted connection. The sslstrip tool automates this process.
To exploit this vulnerability, an attacker must be suitably positioned to intercept and modify the victim's network traffic.This scenario typically occurs when a client communicates with the server over an insecure connection such as public Wi-Fi, or a corporate or home network that is shared with a compromised computer. Common defenses such as switched networks are not sufficient to prevent this. An attacker situated in the user's ISP or the application's hosting infrastructure could also perform this attack. Note that an advanced adversary could potentially target any connection made over the Internet's core infrastructure.
The application should instruct web browsers to only access the application using HTTPS. To do this, enable HTTP Strict Transport Security (HSTS) by adding a response header with the name 'Strict-Transport-Security' and the value 'max-age=expireTime', where expireTime is the time in seconds that browsers should remember that the site should only be accessed using HTTPS. Consider adding the 'includeSubDomains' flag if appropriate.
Note that because HSTS is a "trust on first use" (TOFU) protocol, a user who has never accessed the application will never have seen the HSTS header, and will therefore still be vulnerable to SSL stripping attacks. To mitigate this risk, you can optionally add the 'preload' flag to the HSTS header, and submit the domain for review by browser vendors.
The application fails to prevent users from connecting to it over unencrypted connections. An attacker able to modify a legitimate user's network traffic could bypass the application's use of SSL/TLS encryption, and use the application as a platform for attacks against its users. This attack is performed by rewriting HTTPS links as HTTP, so that if a targeted user follows a link to the site from an HTTP page, their browser never attempts to use an encrypted connection. The sslstrip tool automates this process.
To exploit this vulnerability, an attacker must be suitably positioned to intercept and modify the victim's network traffic.This scenario typically occurs when a client communicates with the server over an insecure connection such as public Wi-Fi, or a corporate or home network that is shared with a compromised computer. Common defenses such as switched networks are not sufficient to prevent this. An attacker situated in the user's ISP or the application's hosting infrastructure could also perform this attack. Note that an advanced adversary could potentially target any connection made over the Internet's core infrastructure.
The application should instruct web browsers to only access the application using HTTPS. To do this, enable HTTP Strict Transport Security (HSTS) by adding a response header with the name 'Strict-Transport-Security' and the value 'max-age=expireTime', where expireTime is the time in seconds that browsers should remember that the site should only be accessed using HTTPS. Consider adding the 'includeSubDomains' flag if appropriate.
Note that because HSTS is a "trust on first use" (TOFU) protocol, a user who has never accessed the application will never have seen the HSTS header, and will therefore still be vulnerable to SSL stripping attacks. To mitigate this risk, you can optionally add the 'preload' flag to the HSTS header, and submit the domain for review by browser vendors.
The application fails to prevent users from connecting to it over unencrypted connections. An attacker able to modify a legitimate user's network traffic could bypass the application's use of SSL/TLS encryption, and use the application as a platform for attacks against its users. This attack is performed by rewriting HTTPS links as HTTP, so that if a targeted user follows a link to the site from an HTTP page, their browser never attempts to use an encrypted connection. The sslstrip tool automates this process.
To exploit this vulnerability, an attacker must be suitably positioned to intercept and modify the victim's network traffic.This scenario typically occurs when a client communicates with the server over an insecure connection such as public Wi-Fi, or a corporate or home network that is shared with a compromised computer. Common defenses such as switched networks are not sufficient to prevent this. An attacker situated in the user's ISP or the application's hosting infrastructure could also perform this attack. Note that an advanced adversary could potentially target any connection made over the Internet's core infrastructure.
The application should instruct web browsers to only access the application using HTTPS. To do this, enable HTTP Strict Transport Security (HSTS) by adding a response header with the name 'Strict-Transport-Security' and the value 'max-age=expireTime', where expireTime is the time in seconds that browsers should remember that the site should only be accessed using HTTPS. Consider adding the 'includeSubDomains' flag if appropriate.
Note that because HSTS is a "trust on first use" (TOFU) protocol, a user who has never accessed the application will never have seen the HSTS header, and will therefore still be vulnerable to SSL stripping attacks. To mitigate this risk, you can optionally add the 'preload' flag to the HSTS header, and submit the domain for review by browser vendors.
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM-based open redirection arises when a script writes controllable data into the target of a redirection in an unsafe way. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will cause a redirection to an arbitrary external domain. This behavior can be leveraged to facilitate phishing attacks against users of the application. The ability to use an authentic application URL, targeting the correct domain and with a valid SSL certificate (if SSL is used), lends credibility to the phishing attack because many users, even if they verify these features, will not notice the subsequent redirection to a different domain.
Note: If an attacker is able to control the start of the string that is passed to the redirection API, then it may be possible to escalate this vulnerability into a JavaScript injection attack, by using a URL with the javascript: pseudo-protocol to execute arbitrary script code when the URL is processed by the browser.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based open redirection vulnerabilities is not to dynamically set redirection targets using data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from introducing an arbitrary URL as a redirection target. In general, this is best achieved by using a whitelist of URLs that are permitted redirection targets, and strictly validating the target against this list before performing the redirection.
Data is read from location.href and passed to xhr.send.
The following value was injected into the source:
https://instance.example.com/fe/m3/m-login?iepuap2p8w=iepuap2p8w%27%22`'"/iepuap2p8w/><iepuap2p8w/\>fwqsx8nplw&#iepuap2p8w=iepuap2p8w%27%22`'"/iepuap2p8w/><iepuap2p8w/\>fwqsx8nplw&
The previous value reached the sink:
{"access_token":"ed227e6e767e4584a5b3c10dc8b68c2a","data":{"environment":"development","level":"error","endpoint":"api.rollbar.com/api/1/item/","platform":"browser","framework":"browser-js","language":"javascript","server":{},"uuid":"a4231093-6d2e-4dbb-9f7f-7f0c97fde382","notifier":{"name":"rollbar-browser-js","version":"2.26.2","configured_options":{"captureUncaught":true,"captureUnhandledRejections":true,"payload":{"environment":"development"}},"diagnostic":{"original_arg_types":["string","error","undefined"],"is_uncaught":true,"raw_error":{"message":"Cannot read properties of null (reading 'once')","name":"TypeError","constructor_name":"TypeError","stack":"TypeError: Cannot read properties of null (reading 'once')\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\n at https://instance.example.com/fe/js/cv-script.js:202367:10"}}},"request":{"url":"https://instance.example.com/fe/m3/m-login?iepuap2p8w=iepuap2p8w%27%22`'\"/iepuap2p8w/><iepuap2p8w/\\>fwqsx8nplw&#iepuap2p8w=iepuap2p8w%27%22`'\"/iepuap2p8w/><iepuap2p8w/\\>fwqsx8nplw&","query_string":"?kpiqhi5l29=kpiqhi5l29%27%22`'\"/kpiqhi5l29/><kpiqhi5l29/\\>ba6kcvqqrk&","user_ip":"$remote_ip"},"client":{"runtime_ms":53,"timestamp":1730843997,"javascript":{"browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.70 Safari/537.36","language":"en-US","cookie_enabled":true,"screen":{"width":800,"height":600},"plugins":[]}},"body":{"trace":{"exception":{"class":"TypeError","message":"Cannot read properties of null (reading 'once')","description":"Uncaught TypeError: Cannot read properties of null (reading 'once')"},"frames":[{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":202367,"method":"[anonymous]","colno":10},{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":202406,"method":"InfoReceiver.doXhr","colno":11}]},"telemetry":[{"level":"error","type":"error","timestamp_ms":1730843997119,"body":{"message":"Cannot read properties of null (reading 'once')","stack":"TypeError: Cannot read properties of null (reading 'once')\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\n at https://instance.example.com/fe/js/cv-script.js:202367:10"},"source":"client","uuid":"a4231093-6d2e-4dbb-9f7f-7f0c97fde382"}]},"context":""}}
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get href (<anonymous>:1:249544) at Array.<anonymous> (https://instance.example.com/fe/js/cv-script.js:201791:42576) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.addBaseInfo (https://instance.example.com/fe/js/cv-script.js:201791:42473) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.ensureItemHasSomethingToSay (https://instance.example.com/fe/js/cv-script.js:201791:42150) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.handleItemWithError (https://instance.example.com/fe/js/cv-script.js:201791:42001) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.handleDomException (https://instance.example.com/fe/js/cv-script.js:201791:41530) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at o._applyTransforms (https://instance.example.com/fe/js/cv-script.js:201791:31998) at o.log (https://instance.example.com/fe/js/cv-script.js:201791:31700) at a._log (https://instance.example.com/fe/js/cv-script.js:201791:24343) at a.log (https://instance.example.com/fe/js/cv-script.js:201791:23115) at m.handleUncaughtException (https://instance.example.com/fe/js/cv-script.js:201791:18878) at n (https://instance.example.com/fe/js/cv-script.js:201791:35409) at i (https://instance.example.com/fe/js/cv-script.js:201791:35806)
The stack trace at the sink was:
at Object.XMhUr (<anonymous>:1:544502) at _0x13dcf0 (<anonymous>:1:558761) at _0xdc6a5f.<computed>._0x13cc4d.oknbI._0x3e2633.XMLHttpRequest.<computed> (<anonymous>:1:458938) at XMLHttpRequest.send (https://instance.example.com/fe/js/cv-script.js:201791:62448) at t.exports (https://instance.example.com/fe/js/cv-script.js:201791:39384) at s._makeRequest (https://instance.example.com/fe/js/cv-script.js:201791:37748) at s._makeZoneRequest (https://instance.example.com/fe/js/cv-script.js:201791:37505) at s.post (https://instance.example.com/fe/js/cv-script.js:201791:36989) at https://instance.example.com/fe/js/cv-script.js:201791:32574
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM-based open redirection arises when a script writes controllable data into the target of a redirection in an unsafe way. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will cause a redirection to an arbitrary external domain. This behavior can be leveraged to facilitate phishing attacks against users of the application. The ability to use an authentic application URL, targeting the correct domain and with a valid SSL certificate (if SSL is used), lends credibility to the phishing attack because many users, even if they verify these features, will not notice the subsequent redirection to a different domain.
Note: If an attacker is able to control the start of the string that is passed to the redirection API, then it may be possible to escalate this vulnerability into a JavaScript injection attack, by using a URL with the javascript: pseudo-protocol to execute arbitrary script code when the URL is processed by the browser.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based open redirection vulnerabilities is not to dynamically set redirection targets using data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from introducing an arbitrary URL as a redirection target. In general, this is best achieved by using a whitelist of URLs that are permitted redirection targets, and strictly validating the target against this list before performing the redirection.
Data is read from location.search and passed to xhr.send.
The following value was injected into the source:
?kpiqhi5l29=kpiqhi5l29%27%22`'"/kpiqhi5l29/><kpiqhi5l29/\>ba6kcvqqrk&
The previous value reached the sink:
{"access_token":"ed227e6e767e4584a5b3c10dc8b68c2a","data":{"environment":"development","level":"error","endpoint":"api.rollbar.com/api/1/item/","platform":"browser","framework":"browser-js","language":"javascript","server":{},"uuid":"a4231093-6d2e-4dbb-9f7f-7f0c97fde382","notifier":{"name":"rollbar-browser-js","version":"2.26.2","configured_options":{"captureUncaught":true,"captureUnhandledRejections":true,"payload":{"environment":"development"}},"diagnostic":{"original_arg_types":["string","error","undefined"],"is_uncaught":true,"raw_error":{"message":"Cannot read properties of null (reading 'once')","name":"TypeError","constructor_name":"TypeError","stack":"TypeError: Cannot read properties of null (reading 'once')\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\n at https://instance.example.com/fe/js/cv-script.js:202367:10"}}},"request":{"url":"https://instance.example.com/fe/m3/m-login?iepuap2p8w=iepuap2p8w%27%22`'\"/iepuap2p8w/><iepuap2p8w/\\>fwqsx8nplw&#iepuap2p8w=iepuap2p8w%27%22`'\"/iepuap2p8w/><iepuap2p8w/\\>fwqsx8nplw&","query_string":"?kpiqhi5l29=kpiqhi5l29%27%22`'\"/kpiqhi5l29/><kpiqhi5l29/\\>ba6kcvqqrk&","user_ip":"$remote_ip"},"client":{"runtime_ms":53,"timestamp":1730843997,"javascript":{"browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.70 Safari/537.36","language":"en-US","cookie_enabled":true,"screen":{"width":800,"height":600},"plugins":[]}},"body":{"trace":{"exception":{"class":"TypeError","message":"Cannot read properties of null (reading 'once')","description":"Uncaught TypeError: Cannot read properties of null (reading 'once')"},"frames":[{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":202367,"method":"[anonymous]","colno":10},{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":202406,"method":"InfoReceiver.doXhr","colno":11}]},"telemetry":[{"level":"error","type":"error","timestamp_ms":1730843997119,"body":{"message":"Cannot read properties of null (reading 'once')","stack":"TypeError: Cannot read properties of null (reading 'once')\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\n at https://instance.example.com/fe/js/cv-script.js:202367:10"},"source":"client","uuid":"a4231093-6d2e-4dbb-9f7f-7f0c97fde382"}]},"context":""}}
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get search (<anonymous>:1:248279) at Array.<anonymous> (https://instance.example.com/fe/js/cv-script.js:201791:42607) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.addBaseInfo (https://instance.example.com/fe/js/cv-script.js:201791:42473) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.ensureItemHasSomethingToSay (https://instance.example.com/fe/js/cv-script.js:201791:42150) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.handleItemWithError (https://instance.example.com/fe/js/cv-script.js:201791:42001) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.handleDomException (https://instance.example.com/fe/js/cv-script.js:201791:41530) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at o._applyTransforms (https://instance.example.com/fe/js/cv-script.js:201791:31998) at o.log (https://instance.example.com/fe/js/cv-script.js:201791:31700) at a._log (https://instance.example.com/fe/js/cv-script.js:201791:24343) at a.log (https://instance.example.com/fe/js/cv-script.js:201791:23115) at m.handleUncaughtException (https://instance.example.com/fe/js/cv-script.js:201791:18878) at n (https://instance.example.com/fe/js/cv-script.js:201791:35409) at i (https://instance.example.com/fe/js/cv-script.js:201791:35806)
The stack trace at the sink was:
at Object.XMhUr (<anonymous>:1:544502) at _0x13dcf0 (<anonymous>:1:558761) at _0xdc6a5f.<computed>._0x13cc4d.oknbI._0x3e2633.XMLHttpRequest.<computed> (<anonymous>:1:458938) at XMLHttpRequest.send (https://instance.example.com/fe/js/cv-script.js:201791:62448) at t.exports (https://instance.example.com/fe/js/cv-script.js:201791:39384) at s._makeRequest (https://instance.example.com/fe/js/cv-script.js:201791:37748) at s._makeZoneRequest (https://instance.example.com/fe/js/cv-script.js:201791:37505) at s.post (https://instance.example.com/fe/js/cv-script.js:201791:36989) at https://instance.example.com/fe/js/cv-script.js:201791:32574
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM-based open redirection arises when a script writes controllable data into the target of a redirection in an unsafe way. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will cause a redirection to an arbitrary external domain. This behavior can be leveraged to facilitate phishing attacks against users of the application. The ability to use an authentic application URL, targeting the correct domain and with a valid SSL certificate (if SSL is used), lends credibility to the phishing attack because many users, even if they verify these features, will not notice the subsequent redirection to a different domain.
Note: If an attacker is able to control the start of the string that is passed to the redirection API, then it may be possible to escalate this vulnerability into a JavaScript injection attack, by using a URL with the javascript: pseudo-protocol to execute arbitrary script code when the URL is processed by the browser.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based open redirection vulnerabilities is not to dynamically set redirection targets using data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from introducing an arbitrary URL as a redirection target. In general, this is best achieved by using a whitelist of URLs that are permitted redirection targets, and strictly validating the target against this list before performing the redirection.
Data is read from location.href and passed to xhr.send.
The following value was injected into the source:
https://instance.example.com/fe/m3/m-login?bih4qyzpvt=bih4qyzpvt%27%22`'"/bih4qyzpvt/><bih4qyzpvt/\>sbxdhx44wf&#bih4qyzpvt=bih4qyzpvt%27%22`'"/bih4qyzpvt/><bih4qyzpvt/\>sbxdhx44wf&
The previous value reached the sink:
{"access_token":"ed227e6e767e4584a5b3c10dc8b68c2a","data":{"environment":"development","level":"error","endpoint":"api.rollbar.com/api/1/item/","platform":"browser","framework":"browser-js","language":"javascript","server":{},"uuid":"8ea547f7-4ead-4638-bd75-97e9d3af07a9","notifier":{"name":"rollbar-browser-js","version":"2.26.2","configured_options":{"captureUncaught":true,"captureUnhandledRejections":true,"payload":{"environment":"development"}},"diagnostic":{"original_arg_types":["string","error","undefined"],"is_uncaught":true,"raw_error":{"message":"Request failed with status code 500","name":"Error","constructor_name":"Error","stack":"Error: Request failed with status code 500\n at createError (https://instance.example.com/fe/js/cv-script.js:51368:15)\n at settle (https://instance.example.com/fe/js/cv-script.js:51664:12)\n at XMLHttpRequest.onloadend (https://instance.example.com/fe/js/cv-script.js:50688:7)"}}},"request":{"url":"https://instance.example.com/fe/m3/m-login?bih4qyzpvt=bih4qyzpvt%27%22`'\"/bih4qyzpvt/><bih4qyzpvt/\\>sbxdhx44wf&#bih4qyzpvt=bih4qyzpvt%27%22`'\"/bih4qyzpvt/><bih4qyzpvt/\\>sbxdhx44wf&","query_string":"?esux3absmq=esux3absmq%27%22`'\"/esux3absmq/><esux3absmq/\\>z0k5afa1h6&","user_ip":"$remote_ip"},"client":{"runtime_ms":497,"timestamp":1730843998,"javascript":{"browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.70 Safari/537.36","language":"en-US","cookie_enabled":true,"screen":{"width":800,"height":600},"plugins":[]}},"body":{"trace":{"exception":{"class":"Error","message":"Request failed with status code 500","description":"Request failed with status code 500"},"frames":[{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":50688,"method":"XMLHttpRequest.onloadend","colno":7},{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":51664,"method":"settle","colno":12},{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":51368,"method":"createError","colno":15}]},"telemetry":[{"level":"error","type":"error","timestamp_ms":1730843997119,"body":{"message":"Cannot read properties of null (reading 'once')","stack":"TypeError: Cannot read properties of null (reading 'once')\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\n at https://instance.example.com/fe/js/cv-script.js:202367:10"},"source":"client","uuid":"a4231093-6d2e-4dbb-9f7f-7f0c97fde382"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:-------------------------"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:DOM XSS found"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Context: NaN.queryString"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Tag name: "},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Original url: https://instance.example.com/fe/m3/m-login"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Generated url: https://instance.example.com/fe/m3/m-login?iepuap2p8w=iepuap2p8w%27%22`'\"/iepuap2p8w/><iepuap2p8w/\\>fwqsx8nplw&#iepuap2p8w=iepuap2p8w%27%22`'\"/iepuap2p8w/><iepuap2p8w/\\>fwqsx8nplw&"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:PoC:Unable to generate PoC"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Source identified as: location.href"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Source Stack trace: at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377)\n at get href (<anonymous>:1:249544)\n at Array.<anonymous> (https://instance.example.com/fe/js/cv-script.js:201791:42576)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.addBaseInfo (https://instance.example.com/fe/js/cv-script.js:201791:42473)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.ensureItemHasSomethingToSay (https://instance.example.com/fe/js/cv-script.js:201791:42150)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.handleItemWithError (https://instance.example.com/fe/js/cv-script.js:201791:42001)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.handleDomException (https://instance.example.com/fe/js/cv-script.js:201791:41530)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at o._applyTransforms (https://instance.example.com/fe/js/cv-script.js:201791:31998)\n at o.log (https://instance.example.com/fe/js/cv-script.js:201791:31700)\n at a._log (https://instance.example.com/fe/js/cv-script.js:201791:24343)\n at a.log (https://instance.example.com/fe/js/cv-script.js:201791:23115)\n at m.handleUncaughtException (https://instance.example.com/fe/js/cv-script.js:201791:18878)\n at n (https://instance.example.com/fe/js/cv-script.js:201791:35409)\n at i (https://instance.example.com/fe/js/cv-script.js:201791:35806)"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink identified as: xhr.send"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink Stack trace: at Object.XMhUr (<anonymous>:1:544502)\n at _0x13dcf0 (<anonymous>:1:558761)\n at _0xdc6a5f.<computed>._0x13cc4d.oknbI._0x3e2633.XMLHttpRequest.<computed> (<anonymous>:1:458938)\n at XMLHttpRequest.send (https://instance.example.com/fe/js/cv-script.js:201791:62448)\n at t.exports (https://instance.example.com/fe/js/cv-script.js:201791:39384)\n at s._makeRequest (https://instance.example.com/fe/js/cv-script.js:201791:37748)\n at s._makeZoneRequest (https://instance.example.com/fe/js/cv-script.js:201791:37505)\n at s.post (https://instance.example.com/fe/js/cv-script.js:201791:36989)\n at https://instance.example.com/fe/js/cv-script.js:201791:32574"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink value: {\"access_token\":\"ed227e6e767e4584a5b3c10dc8b68c2a\",\"data\":{\"environment\":\"development\",\"level\":\"error\",\"endpoint\":\"api.rollbar.com/api/1/item/\",\"platform\":\"browser\",\"framework\":\"browser-js\",\"language\":\"javascript\",\"server\":{},\"uuid\":\"a4231093-6d2e-4dbb-9f7f-7f0c97fde382\",\"notifier\":{\"name\":\"rollbar-browser-js\",\"version\":\"2.26.2\",\"configured_options\":{\"captureUncaught\":true,\"captureUnhandledRejections\":true,\"payload\":{\"environment\":\"development\"}},\"diagnostic\":{\"original_arg_types\":[\"string\",\"error\",\"undefined\"],\"is_uncaught\":true,\"raw_error\":{\"message\":\"Cannot read properties of null (reading 'once')\",\"name\":\"TypeError\",\"constructor_name\":\"TypeError\",\"stack\":\"TypeError: Cannot read properties of null (reading 'once')\\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\\n at https://instance.example.com/fe/js/cv-script.js:202367:10\"}}},\"request\":{\"url\":\"https://instance.example.com/fe/m3/m-login?iepuap2p8w=iepuap2p8w%27%22`'\\\"/iepuap2p8w/><iepuap2p8w/\\\\>fwqsx8nplw&#iepuap2p8w=iepuap2p8w%27%22`'\\\"/iepuap2p8w/><iepuap2p8w/\\\\>fwqsx8nplw&\",\"query_string\":\"?kpiqhi5l29=kpiqhi5l29%27%22`'\\\"/kpiqhi5l29/><kpiqhi5l29/\\\\>ba6kcvqqrk&\",\"user_ip\":\"$remote_ip\"},\"client\":{\"runtime_ms\":53,\"timestamp\":1730843997,\"javascript\":{\"browser\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.70 Safari/537.36\",\"language\":\"en-US\",\"cookie_enabled\":true,\"screen\":{\"width\":800,\"height\":600},\"plugins\":[]}},\"body\":{\"trace\":{\"exception\":{\"class\":\"TypeError\",\"message\":\"Cannot read properties of null (reading 'once')\",\"description\":\"Uncaught TypeError: Cannot read properties of null (reading 'once')\"},\"frames\":[{\"filename\":\"https://instance.example.com/fe/js/cv-script.js\",\"lineno\":202367,\"method\":\"[anonymous]\",\"colno\":10},{\"filename\":\"https://instance.example.com/fe/js/cv-script.js\",\"lineno\":202406,\"method\":\"InfoReceiver.doXhr\",\"colno\":11}]},\"telemetry\":[{\"level\":\"error\",\"type\":\"error\",\"timestamp_ms\":1730843997119,\"body\":{\"message\":\"Cannot read properties of null (reading 'once')\",\"stack\":\"TypeError: Cannot read properties of null (reading 'once')\\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\\n at https://instance.example.com/fe/js/cv-script.js:202367:10\"},\"source\":\"client\",\"uuid\":\"a4231093-6d2e-4dbb-9f7f-7f0c97fde382\"}]},\"context\":\"\"}}"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:-------------------------"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:-------------------------"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:DOM XSS found"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Context: NaN.queryString"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Tag name: "},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Original url: https://instance.example.com/fe/m3/m-login"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Generated url: https://instance.example.com/fe/m3/m-login?kpiqhi5l29=kpiqhi5l29%27%22`'\"/kpiqhi5l29/><kpiqhi5l29/\\>ba6kcvqqrk&"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:PoC:Unable to generate PoC"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Source identified as: location.search"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Source Stack trace: at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377)\n at get search (<anonymous>:1:248279)\n at Array.<anonymous> (https://instance.example.com/fe/js/cv-script.js:201791:42607)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.addBaseInfo (https://instance.example.com/fe/js/cv-script.js:201791:42473)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.ensureItemHasSomethingToSay (https://instance.example.com/fe/js/cv-script.js:201791:42150)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.handleItemWithError (https://instance.example.com/fe/js/cv-script.js:201791:42001)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.handleDomException (https://instance.example.com/fe/js/cv-script.js:201791:41530)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at o._applyTransforms (https://instance.example.com/fe/js/cv-script.js:201791:31998)\n at o.log (https://instance.example.com/fe/js/cv-script.js:201791:31700)\n at a._log (https://instance.example.com/fe/js/cv-script.js:201791:24343)\n at a.log (https://instance.example.com/fe/js/cv-script.js:201791:23115)\n at m.handleUncaughtException (https://instance.example.com/fe/js/cv-script.js:201791:18878)\n at n (https://instance.example.com/fe/js/cv-script.js:201791:35409)\n at i (https://instance.example.com/fe/js/cv-script.js:201791:35806)"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink identified as: xhr.send"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink Stack trace: at Object.XMhUr (<anonymous>:1:544502)\n at _0x13dcf0 (<anonymous>:1:558761)\n at _0xdc6a5f.<computed>._0x13cc4d.oknbI._0x3e2633.XMLHttpRequest.<computed> (<anonymous>:1:458938)\n at XMLHttpRequest.send (https://instance.example.com/fe/js/cv-script.js:201791:62448)\n at t.exports (https://instance.example.com/fe/js/cv-script.js:201791:39384)\n at s._makeRequest (https://instance.example.com/fe/js/cv-script.js:201791:37748)\n at s._makeZoneRequest (https://instance.example.com/fe/js/cv-script.js:201791:37505)\n at s.post (https://instance.example.com/fe/js/cv-script.js:201791:36989)\n at https://instance.example.com/fe/js/cv-script.js:201791:32574"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink value: {\"access_token\":\"ed227e6e767e4584a5b3c10dc8b68c2a\",\"data\":{\"environment\":\"development\",\"level\":\"error\",\"endpoint\":\"api.rollbar.com/api/1/item/\",\"platform\":\"browser\",\"framework\":\"browser-js\",\"language\":\"javascript\",\"server\":{},\"uuid\":\"a4231093-6d2e-4dbb-9f7f-7f0c97fde382\",\"notifier\":{\"name\":\"rollbar-browser-js\",\"version\":\"2.26.2\",\"configured_options\":{\"captureUncaught\":true,\"captureUnhandledRejections\":true,\"payload\":{\"environment\":\"development\"}},\"diagnostic\":{\"original_arg_types\":[\"string\",\"error\",\"undefined\"],\"is_uncaught\":true,\"raw_error\":{\"message\":\"Cannot read properties of null (reading 'once')\",\"name\":\"TypeError\",\"constructor_name\":\"TypeError\",\"stack\":\"TypeError: Cannot read properties of null (reading 'once')\\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\\n at https://instance.example.com/fe/js/cv-script.js:202367:10\"}}},\"request\":{\"url\":\"https://instance.example.com/fe/m3/m-login?iepuap2p8w=iepuap2p8w%27%22`'\\\"/iepuap2p8w/><iepuap2p8w/\\\\>fwqsx8nplw&#iepuap2p8w=iepuap2p8w%27%22`'\\\"/iepuap2p8w/><iepuap2p8w/\\\\>fwqsx8nplw&\",\"query_string\":\"?kpiqhi5l29=kpiqhi5l29%27%22`'\\\"/kpiqhi5l29/><kpiqhi5l29/\\\\>ba6kcvqqrk&\",\"user_ip\":\"$remote_ip\"},\"client\":{\"runtime_ms\":53,\"timestamp\":1730843997,\"javascript\":{\"browser\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.70 Safari/537.36\",\"language\":\"en-US\",\"cookie_enabled\":true,\"screen\":{\"width\":800,\"height\":600},\"plugins\":[]}},\"body\":{\"trace\":{\"exception\":{\"class\":\"TypeError\",\"message\":\"Cannot read properties of null (reading 'once')\",\"description\":\"Uncaught TypeError: Cannot read properties of null (reading 'once')\"},\"frames\":[{\"filename\":\"https://instance.example.com/fe/js/cv-script.js\",\"lineno\":202367,\"method\":\"[anonymous]\",\"colno\":10},{\"filename\":\"https://instance.example.com/fe/js/cv-script.js\",\"lineno\":202406,\"method\":\"InfoReceiver.doXhr\",\"colno\":11}]},\"telemetry\":[{\"level\":\"error\",\"type\":\"error\",\"timestamp_ms\":1730843997119,\"body\":{\"message\":\"Cannot read properties of null (reading 'once')\",\"stack\":\"TypeError: Cannot read properties of null (reading 'once')\\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\\n at https://instance.example.com/fe/js/cv-script.js:202367:10\"},\"source\":\"client\",\"uuid\":\"a4231093-6d2e-4dbb-9f7f-7f0c97fde382\"}]},\"context\":\"\"}}"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997220,"body":{"message":"--DynamicJavaScriptAnalysis from JS:-------------------------"},"source":"client"},{"level":"error","type":"network","timestamp_ms":1730843997410,"body":{"method":"GET","url":"https://localhost:8000/sockjs-node/info?t=1730843997179","status_code":0,"start_time_ms":1730843997180,"end_time_ms":1730843997410,"subtype":"xhr","response_content_type":null},"source":"client"},{"level":"error","type":"network","timestamp_ms":1730843997410,"body":{"method":"GET","url":"https://localhost:8000/sockjs-node/info?t=1730843997221","status_code":0,"start_time_ms":1730843997221,"end_time_ms":1730843997410,"subtype":"xhr","response_content_type":null},"source":"client"},{"level":"info","type":"network","timestamp_ms":1730843997482,"body":{"method":"POST","url":"https://api.rollbar.com:443/api/1/item/","status_code":200,"start_time_ms":1730843997213,"end_time_ms":1730843997482,"request_content_type":"application/json","subtype":"xhr","response_content_type":"application/json; charset=utf-8"},"source":"client"},{"level":"error","type":"error","timestamp_ms":1730843997563,"body":{"message":"Request failed with status code 500","stack":"Error: Request failed with status code 500\n at createError (https://instance.example.com/fe/js/cv-script.js:51368:15)\n at settle (https://instance.example.com/fe/js/cv-script.js:51664:12)\n at XMLHttpRequest.onloadend (https://instance.example.com/fe/js/cv-script.js:50688:7)"},"source":"client","uuid":"8ea547f7-4ead-4638-bd75-97e9d3af07a9"}]},"context":""}}
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get href (<anonymous>:1:249544) at Array.<anonymous> (https://instance.example.com/fe/js/cv-script.js:201791:42576) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.addBaseInfo (https://instance.example.com/fe/js/cv-script.js:201791:42473) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.ensureItemHasSomethingToSay (https://instance.example.com/fe/js/cv-script.js:201791:42150) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.handleItemWithError (https://instance.example.com/fe/js/cv-script.js:201791:42001) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.handleDomException (https://instance.example.com/fe/js/cv-script.js:201791:41530) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at o._applyTransforms (https://instance.example.com/fe/js/cv-script.js:201791:31998) at o.log (https://instance.example.com/fe/js/cv-script.js:201791:31700) at a._log (https://instance.example.com/fe/js/cv-script.js:201791:24343) at a.log (https://instance.example.com/fe/js/cv-script.js:201791:23115) at m.handleUnhandledRejection (https://instance.example.com/fe/js/cv-script.js:201791:19920) at n (https://instance.example.com/fe/js/cv-script.js:201791:36330)
The stack trace at the sink was:
at Object.XMhUr (<anonymous>:1:544502) at _0x13dcf0 (<anonymous>:1:558761) at _0xdc6a5f.<computed>._0x13cc4d.oknbI._0x3e2633.XMLHttpRequest.<computed> (<anonymous>:1:458938) at XMLHttpRequest.send (https://instance.example.com/fe/js/cv-script.js:201791:62448) at t.exports (https://instance.example.com/fe/js/cv-script.js:201791:39384) at s._makeRequest (https://instance.example.com/fe/js/cv-script.js:201791:37748) at s._makeZoneRequest (https://instance.example.com/fe/js/cv-script.js:201791:37505) at s.post (https://instance.example.com/fe/js/cv-script.js:201791:36989) at https://instance.example.com/fe/js/cv-script.js:201791:32574
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM-based open redirection arises when a script writes controllable data into the target of a redirection in an unsafe way. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will cause a redirection to an arbitrary external domain. This behavior can be leveraged to facilitate phishing attacks against users of the application. The ability to use an authentic application URL, targeting the correct domain and with a valid SSL certificate (if SSL is used), lends credibility to the phishing attack because many users, even if they verify these features, will not notice the subsequent redirection to a different domain.
Note: If an attacker is able to control the start of the string that is passed to the redirection API, then it may be possible to escalate this vulnerability into a JavaScript injection attack, by using a URL with the javascript: pseudo-protocol to execute arbitrary script code when the URL is processed by the browser.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based open redirection vulnerabilities is not to dynamically set redirection targets using data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from introducing an arbitrary URL as a redirection target. In general, this is best achieved by using a whitelist of URLs that are permitted redirection targets, and strictly validating the target against this list before performing the redirection.
Data is read from location.search and passed to xhr.send.
The following value was injected into the source:
?esux3absmq=esux3absmq%27%22`'"/esux3absmq/><esux3absmq/\>z0k5afa1h6&
The previous value reached the sink:
{"access_token":"ed227e6e767e4584a5b3c10dc8b68c2a","data":{"environment":"development","level":"error","endpoint":"api.rollbar.com/api/1/item/","platform":"browser","framework":"browser-js","language":"javascript","server":{},"uuid":"8ea547f7-4ead-4638-bd75-97e9d3af07a9","notifier":{"name":"rollbar-browser-js","version":"2.26.2","configured_options":{"captureUncaught":true,"captureUnhandledRejections":true,"payload":{"environment":"development"}},"diagnostic":{"original_arg_types":["string","error","undefined"],"is_uncaught":true,"raw_error":{"message":"Request failed with status code 500","name":"Error","constructor_name":"Error","stack":"Error: Request failed with status code 500\n at createError (https://instance.example.com/fe/js/cv-script.js:51368:15)\n at settle (https://instance.example.com/fe/js/cv-script.js:51664:12)\n at XMLHttpRequest.onloadend (https://instance.example.com/fe/js/cv-script.js:50688:7)"}}},"request":{"url":"https://instance.example.com/fe/m3/m-login?bih4qyzpvt=bih4qyzpvt%27%22`'\"/bih4qyzpvt/><bih4qyzpvt/\\>sbxdhx44wf&#bih4qyzpvt=bih4qyzpvt%27%22`'\"/bih4qyzpvt/><bih4qyzpvt/\\>sbxdhx44wf&","query_string":"?esux3absmq=esux3absmq%27%22`'\"/esux3absmq/><esux3absmq/\\>z0k5afa1h6&","user_ip":"$remote_ip"},"client":{"runtime_ms":497,"timestamp":1730843998,"javascript":{"browser":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.70 Safari/537.36","language":"en-US","cookie_enabled":true,"screen":{"width":800,"height":600},"plugins":[]}},"body":{"trace":{"exception":{"class":"Error","message":"Request failed with status code 500","description":"Request failed with status code 500"},"frames":[{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":50688,"method":"XMLHttpRequest.onloadend","colno":7},{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":51664,"method":"settle","colno":12},{"filename":"https://instance.example.com/fe/js/cv-script.js","lineno":51368,"method":"createError","colno":15}]},"telemetry":[{"level":"error","type":"error","timestamp_ms":1730843997119,"body":{"message":"Cannot read properties of null (reading 'once')","stack":"TypeError: Cannot read properties of null (reading 'once')\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\n at https://instance.example.com/fe/js/cv-script.js:202367:10"},"source":"client","uuid":"a4231093-6d2e-4dbb-9f7f-7f0c97fde382"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:-------------------------"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:DOM XSS found"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Context: NaN.queryString"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Tag name: "},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Original url: https://instance.example.com/fe/m3/m-login"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Generated url: https://instance.example.com/fe/m3/m-login?iepuap2p8w=iepuap2p8w%27%22`'\"/iepuap2p8w/><iepuap2p8w/\\>fwqsx8nplw&#iepuap2p8w=iepuap2p8w%27%22`'\"/iepuap2p8w/><iepuap2p8w/\\>fwqsx8nplw&"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:PoC:Unable to generate PoC"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997217,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Source identified as: location.href"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Source Stack trace: at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377)\n at get href (<anonymous>:1:249544)\n at Array.<anonymous> (https://instance.example.com/fe/js/cv-script.js:201791:42576)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.addBaseInfo (https://instance.example.com/fe/js/cv-script.js:201791:42473)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.ensureItemHasSomethingToSay (https://instance.example.com/fe/js/cv-script.js:201791:42150)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.handleItemWithError (https://instance.example.com/fe/js/cv-script.js:201791:42001)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.handleDomException (https://instance.example.com/fe/js/cv-script.js:201791:41530)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at o._applyTransforms (https://instance.example.com/fe/js/cv-script.js:201791:31998)\n at o.log (https://instance.example.com/fe/js/cv-script.js:201791:31700)\n at a._log (https://instance.example.com/fe/js/cv-script.js:201791:24343)\n at a.log (https://instance.example.com/fe/js/cv-script.js:201791:23115)\n at m.handleUncaughtException (https://instance.example.com/fe/js/cv-script.js:201791:18878)\n at n (https://instance.example.com/fe/js/cv-script.js:201791:35409)\n at i (https://instance.example.com/fe/js/cv-script.js:201791:35806)"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink identified as: xhr.send"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink Stack trace: at Object.XMhUr (<anonymous>:1:544502)\n at _0x13dcf0 (<anonymous>:1:558761)\n at _0xdc6a5f.<computed>._0x13cc4d.oknbI._0x3e2633.XMLHttpRequest.<computed> (<anonymous>:1:458938)\n at XMLHttpRequest.send (https://instance.example.com/fe/js/cv-script.js:201791:62448)\n at t.exports (https://instance.example.com/fe/js/cv-script.js:201791:39384)\n at s._makeRequest (https://instance.example.com/fe/js/cv-script.js:201791:37748)\n at s._makeZoneRequest (https://instance.example.com/fe/js/cv-script.js:201791:37505)\n at s.post (https://instance.example.com/fe/js/cv-script.js:201791:36989)\n at https://instance.example.com/fe/js/cv-script.js:201791:32574"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink value: {\"access_token\":\"ed227e6e767e4584a5b3c10dc8b68c2a\",\"data\":{\"environment\":\"development\",\"level\":\"error\",\"endpoint\":\"api.rollbar.com/api/1/item/\",\"platform\":\"browser\",\"framework\":\"browser-js\",\"language\":\"javascript\",\"server\":{},\"uuid\":\"a4231093-6d2e-4dbb-9f7f-7f0c97fde382\",\"notifier\":{\"name\":\"rollbar-browser-js\",\"version\":\"2.26.2\",\"configured_options\":{\"captureUncaught\":true,\"captureUnhandledRejections\":true,\"payload\":{\"environment\":\"development\"}},\"diagnostic\":{\"original_arg_types\":[\"string\",\"error\",\"undefined\"],\"is_uncaught\":true,\"raw_error\":{\"message\":\"Cannot read properties of null (reading 'once')\",\"name\":\"TypeError\",\"constructor_name\":\"TypeError\",\"stack\":\"TypeError: Cannot read properties of null (reading 'once')\\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\\n at https://instance.example.com/fe/js/cv-script.js:202367:10\"}}},\"request\":{\"url\":\"https://instance.example.com/fe/m3/m-login?iepuap2p8w=iepuap2p8w%27%22`'\\\"/iepuap2p8w/><iepuap2p8w/\\\\>fwqsx8nplw&#iepuap2p8w=iepuap2p8w%27%22`'\\\"/iepuap2p8w/><iepuap2p8w/\\\\>fwqsx8nplw&\",\"query_string\":\"?kpiqhi5l29=kpiqhi5l29%27%22`'\\\"/kpiqhi5l29/><kpiqhi5l29/\\\\>ba6kcvqqrk&\",\"user_ip\":\"$remote_ip\"},\"client\":{\"runtime_ms\":53,\"timestamp\":1730843997,\"javascript\":{\"browser\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.70 Safari/537.36\",\"language\":\"en-US\",\"cookie_enabled\":true,\"screen\":{\"width\":800,\"height\":600},\"plugins\":[]}},\"body\":{\"trace\":{\"exception\":{\"class\":\"TypeError\",\"message\":\"Cannot read properties of null (reading 'once')\",\"description\":\"Uncaught TypeError: Cannot read properties of null (reading 'once')\"},\"frames\":[{\"filename\":\"https://instance.example.com/fe/js/cv-script.js\",\"lineno\":202367,\"method\":\"[anonymous]\",\"colno\":10},{\"filename\":\"https://instance.example.com/fe/js/cv-script.js\",\"lineno\":202406,\"method\":\"InfoReceiver.doXhr\",\"colno\":11}]},\"telemetry\":[{\"level\":\"error\",\"type\":\"error\",\"timestamp_ms\":1730843997119,\"body\":{\"message\":\"Cannot read properties of null (reading 'once')\",\"stack\":\"TypeError: Cannot read properties of null (reading 'once')\\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\\n at https://instance.example.com/fe/js/cv-script.js:202367:10\"},\"source\":\"client\",\"uuid\":\"a4231093-6d2e-4dbb-9f7f-7f0c97fde382\"}]},\"context\":\"\"}}"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:-------------------------"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:-------------------------"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997218,"body":{"message":"--DynamicJavaScriptAnalysis from JS:DOM XSS found"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Context: NaN.queryString"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Tag name: "},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Original url: https://instance.example.com/fe/m3/m-login"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Generated url: https://instance.example.com/fe/m3/m-login?kpiqhi5l29=kpiqhi5l29%27%22`'\"/kpiqhi5l29/><kpiqhi5l29/\\>ba6kcvqqrk&"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:PoC:Unable to generate PoC"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Source identified as: location.search"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Source Stack trace: at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377)\n at get search (<anonymous>:1:248279)\n at Array.<anonymous> (https://instance.example.com/fe/js/cv-script.js:201791:42607)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.addBaseInfo (https://instance.example.com/fe/js/cv-script.js:201791:42473)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.ensureItemHasSomethingToSay (https://instance.example.com/fe/js/cv-script.js:201791:42150)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.handleItemWithError (https://instance.example.com/fe/js/cv-script.js:201791:42001)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at Array.handleDomException (https://instance.example.com/fe/js/cv-script.js:201791:41530)\n at s (https://instance.example.com/fe/js/cv-script.js:201791:31979)\n at o._applyTransforms (https://instance.example.com/fe/js/cv-script.js:201791:31998)\n at o.log (https://instance.example.com/fe/js/cv-script.js:201791:31700)\n at a._log (https://instance.example.com/fe/js/cv-script.js:201791:24343)\n at a.log (https://instance.example.com/fe/js/cv-script.js:201791:23115)\n at m.handleUncaughtException (https://instance.example.com/fe/js/cv-script.js:201791:18878)\n at n (https://instance.example.com/fe/js/cv-script.js:201791:35409)\n at i (https://instance.example.com/fe/js/cv-script.js:201791:35806)"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink identified as: xhr.send"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink Stack trace: at Object.XMhUr (<anonymous>:1:544502)\n at _0x13dcf0 (<anonymous>:1:558761)\n at _0xdc6a5f.<computed>._0x13cc4d.oknbI._0x3e2633.XMLHttpRequest.<computed> (<anonymous>:1:458938)\n at XMLHttpRequest.send (https://instance.example.com/fe/js/cv-script.js:201791:62448)\n at t.exports (https://instance.example.com/fe/js/cv-script.js:201791:39384)\n at s._makeRequest (https://instance.example.com/fe/js/cv-script.js:201791:37748)\n at s._makeZoneRequest (https://instance.example.com/fe/js/cv-script.js:201791:37505)\n at s.post (https://instance.example.com/fe/js/cv-script.js:201791:36989)\n at https://instance.example.com/fe/js/cv-script.js:201791:32574"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997219,"body":{"message":"--DynamicJavaScriptAnalysis from JS:Sink value: {\"access_token\":\"ed227e6e767e4584a5b3c10dc8b68c2a\",\"data\":{\"environment\":\"development\",\"level\":\"error\",\"endpoint\":\"api.rollbar.com/api/1/item/\",\"platform\":\"browser\",\"framework\":\"browser-js\",\"language\":\"javascript\",\"server\":{},\"uuid\":\"a4231093-6d2e-4dbb-9f7f-7f0c97fde382\",\"notifier\":{\"name\":\"rollbar-browser-js\",\"version\":\"2.26.2\",\"configured_options\":{\"captureUncaught\":true,\"captureUnhandledRejections\":true,\"payload\":{\"environment\":\"development\"}},\"diagnostic\":{\"original_arg_types\":[\"string\",\"error\",\"undefined\"],\"is_uncaught\":true,\"raw_error\":{\"message\":\"Cannot read properties of null (reading 'once')\",\"name\":\"TypeError\",\"constructor_name\":\"TypeError\",\"stack\":\"TypeError: Cannot read properties of null (reading 'once')\\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\\n at https://instance.example.com/fe/js/cv-script.js:202367:10\"}}},\"request\":{\"url\":\"https://instance.example.com/fe/m3/m-login?iepuap2p8w=iepuap2p8w%27%22`'\\\"/iepuap2p8w/><iepuap2p8w/\\\\>fwqsx8nplw&#iepuap2p8w=iepuap2p8w%27%22`'\\\"/iepuap2p8w/><iepuap2p8w/\\\\>fwqsx8nplw&\",\"query_string\":\"?kpiqhi5l29=kpiqhi5l29%27%22`'\\\"/kpiqhi5l29/><kpiqhi5l29/\\\\>ba6kcvqqrk&\",\"user_ip\":\"$remote_ip\"},\"client\":{\"runtime_ms\":53,\"timestamp\":1730843997,\"javascript\":{\"browser\":\"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.6723.70 Safari/537.36\",\"language\":\"en-US\",\"cookie_enabled\":true,\"screen\":{\"width\":800,\"height\":600},\"plugins\":[]}},\"body\":{\"trace\":{\"exception\":{\"class\":\"TypeError\",\"message\":\"Cannot read properties of null (reading 'once')\",\"description\":\"Uncaught TypeError: Cannot read properties of null (reading 'once')\"},\"frames\":[{\"filename\":\"https://instance.example.com/fe/js/cv-script.js\",\"lineno\":202367,\"method\":\"[anonymous]\",\"colno\":10},{\"filename\":\"https://instance.example.com/fe/js/cv-script.js\",\"lineno\":202406,\"method\":\"InfoReceiver.doXhr\",\"colno\":11}]},\"telemetry\":[{\"level\":\"error\",\"type\":\"error\",\"timestamp_ms\":1730843997119,\"body\":{\"message\":\"Cannot read properties of null (reading 'once')\",\"stack\":\"TypeError: Cannot read properties of null (reading 'once')\\n at InfoReceiver.doXhr (https://instance.example.com/fe/js/cv-script.js:202406:11)\\n at https://instance.example.com/fe/js/cv-script.js:202367:10\"},\"source\":\"client\",\"uuid\":\"a4231093-6d2e-4dbb-9f7f-7f0c97fde382\"}]},\"context\":\"\"}}"},"source":"client"},{"level":"log","type":"log","timestamp_ms":1730843997220,"body":{"message":"--DynamicJavaScriptAnalysis from JS:-------------------------"},"source":"client"},{"level":"error","type":"network","timestamp_ms":1730843997410,"body":{"method":"GET","url":"https://localhost:8000/sockjs-node/info?t=1730843997179","status_code":0,"start_time_ms":1730843997180,"end_time_ms":1730843997410,"subtype":"xhr","response_content_type":null},"source":"client"},{"level":"error","type":"network","timestamp_ms":1730843997410,"body":{"method":"GET","url":"https://localhost:8000/sockjs-node/info?t=1730843997221","status_code":0,"start_time_ms":1730843997221,"end_time_ms":1730843997410,"subtype":"xhr","response_content_type":null},"source":"client"},{"level":"info","type":"network","timestamp_ms":1730843997482,"body":{"method":"POST","url":"https://api.rollbar.com:443/api/1/item/","status_code":200,"start_time_ms":1730843997213,"end_time_ms":1730843997482,"request_content_type":"application/json","subtype":"xhr","response_content_type":"application/json; charset=utf-8"},"source":"client"},{"level":"error","type":"error","timestamp_ms":1730843997563,"body":{"message":"Request failed with status code 500","stack":"Error: Request failed with status code 500\n at createError (https://instance.example.com/fe/js/cv-script.js:51368:15)\n at settle (https://instance.example.com/fe/js/cv-script.js:51664:12)\n at XMLHttpRequest.onloadend (https://instance.example.com/fe/js/cv-script.js:50688:7)"},"source":"client","uuid":"8ea547f7-4ead-4638-bd75-97e9d3af07a9"}]},"context":""}}
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get search (<anonymous>:1:248279) at Array.<anonymous> (https://instance.example.com/fe/js/cv-script.js:201791:42607) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.addBaseInfo (https://instance.example.com/fe/js/cv-script.js:201791:42473) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.ensureItemHasSomethingToSay (https://instance.example.com/fe/js/cv-script.js:201791:42150) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.handleItemWithError (https://instance.example.com/fe/js/cv-script.js:201791:42001) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at Array.handleDomException (https://instance.example.com/fe/js/cv-script.js:201791:41530) at s (https://instance.example.com/fe/js/cv-script.js:201791:31979) at o._applyTransforms (https://instance.example.com/fe/js/cv-script.js:201791:31998) at o.log (https://instance.example.com/fe/js/cv-script.js:201791:31700) at a._log (https://instance.example.com/fe/js/cv-script.js:201791:24343) at a.log (https://instance.example.com/fe/js/cv-script.js:201791:23115) at m.handleUnhandledRejection (https://instance.example.com/fe/js/cv-script.js:201791:19920) at n (https://instance.example.com/fe/js/cv-script.js:201791:36330)
The stack trace at the sink was:
at Object.XMhUr (<anonymous>:1:544502) at _0x13dcf0 (<anonymous>:1:558761) at _0xdc6a5f.<computed>._0x13cc4d.oknbI._0x3e2633.XMLHttpRequest.<computed> (<anonymous>:1:458938) at XMLHttpRequest.send (https://instance.example.com/fe/js/cv-script.js:201791:62448) at t.exports (https://instance.example.com/fe/js/cv-script.js:201791:39384) at s._makeRequest (https://instance.example.com/fe/js/cv-script.js:201791:37748) at s._makeZoneRequest (https://instance.example.com/fe/js/cv-script.js:201791:37505) at s.post (https://instance.example.com/fe/js/cv-script.js:201791:36989) at https://instance.example.com/fe/js/cv-script.js:201791:32574
| Issued to: | *.sandbox.example.com |
| Issued by: | Amazon RSA 2048 M02 |
| Valid from: | Wed Feb 28 00:00:00 UTC 2024 |
| Valid to: | Sat Mar 29 23:59:59 UTC 2025 |
| Issued to: | Amazon RSA 2048 M02 |
| Issued by: | Amazon Root CA 1 |
| Valid from: | Tue Aug 23 22:25:30 UTC 2022 |
| Valid to: | Fri Aug 23 22:25:30 UTC 2030 |
| Issued to: | Amazon Root CA 1 |
| Issued by: | Starfield Services Root Certificate Authority - G2 |
| Valid from: | Mon May 25 12:00:00 UTC 2015 |
| Valid to: | Thu Dec 31 01:00:00 UTC 2037 |
| Issued to: | Starfield Services Root Certificate Authority - G2 |
| Issued by: | Starfield Class 2 Certification Authority |
| Valid from: | Wed Sep 02 00:00:00 UTC 2009 |
| Valid to: | Wed Jun 28 17:39:16 UTC 2034 |
| Issued to: | Starfield Class 2 Certification Authority |
| Issued by: | Starfield Class 2 Certification Authority |
| Valid from: | Tue Jun 29 17:39:16 UTC 2004 |
| Valid to: | Thu Jun 29 17:39:16 UTC 2034 |
TLS (or SSL) helps to protect the confidentiality and integrity of information in transit between the browser and server, and to provide authentication of the server's identity. To serve this purpose, the server must present an TLS certificate that is valid for the server's hostname, is issued by a trusted authority and is valid for the current date. If any one of these requirements is not met, TLS connections to the server will not provide the full protection for which TLS is designed.
It should be noted that various attacks exist against TLS in general, and in the context of HTTPS web connections in particular. It may be possible for a determined and suitably-positioned attacker to compromise TLS connections without user detection even when a valid TLS certificate is used.
The content security policy fails to prevent untrusted JavaScript from being executed. As a result, it may fail to mitigate cross-site scripting attacks.
The policy has the following issues:
The policy allows global wildcard URLs which allows arbitrary scripts to be executed.
The policy allows data: URLs which allows arbitrary scripts to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate cross-site scripting by avoiding 'unsafe-inline', 'unsafe-eval', data: URLs, and global wildcards in script directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' to prevent untrusted JavaScript execution.
The content security policy fails to prevent untrusted JavaScript from being executed. As a result, it may fail to mitigate cross-site scripting attacks.
The policy has the following issues:
The policy allows global wildcard URLs which allows arbitrary scripts to be executed.
The policy allows data: URLs which allows arbitrary scripts to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate cross-site scripting by avoiding 'unsafe-inline', 'unsafe-eval', data: URLs, and global wildcards in script directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' to prevent untrusted JavaScript execution.
The content security policy fails to prevent untrusted JavaScript from being executed. As a result, it may fail to mitigate cross-site scripting attacks.
The policy has the following issues:
The policy allows global wildcard URLs which allows arbitrary scripts to be executed.
The policy allows data: URLs which allows arbitrary scripts to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate cross-site scripting by avoiding 'unsafe-inline', 'unsafe-eval', data: URLs, and global wildcards in script directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' to prevent untrusted JavaScript execution.
The content security policy fails to prevent untrusted JavaScript from being executed. As a result, it may fail to mitigate cross-site scripting attacks.
The policy has the following issues:
The policy allows global wildcard URLs which allows arbitrary scripts to be executed.
The policy allows data: URLs which allows arbitrary scripts to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate cross-site scripting by avoiding 'unsafe-inline', 'unsafe-eval', data: URLs, and global wildcards in script directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' to prevent untrusted JavaScript execution.
The content security policy fails to prevent untrusted JavaScript from being executed. As a result, it may fail to mitigate cross-site scripting attacks.
The policy has the following issues:
The policy allows global wildcard URLs which allows arbitrary scripts to be executed.
The policy allows data: URLs which allows arbitrary scripts to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate cross-site scripting by avoiding 'unsafe-inline', 'unsafe-eval', data: URLs, and global wildcards in script directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' to prevent untrusted JavaScript execution.
The content security policy fails to prevent untrusted JavaScript from being executed. As a result, it may fail to mitigate cross-site scripting attacks.
The policy has the following issues:
The policy allows global wildcard URLs which allows arbitrary scripts to be executed.
The policy allows data: URLs which allows arbitrary scripts to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate cross-site scripting by avoiding 'unsafe-inline', 'unsafe-eval', data: URLs, and global wildcards in script directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' to prevent untrusted JavaScript execution.
The content security policy fails to prevent untrusted JavaScript from being executed. As a result, it may fail to mitigate cross-site scripting attacks.
The policy has the following issues:
The policy allows global wildcard URLs which allows arbitrary scripts to be executed.
The policy allows data: URLs which allows arbitrary scripts to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate cross-site scripting by avoiding 'unsafe-inline', 'unsafe-eval', data: URLs, and global wildcards in script directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' to prevent untrusted JavaScript execution.
The content security policy fails to prevent untrusted style execution. As a result, it may fail to mitigate style based data exfiltration.
The policy allows global wildcard URLs which allows arbitrary styles to be executed.
The policy allows data: URLs which allows arbitrary styles to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate style-based data exfiltration by avoiding 'unsafe-inline', data: URLs, and global wildcards in style directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' in the relevant directive.
The content security policy fails to prevent untrusted style execution. As a result, it may fail to mitigate style based data exfiltration.
The policy allows global wildcard URLs which allows arbitrary styles to be executed.
The policy allows data: URLs which allows arbitrary styles to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate style-based data exfiltration by avoiding 'unsafe-inline', data: URLs, and global wildcards in style directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' in the relevant directive.
The content security policy fails to prevent untrusted style execution. As a result, it may fail to mitigate style based data exfiltration.
The policy allows global wildcard URLs which allows arbitrary styles to be executed.
The policy allows data: URLs which allows arbitrary styles to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate style-based data exfiltration by avoiding 'unsafe-inline', data: URLs, and global wildcards in style directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' in the relevant directive.
The content security policy fails to prevent untrusted style execution. As a result, it may fail to mitigate style based data exfiltration.
The policy allows global wildcard URLs which allows arbitrary styles to be executed.
The policy allows data: URLs which allows arbitrary styles to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate style-based data exfiltration by avoiding 'unsafe-inline', data: URLs, and global wildcards in style directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' in the relevant directive.
The content security policy fails to prevent untrusted style execution. As a result, it may fail to mitigate style based data exfiltration.
The policy allows global wildcard URLs which allows arbitrary styles to be executed.
The policy allows data: URLs which allows arbitrary styles to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate style-based data exfiltration by avoiding 'unsafe-inline', data: URLs, and global wildcards in style directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' in the relevant directive.
The content security policy fails to prevent untrusted style execution. As a result, it may fail to mitigate style based data exfiltration.
The policy allows global wildcard URLs which allows arbitrary styles to be executed.
The policy allows data: URLs which allows arbitrary styles to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate style-based data exfiltration by avoiding 'unsafe-inline', data: URLs, and global wildcards in style directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' in the relevant directive.
The content security policy fails to prevent untrusted style execution. As a result, it may fail to mitigate style based data exfiltration.
The policy allows global wildcard URLs which allows arbitrary styles to be executed.
The policy allows data: URLs which allows arbitrary styles to be executed.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
Mitigate style-based data exfiltration by avoiding 'unsafe-inline', data: URLs, and global wildcards in style directives. Use a secure, random nonce of at least 8 characters 'nonce-RANDOM' in the relevant directive.
The content security policy doesn't prevent form hijacking, where attackers with HTML injection hijack forms using action attributes. This can lead to credential theft by autofilling passwords from a manager and sending them to an attacker's server upon form submission.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
We recommend using the form-action directive in the CSP response header to control form post destinations. If no form actions are used, set form-action to 'none' to block untrusted forms. For applications without external form URLs, use 'self' to allow only same-origin URLs. If needed, allow list hosts for external URL form submissions, but be aware this lets attackers submit to these external resources.
The content security policy doesn't prevent form hijacking, where attackers with HTML injection hijack forms using action attributes. This can lead to credential theft by autofilling passwords from a manager and sending them to an attacker's server upon form submission.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
We recommend using the form-action directive in the CSP response header to control form post destinations. If no form actions are used, set form-action to 'none' to block untrusted forms. For applications without external form URLs, use 'self' to allow only same-origin URLs. If needed, allow list hosts for external URL form submissions, but be aware this lets attackers submit to these external resources.
The content security policy doesn't prevent form hijacking, where attackers with HTML injection hijack forms using action attributes. This can lead to credential theft by autofilling passwords from a manager and sending them to an attacker's server upon form submission.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
We recommend using the form-action directive in the CSP response header to control form post destinations. If no form actions are used, set form-action to 'none' to block untrusted forms. For applications without external form URLs, use 'self' to allow only same-origin URLs. If needed, allow list hosts for external URL form submissions, but be aware this lets attackers submit to these external resources.
The content security policy doesn't prevent form hijacking, where attackers with HTML injection hijack forms using action attributes. This can lead to credential theft by autofilling passwords from a manager and sending them to an attacker's server upon form submission.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
We recommend using the form-action directive in the CSP response header to control form post destinations. If no form actions are used, set form-action to 'none' to block untrusted forms. For applications without external form URLs, use 'self' to allow only same-origin URLs. If needed, allow list hosts for external URL form submissions, but be aware this lets attackers submit to these external resources.
The content security policy doesn't prevent form hijacking, where attackers with HTML injection hijack forms using action attributes. This can lead to credential theft by autofilling passwords from a manager and sending them to an attacker's server upon form submission.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
We recommend using the form-action directive in the CSP response header to control form post destinations. If no form actions are used, set form-action to 'none' to block untrusted forms. For applications without external form URLs, use 'self' to allow only same-origin URLs. If needed, allow list hosts for external URL form submissions, but be aware this lets attackers submit to these external resources.
The content security policy doesn't prevent form hijacking, where attackers with HTML injection hijack forms using action attributes. This can lead to credential theft by autofilling passwords from a manager and sending them to an attacker's server upon form submission.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
We recommend using the form-action directive in the CSP response header to control form post destinations. If no form actions are used, set form-action to 'none' to block untrusted forms. For applications without external form URLs, use 'self' to allow only same-origin URLs. If needed, allow list hosts for external URL form submissions, but be aware this lets attackers submit to these external resources.
The content security policy doesn't prevent form hijacking, where attackers with HTML injection hijack forms using action attributes. This can lead to credential theft by autofilling passwords from a manager and sending them to an attacker's server upon form submission.
Content Security Policy (CSP) is a security mechanism designed to mitigate cross-site scripting attacks by disabling dangerous behaviours such as untrusted JavaScript execution. Websites can specify their security policy in a response header or meta tag, enabling fine-grained control over dangerous features like scripts and stylesheets.
We recommend using the form-action directive in the CSP response header to control form post destinations. If no form actions are used, set form-action to 'none' to block untrusted forms. For applications without external form URLs, use 'self' to allow only same-origin URLs. If needed, allow list hosts for external URL form submissions, but be aware this lets attackers submit to these external resources.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
If another domain is allowed by the policy, then that domain can potentially attack users of the application. If a user is logged in to the application, and visits a domain allowed by the policy, then any malicious content running on that domain can potentially retrieve content from the application, and sometimes carry out actions within the security context of the logged in user.
Even if an allowed domain is not overtly malicious in itself, security vulnerabilities within that domain could potentially be leveraged by an attacker to exploit the trust relationship and attack the application that allows access. CORS policies on pages containing sensitive information should be reviewed to determine whether it is appropriate for the application to trust both the intentions and security posture of any domains granted access.
Any inappropriate domains should be removed from the CORS policy.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
If another domain is allowed by the policy, then that domain can potentially attack users of the application. If a user is logged in to the application, and visits a domain allowed by the policy, then any malicious content running on that domain can potentially retrieve content from the application, and sometimes carry out actions within the security context of the logged in user.
Even if an allowed domain is not overtly malicious in itself, security vulnerabilities within that domain could potentially be leveraged by an attacker to exploit the trust relationship and attack the application that allows access. CORS policies on pages containing sensitive information should be reviewed to determine whether it is appropriate for the application to trust both the intentions and security posture of any domains granted access.
Any inappropriate domains should be removed from the CORS policy.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
If another domain is allowed by the policy, then that domain can potentially attack users of the application. If a user is logged in to the application, and visits a domain allowed by the policy, then any malicious content running on that domain can potentially retrieve content from the application, and sometimes carry out actions within the security context of the logged in user.
Even if an allowed domain is not overtly malicious in itself, security vulnerabilities within that domain could potentially be leveraged by an attacker to exploit the trust relationship and attack the application that allows access. CORS policies on pages containing sensitive information should be reviewed to determine whether it is appropriate for the application to trust both the intentions and security posture of any domains granted access.
Any inappropriate domains should be removed from the CORS policy.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
If another domain is allowed by the policy, then that domain can potentially attack users of the application. If a user is logged in to the application, and visits a domain allowed by the policy, then any malicious content running on that domain can potentially retrieve content from the application, and sometimes carry out actions within the security context of the logged in user.
Even if an allowed domain is not overtly malicious in itself, security vulnerabilities within that domain could potentially be leveraged by an attacker to exploit the trust relationship and attack the application that allows access. CORS policies on pages containing sensitive information should be reviewed to determine whether it is appropriate for the application to trust both the intentions and security posture of any domains granted access.
Any inappropriate domains should be removed from the CORS policy.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
If another domain is allowed by the policy, then that domain can potentially attack users of the application. If a user is logged in to the application, and visits a domain allowed by the policy, then any malicious content running on that domain can potentially retrieve content from the application, and sometimes carry out actions within the security context of the logged in user.
Even if an allowed domain is not overtly malicious in itself, security vulnerabilities within that domain could potentially be leveraged by an attacker to exploit the trust relationship and attack the application that allows access. CORS policies on pages containing sensitive information should be reviewed to determine whether it is appropriate for the application to trust both the intentions and security posture of any domains granted access.
Any inappropriate domains should be removed from the CORS policy.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
If another domain is allowed by the policy, then that domain can potentially attack users of the application. If a user is logged in to the application, and visits a domain allowed by the policy, then any malicious content running on that domain can potentially retrieve content from the application, and sometimes carry out actions within the security context of the logged in user.
Even if an allowed domain is not overtly malicious in itself, security vulnerabilities within that domain could potentially be leveraged by an attacker to exploit the trust relationship and attack the application that allows access. CORS policies on pages containing sensitive information should be reviewed to determine whether it is appropriate for the application to trust both the intentions and security posture of any domains granted access.
Any inappropriate domains should be removed from the CORS policy.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
Trusting arbitrary origins effectively disables the same-origin policy, allowing two-way interaction by third-party web sites. Unless the response consists only of unprotected public content, this policy is likely to present a security risk.
If the site specifies the header Access-Control-Allow-Credentials: true, third-party sites may be able to carry out privileged actions and retrieve sensitive information. Even if it does not, attackers may be able to bypass any IP-based access controls by proxying through users' browsers.
Rather than using a wildcard or programmatically verifying supplied origins, use a whitelist of trusted domains.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
Trusting arbitrary origins effectively disables the same-origin policy, allowing two-way interaction by third-party web sites. Unless the response consists only of unprotected public content, this policy is likely to present a security risk.
If the site specifies the header Access-Control-Allow-Credentials: true, third-party sites may be able to carry out privileged actions and retrieve sensitive information. Even if it does not, attackers may be able to bypass any IP-based access controls by proxying through users' browsers.
Rather than using a wildcard or programmatically verifying supplied origins, use a whitelist of trusted domains.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
Trusting arbitrary origins effectively disables the same-origin policy, allowing two-way interaction by third-party web sites. Unless the response consists only of unprotected public content, this policy is likely to present a security risk.
If the site specifies the header Access-Control-Allow-Credentials: true, third-party sites may be able to carry out privileged actions and retrieve sensitive information. Even if it does not, attackers may be able to bypass any IP-based access controls by proxying through users' browsers.
Rather than using a wildcard or programmatically verifying supplied origins, use a whitelist of trusted domains.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
Trusting arbitrary origins effectively disables the same-origin policy, allowing two-way interaction by third-party web sites. Unless the response consists only of unprotected public content, this policy is likely to present a security risk.
If the site specifies the header Access-Control-Allow-Credentials: true, third-party sites may be able to carry out privileged actions and retrieve sensitive information. Even if it does not, attackers may be able to bypass any IP-based access controls by proxying through users' browsers.
Rather than using a wildcard or programmatically verifying supplied origins, use a whitelist of trusted domains.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
Trusting arbitrary origins effectively disables the same-origin policy, allowing two-way interaction by third-party web sites. Unless the response consists only of unprotected public content, this policy is likely to present a security risk.
If the site specifies the header Access-Control-Allow-Credentials: true, third-party sites may be able to carry out privileged actions and retrieve sensitive information. Even if it does not, attackers may be able to bypass any IP-based access controls by proxying through users' browsers.
Rather than using a wildcard or programmatically verifying supplied origins, use a whitelist of trusted domains.
An HTML5 cross-origin resource sharing (CORS) policy controls whether and how content running on other domains can perform two-way interaction with the domain that publishes the policy. The policy is fine-grained and can apply access controls per-request based on the URL and other features of the request.
Trusting arbitrary origins effectively disables the same-origin policy, allowing two-way interaction by third-party web sites. Unless the response consists only of unprotected public content, this policy is likely to present a security risk.
If the site specifies the header Access-Control-Allow-Credentials: true, third-party sites may be able to carry out privileged actions and retrieve sensitive information. Even if it does not, attackers may be able to bypass any IP-based access controls by proxying through users' browsers.
Rather than using a wildcard or programmatically verifying supplied origins, use a whitelist of trusted domains.
The file robots.txt is used to give instructions to web robots, such as search engine crawlers, about locations within the web site that robots are allowed, or not allowed, to crawl and index.
The presence of the robots.txt does not in itself present any kind of security vulnerability. However, it is often used to identify restricted or private areas of a site's contents. The information in the file may therefore help an attacker to map out the site's contents, especially if some of the locations identified are not linked from elsewhere in the site. If the application relies on robots.txt to protect access to these areas, and does not enforce proper access control over them, then this presents a serious vulnerability.
The robots.txt file is not itself a security threat, and its correct use can represent good practice for non-security reasons. You should not assume that all web robots will honor the file's instructions. Rather, assume that attackers will pay close attention to any locations identified in the file. Do not rely on robots.txt to provide any kind of protection over unauthorized access.
Unless directed otherwise, browsers may store a local cached copy of content received from web servers. Some browsers, including Internet Explorer, cache content accessed via HTTPS. If sensitive information in application responses is stored in the local cache, then this may be retrieved by other users who have access to the same computer at a future time.
Applications should return caching directives instructing browsers not to store local copies of any sensitive data. Often, this can be achieved by configuring the web server to prevent caching for relevant paths within the web root. Alternatively, most web development platforms allow you to control the server's caching directives from within individual scripts. Ideally, the web server should return the following HTTP headers in all responses containing sensitive content:
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM data manipulation arises when a script writes controllable data to a field within the DOM that is used within the visible UI or client-side application logic. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will modify the appearance or behavior of the client-side UI. An attacker may be able to leverage this to perform virtual defacement of the application, or possibly to induce the user to perform unintended actions.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based DOM data manipulation vulnerabilities is not to dynamically write to DOM data fields any data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from being stored. In general, this is best achieved by using a whitelist of permitted values.
Data is read from location.pathname and passed to history.replaceState.
The following value was injected into the source:
///fe/m3/m-login//elcs7kifmd%27%22%60'%22/elcs7kifmd/%3E%3Celcs7kifmd//%3Egkr4l404dv&
The previous value reached the sink:
https://instance.example.com/fe///fe/m3/m-login//elcs7kifmd%27%22%60'%22/elcs7kifmd/%3E%3Celcs7kifmd//%3Egkr4l404dv&?g49p4yw5cy=g49p4yw5cy%27%22`'"/g49p4yw5cy/><g49p4yw5cy/\>zgrotg0z2s&#hj8js9yzmu=hj8js9yzmu%27%22`'"/hj8js9yzmu/><hj8js9yzmu/\>ea3izlhk1m&
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get pathname (<anonymous>:1:249642) at createCurrentLocation (https://instance.example.com/fe/js/cv-script.js:218038:13) at useHistoryStateNavigation (https://instance.example.com/fe/js/cv-script.js:218149:16) at createWebHistory (https://instance.example.com/fe/js/cv-script.js:218239:31) at ./src/router/index.ts (https://instance.example.com/fe/js/app.js:166430:79) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/apiClient/apiClient.ts (https://instance.example.com/fe/js/app.js:142756:65) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/m.login.service.ts (https://instance.example.com/fe/js/app.js:144223:102) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader-v16/dist/index.js?!./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:1121:105) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:106648:313) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue (https://instance.example.com/fe/js/app.js:106604:90) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/main.ts (https://instance.example.com/fe/js/app.js:166283:66) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at 1 (https://instance.example.com/fe/js/app.js:172609:18) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at checkDeferredModules (https://instance.example.com/fe/js/app.js:46:23) at https://instance.example.com/fe/js/app.js:994:18
The stack trace at the sink was:
at Object.dXSzc (<anonymous>:1:107608) at Object.skeuk (<anonymous>:1:548616) at History.replaceState (<anonymous>:1:548864) at changeLocation (https://instance.example.com/fe/js/cv-script.js:218185:60) at useHistoryStateNavigation (https://instance.example.com/fe/js/cv-script.js:218154:9) at createWebHistory (https://instance.example.com/fe/js/cv-script.js:218239:31) at ./src/router/index.ts (https://instance.example.com/fe/js/app.js:166430:79) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/apiClient/apiClient.ts (https://instance.example.com/fe/js/app.js:142756:65) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/m.login.service.ts (https://instance.example.com/fe/js/app.js:144223:102) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader-v16/dist/index.js?!./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:1121:105) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:106648:313) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue (https://instance.example.com/fe/js/app.js:106604:90) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/main.ts (https://instance.example.com/fe/js/app.js:166283:66) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at 1 (https://instance.example.com/fe/js/app.js:172609:18) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at checkDeferredModules (https://instance.example.com/fe/js/app.js:46:23)
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM data manipulation arises when a script writes controllable data to a field within the DOM that is used within the visible UI or client-side application logic. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will modify the appearance or behavior of the client-side UI. An attacker may be able to leverage this to perform virtual defacement of the application, or possibly to induce the user to perform unintended actions.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based DOM data manipulation vulnerabilities is not to dynamically write to DOM data fields any data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from being stored. In general, this is best achieved by using a whitelist of permitted values.
Data is read from location.search and passed to history.replaceState.
The following value was injected into the source:
?g49p4yw5cy=g49p4yw5cy%27%22`'"/g49p4yw5cy/><g49p4yw5cy/\>zgrotg0z2s&
The previous value reached the sink:
https://instance.example.com/fe///fe/m3/m-login//elcs7kifmd%27%22%60'%22/elcs7kifmd/%3E%3Celcs7kifmd//%3Egkr4l404dv&?g49p4yw5cy=g49p4yw5cy%27%22`'"/g49p4yw5cy/><g49p4yw5cy/\>zgrotg0z2s&#hj8js9yzmu=hj8js9yzmu%27%22`'"/hj8js9yzmu/><hj8js9yzmu/\>ea3izlhk1m&
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get search (<anonymous>:1:248279) at createCurrentLocation (https://instance.example.com/fe/js/cv-script.js:218038:23) at useHistoryStateNavigation (https://instance.example.com/fe/js/cv-script.js:218149:16) at createWebHistory (https://instance.example.com/fe/js/cv-script.js:218239:31) at ./src/router/index.ts (https://instance.example.com/fe/js/app.js:166430:79) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/apiClient/apiClient.ts (https://instance.example.com/fe/js/app.js:142756:65) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/m.login.service.ts (https://instance.example.com/fe/js/app.js:144223:102) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader-v16/dist/index.js?!./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:1121:105) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:106648:313) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue (https://instance.example.com/fe/js/app.js:106604:90) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/main.ts (https://instance.example.com/fe/js/app.js:166283:66) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at 1 (https://instance.example.com/fe/js/app.js:172609:18) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at checkDeferredModules (https://instance.example.com/fe/js/app.js:46:23) at https://instance.example.com/fe/js/app.js:994:18
The stack trace at the sink was:
at Object.dXSzc (<anonymous>:1:107608) at Object.skeuk (<anonymous>:1:548616) at History.replaceState (<anonymous>:1:548864) at changeLocation (https://instance.example.com/fe/js/cv-script.js:218185:60) at useHistoryStateNavigation (https://instance.example.com/fe/js/cv-script.js:218154:9) at createWebHistory (https://instance.example.com/fe/js/cv-script.js:218239:31) at ./src/router/index.ts (https://instance.example.com/fe/js/app.js:166430:79) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/apiClient/apiClient.ts (https://instance.example.com/fe/js/app.js:142756:65) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/m.login.service.ts (https://instance.example.com/fe/js/app.js:144223:102) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader-v16/dist/index.js?!./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:1121:105) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:106648:313) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue (https://instance.example.com/fe/js/app.js:106604:90) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/main.ts (https://instance.example.com/fe/js/app.js:166283:66) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at 1 (https://instance.example.com/fe/js/app.js:172609:18) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at checkDeferredModules (https://instance.example.com/fe/js/app.js:46:23)
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM data manipulation arises when a script writes controllable data to a field within the DOM that is used within the visible UI or client-side application logic. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will modify the appearance or behavior of the client-side UI. An attacker may be able to leverage this to perform virtual defacement of the application, or possibly to induce the user to perform unintended actions.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based DOM data manipulation vulnerabilities is not to dynamically write to DOM data fields any data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from being stored. In general, this is best achieved by using a whitelist of permitted values.
Data is read from location.hash and passed to history.replaceState.
The following value was injected into the source:
#hj8js9yzmu=hj8js9yzmu%27%22`'"/hj8js9yzmu/><hj8js9yzmu/\>ea3izlhk1m&
The previous value reached the sink:
https://instance.example.com/fe///fe/m3/m-login//elcs7kifmd%27%22%60'%22/elcs7kifmd/%3E%3Celcs7kifmd//%3Egkr4l404dv&?g49p4yw5cy=g49p4yw5cy%27%22`'"/g49p4yw5cy/><g49p4yw5cy/\>zgrotg0z2s&#hj8js9yzmu=hj8js9yzmu%27%22`'"/hj8js9yzmu/><hj8js9yzmu/\>ea3izlhk1m&
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get hash (<anonymous>:1:249429) at createCurrentLocation (https://instance.example.com/fe/js/cv-script.js:218038:31) at useHistoryStateNavigation (https://instance.example.com/fe/js/cv-script.js:218149:16) at createWebHistory (https://instance.example.com/fe/js/cv-script.js:218239:31) at ./src/router/index.ts (https://instance.example.com/fe/js/app.js:166430:79) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/apiClient/apiClient.ts (https://instance.example.com/fe/js/app.js:142756:65) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/m.login.service.ts (https://instance.example.com/fe/js/app.js:144223:102) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader-v16/dist/index.js?!./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:1121:105) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:106648:313) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue (https://instance.example.com/fe/js/app.js:106604:90) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/main.ts (https://instance.example.com/fe/js/app.js:166283:66) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at 1 (https://instance.example.com/fe/js/app.js:172609:18) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at checkDeferredModules (https://instance.example.com/fe/js/app.js:46:23) at https://instance.example.com/fe/js/app.js:994:18
The stack trace at the sink was:
at Object.dXSzc (<anonymous>:1:107608) at Object.skeuk (<anonymous>:1:548616) at History.replaceState (<anonymous>:1:548864) at changeLocation (https://instance.example.com/fe/js/cv-script.js:218185:60) at useHistoryStateNavigation (https://instance.example.com/fe/js/cv-script.js:218154:9) at createWebHistory (https://instance.example.com/fe/js/cv-script.js:218239:31) at ./src/router/index.ts (https://instance.example.com/fe/js/app.js:166430:79) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/apiClient/apiClient.ts (https://instance.example.com/fe/js/app.js:142756:65) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/m.login.service.ts (https://instance.example.com/fe/js/app.js:144223:102) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader-v16/dist/index.js?!./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:1121:105) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:106648:313) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue (https://instance.example.com/fe/js/app.js:106604:90) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/main.ts (https://instance.example.com/fe/js/app.js:166283:66) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at 1 (https://instance.example.com/fe/js/app.js:172609:18) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at checkDeferredModules (https://instance.example.com/fe/js/app.js:46:23)
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM data manipulation arises when a script writes controllable data to a field within the DOM that is used within the visible UI or client-side application logic. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will modify the appearance or behavior of the client-side UI. An attacker may be able to leverage this to perform virtual defacement of the application, or possibly to induce the user to perform unintended actions.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based DOM data manipulation vulnerabilities is not to dynamically write to DOM data fields any data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from being stored. In general, this is best achieved by using a whitelist of permitted values.
Data is read from location.pathname and passed to history.replaceState.
The following value was injected into the source:
///fe/m3/m-login//elcs7kifmd%27%22%60'%22/elcs7kifmd/%3E%3Celcs7kifmd//%3Egkr4l404dv&
The previous value reached the sink:
https://instance.example.com/fe///fe/m3/m-login//elcs7kifmd%27%22%60'%22/elcs7kifmd/%3E%3Celcs7kifmd//%3Egkr4l404dv&?g49p4yw5cy=g49p4yw5cy%27%22`'"/g49p4yw5cy/><g49p4yw5cy/\>zgrotg0z2s&#hj8js9yzmu=hj8js9yzmu%27%22`'"/hj8js9yzmu/><hj8js9yzmu/\>ea3izlhk1m&
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get pathname (<anonymous>:1:249642) at createCurrentLocation (https://instance.example.com/fe/js/cv-script.js:218038:13) at useHistoryStateNavigation (https://instance.example.com/fe/js/cv-script.js:218149:16) at createWebHistory (https://instance.example.com/fe/js/cv-script.js:218239:31) at ./src/router/index.ts (https://instance.example.com/fe/js/app.js:166430:79) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/apiClient/apiClient.ts (https://instance.example.com/fe/js/app.js:142756:65) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/m.login.service.ts (https://instance.example.com/fe/js/app.js:144223:102) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader-v16/dist/index.js?!./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:1121:105) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:106648:313) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue (https://instance.example.com/fe/js/app.js:106604:90) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/main.ts (https://instance.example.com/fe/js/app.js:166283:66) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at 1 (https://instance.example.com/fe/js/app.js:172609:18) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at checkDeferredModules (https://instance.example.com/fe/js/app.js:46:23) at https://instance.example.com/fe/js/app.js:994:18
The stack trace at the sink was:
at Object.dXSzc (<anonymous>:1:107608) at Object.skeuk (<anonymous>:1:548616) at History.replaceState (<anonymous>:1:548864) at changeLocation (https://instance.example.com/fe/js/cv-script.js:218185:60) at Object.replace (https://instance.example.com/fe/js/cv-script.js:218201:9) at finalizeNavigation (https://instance.example.com/fe/js/cv-script.js:220844:31) at https://instance.example.com/fe/js/cv-script.js:220724:27
This was triggered by a loadend event.
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM data manipulation arises when a script writes controllable data to a field within the DOM that is used within the visible UI or client-side application logic. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will modify the appearance or behavior of the client-side UI. An attacker may be able to leverage this to perform virtual defacement of the application, or possibly to induce the user to perform unintended actions.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based DOM data manipulation vulnerabilities is not to dynamically write to DOM data fields any data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from being stored. In general, this is best achieved by using a whitelist of permitted values.
Data is read from location.search and passed to history.replaceState.
The following value was injected into the source:
?g49p4yw5cy=g49p4yw5cy%27%22`'"/g49p4yw5cy/><g49p4yw5cy/\>zgrotg0z2s&
The previous value reached the sink:
https://instance.example.com/fe///fe/m3/m-login//elcs7kifmd%27%22%60'%22/elcs7kifmd/%3E%3Celcs7kifmd//%3Egkr4l404dv&?g49p4yw5cy=g49p4yw5cy%27%22`'"/g49p4yw5cy/><g49p4yw5cy/\>zgrotg0z2s&#hj8js9yzmu=hj8js9yzmu%27%22`'"/hj8js9yzmu/><hj8js9yzmu/\>ea3izlhk1m&
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get search (<anonymous>:1:248279) at createCurrentLocation (https://instance.example.com/fe/js/cv-script.js:218038:23) at useHistoryStateNavigation (https://instance.example.com/fe/js/cv-script.js:218149:16) at createWebHistory (https://instance.example.com/fe/js/cv-script.js:218239:31) at ./src/router/index.ts (https://instance.example.com/fe/js/app.js:166430:79) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/apiClient/apiClient.ts (https://instance.example.com/fe/js/app.js:142756:65) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/m.login.service.ts (https://instance.example.com/fe/js/app.js:144223:102) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader-v16/dist/index.js?!./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:1121:105) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:106648:313) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue (https://instance.example.com/fe/js/app.js:106604:90) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/main.ts (https://instance.example.com/fe/js/app.js:166283:66) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at 1 (https://instance.example.com/fe/js/app.js:172609:18) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at checkDeferredModules (https://instance.example.com/fe/js/app.js:46:23) at https://instance.example.com/fe/js/app.js:994:18
The stack trace at the sink was:
at Object.dXSzc (<anonymous>:1:107608) at Object.skeuk (<anonymous>:1:548616) at History.replaceState (<anonymous>:1:548864) at changeLocation (https://instance.example.com/fe/js/cv-script.js:218185:60) at Object.replace (https://instance.example.com/fe/js/cv-script.js:218201:9) at finalizeNavigation (https://instance.example.com/fe/js/cv-script.js:220844:31) at https://instance.example.com/fe/js/cv-script.js:220724:27
This was triggered by a loadend event.
DOM-based vulnerabilities arise when a client-side script reads data from a controllable part of the DOM (for example, the URL) and processes this data in an unsafe way.
DOM data manipulation arises when a script writes controllable data to a field within the DOM that is used within the visible UI or client-side application logic. An attacker may be able to use the vulnerability to construct a URL that, if visited by another application user, will modify the appearance or behavior of the client-side UI. An attacker may be able to leverage this to perform virtual defacement of the application, or possibly to induce the user to perform unintended actions.
Burp Suite automatically identifies this issue using dynamic and static code analysis. Static analysis can lead to false positives that are not actually exploitable. If Burp Scanner has not provided any evidence resulting from dynamic analysis, you should review the relevant code and execution paths to determine whether this vulnerability is indeed present, or whether mitigations are in place that would prevent exploitation.
The most effective way to avoid DOM-based DOM data manipulation vulnerabilities is not to dynamically write to DOM data fields any data that originated from any untrusted source. If the desired functionality of the application means that this behavior is unavoidable, then defenses must be implemented within the client-side code to prevent malicious data from being stored. In general, this is best achieved by using a whitelist of permitted values.
Data is read from location.hash and passed to history.replaceState.
The following value was injected into the source:
#hj8js9yzmu=hj8js9yzmu%27%22`'"/hj8js9yzmu/><hj8js9yzmu/\>ea3izlhk1m&
The previous value reached the sink:
https://instance.example.com/fe///fe/m3/m-login//elcs7kifmd%27%22%60'%22/elcs7kifmd/%3E%3Celcs7kifmd//%3Egkr4l404dv&?g49p4yw5cy=g49p4yw5cy%27%22`'"/g49p4yw5cy/><g49p4yw5cy/\>zgrotg0z2s&#hj8js9yzmu=hj8js9yzmu%27%22`'"/hj8js9yzmu/><hj8js9yzmu/\>ea3izlhk1m&
The stack trace at source was:
at Object._0x165f99 [as proxiedGetterCallback] (<anonymous>:1:557377) at get hash (<anonymous>:1:249429) at createCurrentLocation (https://instance.example.com/fe/js/cv-script.js:218038:31) at useHistoryStateNavigation (https://instance.example.com/fe/js/cv-script.js:218149:16) at createWebHistory (https://instance.example.com/fe/js/cv-script.js:218239:31) at ./src/router/index.ts (https://instance.example.com/fe/js/app.js:166430:79) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/apiClient/apiClient.ts (https://instance.example.com/fe/js/app.js:142756:65) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/apps/m3/services/m.login.service.ts (https://instance.example.com/fe/js/app.js:144223:102) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./node_modules/cache-loader/dist/cjs.js?!./node_modules/babel-loader/lib/index.js!./node_modules/ts-loader/index.js?!./node_modules/cache-loader/dist/cjs.js?!./node_modules/vue-loader-v16/dist/index.js?!./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:1121:105) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue?vue&type=script&lang=ts (https://instance.example.com/fe/js/app.js:106648:313) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/App.vue (https://instance.example.com/fe/js/app.js:106604:90) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at ./src/main.ts (https://instance.example.com/fe/js/app.js:166283:66) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at fn (https://instance.example.com/fe/js/app.js:151:20) at 1 (https://instance.example.com/fe/js/app.js:172609:18) at __webpack_require__ (https://instance.example.com/fe/js/app.js:854:30) at checkDeferredModules (https://instance.example.com/fe/js/app.js:46:23) at https://instance.example.com/fe/js/app.js:994:18
The stack trace at the sink was:
at Object.dXSzc (<anonymous>:1:107608) at Object.skeuk (<anonymous>:1:548616) at History.replaceState (<anonymous>:1:548864) at changeLocation (https://instance.example.com/fe/js/cv-script.js:218185:60) at Object.replace (https://instance.example.com/fe/js/cv-script.js:218201:9) at finalizeNavigation (https://instance.example.com/fe/js/cv-script.js:220844:31) at https://instance.example.com/fe/js/cv-script.js:220724:27
This was triggered by a loadend event.
Reflection of input arises when data is copied from a request and echoed into the application's immediate response.
Input being returned in application responses is not a vulnerability in its own right. However, it is a prerequisite for many client-side vulnerabilities, including cross-site scripting, open redirection, content spoofing, and response header injection. Additionally, some server-side vulnerabilities such as SQL injection are often easier to identify and exploit when input is returned in responses. In applications where input retrieval is rare and the environment is resistant to automated testing (for example, due to a web application firewall), it might be worth subjecting instances of it to focused manual testing.
Reflection of input arises when data is copied from a request and echoed into the application's immediate response.
Input being returned in application responses is not a vulnerability in its own right. However, it is a prerequisite for many client-side vulnerabilities, including cross-site scripting, open redirection, content spoofing, and response header injection. Additionally, some server-side vulnerabilities such as SQL injection are often easier to identify and exploit when input is returned in responses. In applications where input retrieval is rare and the environment is resistant to automated testing (for example, due to a web application firewall), it might be worth subjecting instances of it to focused manual testing.