MediumCORS Explained: Understanding Cross-Origin Resource Sharing in Web Security | by cybertecjt | Oct, 2026 | Medium
Sitemap
cybertecjt

cybertecjt

CORS Explained: Understanding Cross-Origin Resource Sharing in Web Security

6 min readOct 7, 2026

--

Introduction

Modern web applications rarely work in isolation. A frontend application may communicate with APIs hosted on a different domain, subdomain, or port.

This is where CORS (Cross-Origin Resource Sharing) becomes important.

For beginners in web security and bug bounty hunting, CORS can initially look confusing. However, once you understand how browsers handle cross-origin requests, CORS becomes much easier to analyze.

In this article, we will understand:

  • What CORS is
  • Why browsers use it
  • Same-Origin Policy
  • How CORS headers work
  • Simple and preflight requests
  • Common CORS misconfigurations
  • How security researchers analyze CORS
  • How developers can prevent CORS-related vulnerabilities
Press enter or click to view image in full size

What Is CORS?

CORS stands for Cross-Origin Resource Sharing.

It is a browser security mechanism that controls whether a web page from one origin can access resources from another origin.

For example:

https://example.com

may request data from:

https://api.example.com

Because these are different origins, the browser applies cross-origin security rules.

The server can use CORS response headers to tell the browser whether that request should be allowed.

Understanding the Same-Origin Policy

Before understanding CORS, we need to understand the Same-Origin Policy (SOP).

An origin is generally determined by:

Scheme + Host + Port

For example:

https://example.com:443

is an origin.

A different scheme, host, or port can create a different origin.

The Same-Origin Policy prevents websites from freely reading sensitive data from other origins.

This is an important browser security boundary.

How CORS Works

Suppose a frontend application sends a request to an API.

The browser may send:

Origin: https://frontend.example

The server can respond with:

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

This tells the browser that the specified origin is allowed to access the response.

The important point is:

CORS is primarily enforced by the browser.

A CORS header does not magically make an API secure. It controls browser access to responses.

Press enter or click to view image in full size

Important CORS Headers

1. Access-Control-Allow-Origin

This is one of the most important CORS headers.

Example:

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

It specifies which origin is allowed.

A wildcard can also be used:

Access-Control-Allow-Origin: *

However, wildcard access is not automatically a vulnerability. Its security impact depends on what information the endpoint exposes and whether credentials are involved.

2. Access-Control-Allow-Credentials

This header controls whether browsers may include credentials in cross-origin requests when the request is made with credentials enabled.

Example:

Access-Control-Allow-Credentials: true

Credentials can include browser-managed authentication information such as cookies.

This is why credentialed CORS configurations require careful origin validation.

3. Access-Control-Allow-Methods

This specifies allowed HTTP methods.

Example:

Access-Control-Allow-Methods: GET, POST, PUT, DELETE

4. Access-Control-Allow-Headers

This specifies which request headers can be used.

Example:

Access-Control-Allow-Headers: Content-Type, Authorization

5. Origin

The browser commonly sends the requesting website’s origin through:

Origin: https://frontend.example

Security researchers often pay close attention to how servers process this value.

Simple Requests vs Preflight Requests

CORS requests are not all handled in exactly the same way.

Simple Request

Some cross-origin requests can be sent directly without a preflight request.

For example, a basic GET request may include:

GET /api/profile HTTP/1.1
Host: api.example.com
Origin: https://frontend.example

The server responds with an appropriate CORS header.

Preflight Request

For certain cross-origin requests, the browser first sends an OPTIONS request.

Example:

OPTIONS /api/profile HTTP/1.1
Host: api.example.com
Origin: https://frontend.example
Access-Control-Request-Method: PUT

The server may respond:

HTTP/1.1 204 No Content
Access-Control-Allow-Origin: https://frontend.example
Access-Control-Allow-Methods: PUT

If the browser determines that the policy permits the request, it can proceed with the actual request.

What Is a CORS Misconfiguration?

A CORS misconfiguration happens when an application trusts origins too broadly or incorrectly.

Get cybertecjt’s stories in your inbox

Join Medium for free to get updates from this writer.

For example, imagine an application dynamically reflects an untrusted origin:

Origin: https://attacker.example

and responds:

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

If the application also allows credentials and exposes sensitive information, this could potentially create a serious security issue.

