Skip to main content
Security Guides

CORS Misconfiguration in SaaS Apps: Exploitation Paths and Safe Defaults

SecuriSky TeamApril 18, 202612 min read

Introduction to CORS Misconfiguration

CORS (Cross-Origin Resource Sharing) misconfiguration is a common security issue in SaaS apps, allowing unauthorized access to sensitive resources. In a CORS misconfiguration, an attacker can exploit the browser's same-origin policy, gaining access to sensitive data or taking control of user sessions. The primary question is: how can developers identify and fix CORS misconfigurations in their SaaS apps?

To understand CORS misconfiguration, let's examine the basics of CORS. CORS is a security feature implemented in web browsers to prevent web pages from making requests to a different origin (domain, protocol, or port) than the one the web page was loaded from. This prevents a malicious script from making unauthorized requests on behalf of the user.

How CORS Works

CORS works by adding specific headers to HTTP requests and responses. When a web page makes a request to a different origin, the browser adds an Origin header to the request, specifying the origin of the request. The server then responds with an Access-Control-Allow-Origin header, which specifies the allowed origins for the request.

For example, consider a web page loaded from https://example.com making a request to https://api.example.com. The browser adds an Origin header to the request:

GET /data HTTP/1.1

Host: api.example.com

Origin: https://example.com

The server responds with an Access-Control-Allow-Origin header:

HTTP/1.1 200 OK

Access-Control-Allow-Origin: https://example.com

This allows the browser to process the response, as the origin of the request is allowed.

CORS Misconfiguration Exploitation Paths

CORS misconfigurations can be exploited in several ways:

  • Unrestricted Origins: If the Access-Control-Allow-Origin header is set to *, any origin can make requests to the server. This allows an attacker to make requests on behalf of the user, potentially stealing sensitive data or taking control of user sessions.
  • Wildcard Subdomains: If the Access-Control-Allow-Origin header is set to a wildcard subdomain (e.g., *.example.com), an attacker can create a malicious subdomain to make requests to the server.
  • Missing or Insecure Access-Control-Allow-Credentials Header: If the Access-Control-Allow-Credentials header is missing or set to true, an attacker can make requests with credentials (e.g., cookies, authentication tokens), potentially gaining access to sensitive data.
  • Safe Defaults for CORS Configuration

    To prevent CORS misconfigurations, developers can implement safe defaults:

  • Restrict Origins: Only allow specific origins to make requests to the server. For example:
  • Access-Control-Allow-Origin: https://example.com
    

  • Use Secure Access-Control-Allow-Credentials Header: Set the Access-Control-Allow-Credentials header to false to prevent requests with credentials:
  • Access-Control-Allow-Credentials: false
    

  • Implement CORS Preflight Requests: Implement CORS preflight requests to validate the request method and headers before allowing the request to proceed.
  • For example, in a Node.js application using the express framework, you can implement CORS with safe defaults as follows:

    const express = require('express');
    

    const app = express();

    app.use((req, res, next) => {

    res.setHeader('Access-Control-Allow-Origin', 'https://example.com'); res.setHeader('Access-Control-Allow-Credentials', 'false'); res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE'); res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); next();

    });

    Alternatively, you can use a library like cors to simplify CORS configuration:

    const cors = require('cors');
    

    const app = express();

    app.use(cors({

    origin: 'https://example.com', credentials: false, methods: ['GET', 'POST', 'PUT', 'DELETE'], allowedHeaders: ['Content-Type', 'Authorization']

    }));

    Automating CORS Misconfiguration Detection

    To detect CORS misconfigurations automatically, developers can use tools like SecuriSky, which provides a comprehensive security scanner for AI-built apps.

    Quick Fix Checklist

  • [ ] Restrict origins to specific domains or subdomains
  • [ ] Set Access-Control-Allow-Credentials to false
  • [ ] Implement CORS preflight requests to validate request methods and headers
  • [ ] Use a library like cors to simplify CORS configuration
  • [ ] Regularly test and validate CORS configuration using tools like SecuriSky
  • Try it free

    Scan your app for these issues now

    Paste your URL and get a full security, performance, and SEO report in under 2 minutes — no signup required.

    Run a free scan
    CORS Misconfiguration in SaaS Apps — SecuriSky Blog