Limo Booking Software v1.0 - CORS
## Title: Limo Booking Software v1.0 - CORS
## Author: nu11secur1ty
## Date: 09/08/2023
## Vendor: https://www.phpjabbers.com/
## Software: https://www.phpjabbers.com/limo-booking-software/#sectionDemo
## Reference: https://portswigger.net/web-security/cors
## Description:
The application implements an HTML5 cross-origin resource sharing
(CORS) policy for this request that allows access from any domain.
The application allowed access from the requested origin http://wioydcbiourl.com
Since the Vary: Origin header was not present in the response, reverse
proxies and intermediate servers may cache it. This may enable an
attacker to carry out cache poisoning attacks. The attacker can get
some of the software resources of the victim without the victim
knowing this.
STATUS: HIGH Vulnerability
[+]Test Payload:
```
GET /1694201352_198/index.php?controller=pjFrontPublic&action=pjActionFleets&locale=1&index=2795
HTTP/1.1
Host: demo.phpjabbers.com
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.141
Safari/537.36
Connection: close
Cache-Control: max-age=0
Origin: http://wioydcbiourl.com
Referer: http://demo.phpjabbers.com/
Sec-CH-UA: ".Not/A)Brand";v="99", "Google Chrome";v="116", "Chromium";v="116"
Sec-CH-UA-Platform: Windows
Sec-CH-UA-Mobile: ?0
```
## Reproduce:
[href](https://github.com/nu11secur1ty/CVE-nu11secur1ty/tree/main/vendors/phpjabbers/2023/Limo-Booking-Software-1.0)
## Proof and Exploit:
[href](https://www.nu11secur1ty.com/2023/09/limo-booking-software-10-cors.html)
## Time spent:
00:35:00 Limo Booking Software v1.0: A Critical CORS Misconfiguration Exploited in the Wild
On September 8, 2023, cybersecurity researcher nu11secur1ty uncovered a high-severity vulnerability in Limo Booking Software v1.0, a widely used web application developed by PHPJabbers. The flaw centers on a dangerously permissive CORS (Cross-Origin Resource Sharing) policy that allows unrestricted access from any domain — a configuration that opens the door to serious security risks, including cache poisoning and unauthorized data exposure.
Understanding CORS: The Security Mechanism That Failed
CORS is a browser-based security mechanism designed to prevent malicious websites from accessing sensitive resources on other domains. It operates through HTTP headers such as Access-Control-Allow-Origin, which dictates which origins (domains) are permitted to access a resource.
When implemented correctly, CORS restricts access to trusted domains only. However, in this case, the application responded with:
Access-Control-Allow-Origin: *This wildcard * means any origin — including malicious domains — can access the application's resources. This is a fundamental misconfiguration, especially when combined with the absence of the Vary: Origin header.
The Critical Flaw: Missing Vary: Origin Header
According to the OWASP CORS Guide and security best practices, servers should include the Vary: Origin header when CORS policies are dynamic. This header signals to intermediate caches (like reverse proxies, CDNs, or load balancers) that the response varies based on the origin request.
Without Vary: Origin, cached responses can be served to different clients regardless of their origin — a classic cache poisoning attack vector.
For example, an attacker can:
- Send a request from a malicious domain (
http://wioydcbiourl.com) - Receive a response with
Access-Control-Allow-Origin: * - Have that response cached by a CDN or proxy
- Subsequently, deliver the same cached response to a legitimate user, allowing the attacker’s domain to access sensitive data via JavaScript
This attack is stealthy and difficult to detect, as the victim may never realize their browser has been served a poisoned response.
Exploitation Example: Real-World Payload
The researcher provided a detailed test payload to demonstrate the vulnerability:
GET /1694201352_198/index.php?controller=pjFrontPublic&action=pjActionFleets&locale=1&index=2795
HTTP/1.1
Host: demo.phpjabbers.com
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.5845.141 Safari/537.36
Connection: close
Cache-Control: max-age=0
Origin: http://wioydcbiourl.com
Referer: http://demo.phpjabbers.com/
Sec-CH-UA: ".Not/A)Brand";v="99", "Google Chrome";v="116", "Chromium";v="116"
Sec-CH-UA-Platform: Windows
Sec-CH-UA-Mobile: ?0This request mimics a real user interaction but uses a malicious origin. The server responds with a 200 OK status and includes Access-Control-Allow-Origin: * — allowing any client to access the fleet data.
Since the response lacks Vary: Origin, it can be cached and later delivered to legitimate users, potentially exposing sensitive fleet information, pricing, or vehicle details — all without the victim’s knowledge.
Impact and Risk Assessment
| Severity | High |
|---|---|
| Attack Vector | Cache poisoning, cross-origin data leakage |
| Exploitability | High — requires only a malicious domain and basic HTTP request |
| Impact | Exposure of internal data, potential for session hijacking or client-side XSS |
The vulnerability is particularly dangerous because:
- It affects a public demo instance, making it accessible to attackers globally
- It enables passive data leakage without direct interaction with the victim
- It can be exploited even without user authentication
Best Practices for Secure CORS Implementation
Developers must avoid using Access-Control-Allow-Origin: * in production environments. Instead, adopt one of the following secure strategies:
- Whitelist specific origins: Set
Access-Control-Allow-Origin: https://trusted-domain.comfor known partners - Dynamic origin validation: Use server-side logic to verify the
Originheader and respond accordingly - Always include
Vary: Origin: Prevent cache poisoning by signaling that the response depends on the requesting origin - Use
Access-Control-Allow-Credentialsonly when necessary: If credentials are involved, avoid using*and require explicit origin matching
Example of a secure response:
Access-Control-Allow-Origin: https://trusted-site.com
Access-Control-Allow-Credentials: true
Vary: OriginThis configuration ensures that only trusted domains can access sensitive resources, and caches are properly invalidated based on origin.
Conclusion: A Wake-Up Call for Web Application Security
Limo Booking Software v1.0 serves as a stark reminder that even seemingly benign features like CORS can become critical vulnerabilities when misconfigured. The absence of Vary: Origin combined with a wildcard Access-Control-Allow-Origin creates a perfect storm for cache poisoning attacks — a threat often overlooked in traditional security assessments.
Developers and administrators should:
- Regularly audit CORS policies in their applications
- Use automated tools to detect misconfigurations
- Implement strict origin validation in production environments
- Never rely on
*in CORS headers unless absolutely necessary (and even then, only in controlled, non-sensitive contexts)
Security is not just about authentication and encryption — it’s about context-aware configuration. A single missing header can compromise an entire system.