The impact depends on the application’s authentication mechanism, endpoint behavior, response data, and exact CORS configuration.

Why CORS Findings Need Careful Validation

Seeing:

Access-Control-Allow-Origin: *

does not automatically mean:

“The website is vulnerable.”

Similarly, seeing a reflected Origin header is not enough by itself.

A meaningful security finding generally requires demonstrating security impact.

A researcher should ask:

  • Is sensitive information exposed?
  • Does the endpoint require authentication?
  • Are credentials allowed?
  • Is an untrusted origin accepted?
  • Can another website read the response through the browser?
  • Does the behavior affect sensitive functionality?

This is the difference between simply finding an unusual header and identifying a real vulnerability.

A Safe Testing Workflow

When testing applications you are authorized to assess, a simple workflow can be:

Step 1 — Identify the API

Look for API requests made by the application.

Step 2 — Observe the Origin Header

Check how the server responds to cross-origin requests.

Step 3 — Review CORS Headers

Look for:

Access-Control-Allow-Origin
Access-Control-Allow-Credentials
Access-Control-Allow-Methods
Access-Control-Allow-Headers

Step 4 — Compare Different Origins

In an authorized lab or testing environment, observe whether the server treats trusted and untrusted origins differently.

Step 5 — Check Sensitive Endpoints

Focus on endpoints that return meaningful private information rather than harmless public data.

Step 6 — Validate the Impact

A report should explain exactly what an attacker could access and under what conditions.

CORS and Burp Suite

Burp Suite can be useful for understanding CORS behavior during authorized testing.

A researcher can inspect HTTP requests and responses and pay attention to:

Origin:

and:

Access-Control-Allow-Origin:
Access-Control-Allow-Credentials:

Burp Repeater can also help compare how an application responds to different request configurations in a controlled testing environment.

The important thing is to understand the application’s behavior rather than blindly looking for specific headers.

Common Mistakes

Mistake 1: Assuming * Always Means Vulnerable

Wildcard CORS is not automatically a vulnerability.

Mistake 2: Ignoring Authentication

The security impact often depends on whether sensitive resources require authentication.

Mistake 3: Focusing Only on Headers

Headers alone do not tell the complete security story.

Mistake 4: Not Checking the Response

A researcher should determine whether useful or sensitive information is actually exposed.

Mistake 5: Testing Without Authorization

Security testing should only be performed on systems where you have permission.

How Developers Can Prevent CORS Problems

Developers should follow a few important principles:

1. Use an Allowlist

Only allow trusted origins where possible.

2. Avoid Unnecessary Wildcards

Do not allow every origin unless the application’s functionality genuinely requires it.

3. Be Careful With Credentials

Credentialed cross-origin access should be enabled only when necessary.

4. Validate Origins Properly

Do not blindly reflect arbitrary Origin values.

5. Limit Sensitive Endpoints

Do not unnecessarily expose sensitive API responses to cross-origin browser clients.

6. Test the Configuration

CORS behavior should be tested as part of the application’s security testing process.

What I Learned From Studying CORS

Learning CORS taught me an important lesson about web security:

A security header should never be analyzed in isolation.

Understanding the complete request flow is much more important.

When analyzing a CORS configuration, I need to think about:

Origin
↓
Server Response
↓
Browser Policy
↓
Authentication
↓
Sensitive Data
↓
Security Impact

This approach helps distinguish real security issues from harmless configurations.

Conclusion

CORS is an important part of modern web application security.

For a beginner bug bounty hunter, understanding CORS requires more than memorizing headers. You need to understand the Same-Origin Policy, browser behavior, authentication, API responses, and security impact.

The goal should not be to find a suspicious CORS header.

The goal should be to determine:

Can an unauthorized origin actually access sensitive information or functionality because of this configuration?

That mindset will help you perform better web security testing and write higher-quality vulnerability reports.

Final Takeaway

Keep learning one concept at a time.

Understand the technology first, practice in authorized labs, and then apply that knowledge to responsible security research.

Learn → Practice → Validate → Report Responsibly.

Press enter or click to view image in full size

Tags

#Cybersecurity #WebSecurity #BugBounty #CORS #ApplicationSecurity #EthicalHacking #PenetrationTesting #InfoSec #WebHacking #SecurityResearch

--

--