CONFIDENTIAL

VAPT Report: company-c.example.com

Comprehensive Vulnerability Assessment & Penetration Testing Report

Target
https://company-c.example.com/ (+ all *.company-c.example.com)
Assessment Date
2026-03-22
Assessor
Automated VAPT via Claude Code
Scope
External black-box — network, application, infrastructure, config
Authorization
Management & security team consent confirmed
Findings
25 total — 4 Critical, 4 High, 6 Medium, 6 Low, 5 Info

🛡 1. Executive Summary

company-c.example.com operates a much larger infrastructure than initially visible. Deep OSINT and JS bundle analysis uncovered a live backend API server, a payment processing UI with Razorpay integration, and a portfolio of 12+ registered domains.

Infrastructure Overview

Overall Risk Assessment

ComponentRisk LevelRationale
Backend API (company-c-api-prototype-server)CRITICALLive payment endpoints, no auth, PII exposure, wildcard CORS
Payment Frontend (company-c-pay-ui)HIGHPublic source code, Razorpay integration, API URL exposed
Domain Portfolio (12+ domains)HIGHMassive attack surface, all on 5 Linode servers
Subdomain infrastructureMEDIUM-HIGHWildcard DNS + hostname reflection + HSTS disabled
Main domain (company-c.example.com)LOWStatic SPA, no server-side processing

Can an Attacker...

Attack ScenarioPossible?Details
Access the backend API without auth?YESLive Express.js API at redacted-api.vercel.app — zero authentication on all payment endpoints
Steal personal information (PII)?YESName, phone, email, address hardcoded in API response — accessible to anyone
Abuse payment endpoints?YESPayment initiation, status, and capture endpoints are unauthenticated with wildcard CORS
Hack the database / SQL injection?UNTESTEDThe API crashes (500 errors) when called — could not verify if SQL injection reaches a database. The main company-c.example.com site has no database
Inject pornographic/malicious content on homepage?NOStatic files on CDN — no server-side rendering, no content injection point
Deface the website?INDIRECTCannot modify CDN-served files without Fastly credentials; BUT subdomain wildcard could be exploited for phishing/deception
Take the site down (DDoS)?POSSIBLEFastly CDN provides DDoS mitigation, but no rate limiting — sustained attack with cache-busting could degrade performance. Subdomain Linode servers are more vulnerable
Perform XSS attacks?PARTIALMain site doesn't reflect any input; subdomains reflect hostname in HTML but browser DNS restrictions limit direct XSS
Steal user data?NONo user data is collected, stored, or processed currently
Perform clickjacking?YESNo X-Frame-Options or CSP frame-ancestors — site can be embedded in attacker-controlled iframes
Perform subdomain takeover?POSSIBLEWildcard DNS + multiple Linode servers — if any server is decommissioned, subdomain takeover is trivial
Exploit a backdoor?NONo backdoors, admin panels, or debug endpoints found
Intercept payments?N/ANo payment processing currently active

📋 2. Finding Summary Table

Severity Distribution

25 Findings
Critical (4) High (4) Medium (6) Low (6) Info (5)

Overall Risk Level

CRITICAL
4 Critical + 4 High findings demand immediate action
#FindingSeverityCVSS 3.1What Happens If Exploited
F18PII Hardcoded in Live API ResponseCRITICAL9.1Founder's phone/email/address harvested; SIM-swap attacks, identity theft, targeted phishing against leadership
F19Wildcard CORS (*) on Backend APICRITICAL8.6Any malicious website can silently call your payment API from a victim's browser; fake payments, data theft at scale
F20Razorpay Key Undefined in ProductionCRITICAL8.2Payment flow is broken; if key is later set without fix, it leaks to every visitor enabling fraudulent transactions
F21Payment API — Zero AuthenticationCRITICAL9.4Attacker initiates/captures/verifies payments freely; financial fraud, unauthorized refunds, payment manipulation
F22x-powered-by: Express ExposedMEDIUM5.3Attacker knows exact framework; targets Express-specific CVEs to gain RCE on the API server
F23GitHub Repo Exposes Source CodeMEDIUM5.0Attacker reads full payment flow logic; finds hidden endpoints, business logic flaws, and crafts targeted exploits
F2412+ Domains on 5 Linode ServersHIGH7.2Compromise one server = control multiple domains; host phishing under your brand; massive reputational damage
F25API Error Messages Leak InternalsMEDIUM5.3Attacker learns server region, architecture, function IDs; uses info to craft targeted infrastructure attacks
F01Missing Content-Security-Policy (CSP)HIGH6.1When forms/payment go live: attacker injects malicious scripts that steal every credit card number entered
F02Wildcard Subdomain + Hostname ReflectionHIGH6.5Attacker creates secure-payment.company-c.example.com phishing page; victims trust it because it's your real domain
F03Subdomain HSTS Disabled (max-age=0)HIGH7.4Attacker on public WiFi intercepts subdomain traffic via SSL stripping; steals credentials/session tokens in transit
F04OpenResty Version DisclosureMEDIUM5.3Attacker looks up known CVEs for OpenResty xxx.xxx.xxx.xxx; exploits unpatched vulns to gain server shell access
F05Missing X-Frame-Options (Clickjacking)MEDIUM4.3Attacker embeds your site in invisible iframe; tricks users into clicking "Confirm Payment"
F06No Rate Limiting — Main DomainMEDIUM5.3Attacker floods CDN with cache-busting requests; inflates your Fastly bill by thousands; degrades site for real users
F07No Rate Limiting — Subdomain ServersMEDIUM5.3Attacker DDoSes bare Linode servers directly; servers go offline; all 12+ domains become unreachable
F08Shared SSL Certificate (100+ SANs)LOW3.7Attacker discovers all 100+ sites sharing your certificate; compromises a weaker co-tenant to pivot toward your infrastructure
F09Missing X-Content-Type-OptionsLOW3.1Browser misinterprets uploaded file as executable; malicious file disguised as image runs as JavaScript
F10Missing Referrer-PolicyLOW3.1When payment URLs contain order/transaction IDs, these leak to Google Fonts and other third parties via Referer header
F11Missing Permissions-PolicyLOW2.6Malicious ad/script on page silently accesses camera, microphone, or payment API without user knowing
F12SPA Catch-All 200 + TRACE EnabledLOW3.1Security scanners can't distinguish real vs fake endpoints; TRACE method could enable Cross-Site Tracing
F13Excessive Google Fonts (25+ families)LOW2.0Google tracks every visitor; if Google Fonts CDN is compromised, malicious CSS/fonts execute on your site
F14CDN Infrastructure DisclosureINFO0.0Attacker learns you're on Fastly Kolkata PoP; targets that specific edge node
F15Business Email Uses GmailINFO0.0Attacker spoofs redacted-c@gmail.com; sends fake invoices to your clients
F16Privacy Policy & Terms MissingINFO0.0RBI rejects PA/PG license; DPDPA non-compliance leads to fines up to Rs 250 crore
F17No security.txt / robots.txtINFO0.0Security researchers can't report vulnerabilities responsibly

⚠️ 2A. Exploitability Scores & India Threat Landscape

India Cybercrime Context — Why This Matters NOW

StatisticValueSource
Cybercrime cases in India (2025)28.15 lakh (24% increase from 2024)NCRB / I4C
Financial losses from cyber fraud (2025)Rs 22,845 croreNational Cyber Crime Reporting Portal
Projected annual cyber fraud lossesRs 1.2 lakh crore (2025)I4C
UPI fraud incidents (FY 2024-25)1.1 million+ (85% increase YoY)NPCI
Cyberattacks per week on Indian orgs2,011 (higher than global average)Check Point Research 2025
Data breach incidents in India (2025)~8,500 identity theft/breach casesNCRB State Data
Online fraud incidents (2025)~71,500 nationwideIndiaDataMap Analysis
DPDPA maximum penalty per violationRs 250 croreDPDPA 2023, Section 33
API attacks in banking/fintech (India 2025)Surging — banking/utilities top targetsDark Reading India Report
CORS misconfiguration as initial attack vector90% of successful API attacksCybelAngel API Threat Report 2025
Organizations with API security problems95% have issues; 23% suffered actual breachesTraceable State of API Security 2025
Apps with broken access control100% of tested apps had some formOWASP Top 10:2025
Apps with security misconfiguration90% of tested apps had some formOWASP Top 10:2025
In this context: Company C, a fintech startup handling payment infrastructure, has 4 CRITICAL vulnerabilities that are trivially exploitable. India saw Rs 22,845 crore lost to cybercrime in 2025 alone. An unprotected payment API is a magnet for attackers.

Exploitability Scorecard — Every Finding Rated

The Exploitability Score rates how easy it is for an attacker to exploit the vulnerability:

#FindingExploitabilitySkill LevelTools NeededAttack Success RateIndia Incidents (2025)
F18PII in API Response
10/10
None — just visit a URLWeb browser100% — data is served on request8,500+ identity theft cases
F19Wildcard CORS on API
9/10
Basic — 10 lines of JavaScriptBrowser + any website90% of API breaches start with CORS misconfig35 financial APIs compromised (Jan 2025)
F20Razorpay Key Undefined
8/10
Basic — when key is set, it's auto-exposedBrowserHigh — Twilio Authy leak exposed 33.4M phone numbersUPI fraud: 1.1M incidents in FY25
F21Unauthenticated Payment API
10/10
None — curl commandTerminal/browser100% attack surface is openAPI attacks surging in India banking
F22Express Version Disclosure
6/10
Medium — need to find matching CVECVE databases + exploit toolsModeratePart of 2,011 weekly attacks
F23Public GitHub Repo
10/10
None — click a linkWeb browser100% — code is publicOSINT is #1 recon method
F2412+ Domains on Linode
7/10
Medium — monitor for IP releaseLinode account + monitoringHigh — subdomain takeover automated at scaleTop-10 bug bounty finding
F25API Error Message Leaks
8/10
Basic — trigger errors, read responsescurl / browserHigh — error-based recon is step 1Part of every targeted attack
F01Missing CSP
7/10
Medium — need XSS vector (future)XSS payload94% of apps have broken access controlSupply chain attacks rising 300%
F02Wildcard Subdomain Reflection
8/10
Basic — create a phishing linkSocial engineeringHigh — phishing is #1 attack vector in India13.7 lakh phishing complaints
F03Subdomain HSTS Disabled
6/10
Medium — need MITM positionSSL stripping toolsModerate — common on public networksFree WiFi attacks common in India
F04OpenResty Version Disclosure
5/10
Medium — need to find & exploit CVECVE scanner + exploit kitModeratePart of 2,011 weekly attacks
F05Missing X-Frame-Options
7/10
Basic-Medium — create iframe pageHTML + social engineeringModeratePart of UPI fraud (1.1M incidents)
F06No Rate Limiting (Main)
8/10
Basic — loop curl commandsAny HTTP tool / botnet rental ($50)High — DDoS-for-hire costs Rs 500/hour19+ hours of DDoS during Op Sindoor
F07No Rate Limiting (Subdomains)
9/10
Basic — direct IP, no CDN protectioncurl / LOIC / any flood toolVery High — bare servers with no protectionLinode servers have no DDoS shield
F08Shared SSL Certificate
4/10
Medium — need to exploit co-tenantCertificate transparency logsLow-ModerateInformational
F09Missing X-Content-Type-Options
4/10
Medium — need file upload + MIME confusionCrafted file uploadLowN/A currently
F10Missing Referrer-Policy
3/10
Low — passive data leakageNo tools needed (automatic)LowContributes to tracking/profiling
F11Missing Permissions-Policy
3/10
Low — need malicious script on pageXSS prerequisiteLowN/A currently
F12Catch-All 200 + TRACE
3/10
Medium — TRACE exploitation rareCross-Site Tracing toolsVery LowInformational
F13Excessive Google Fonts
2/10
Advanced — need to compromise Google CDNNation-state levelVery LowSupply chain attacks rising 300%
F14CDN Info Disclosure
2/10
Low — passive information gatheringBrowser dev toolsN/A — recon aid onlyPart of every attack chain
F15Gmail for Business
5/10
Basic — spoof email (no DMARC)Email spoofing toolsHigh13.7 lakh phishing complaints
F16No Privacy/Terms
N/A
N/A — regulatoryComplaint to CERT-In / DPBCertain — non-compliance is binaryDPDPA fines up to Rs 250 crore
F17No security.txt/robots.txt
1/10
N/A — informationalN/AN/AN/A

Exploitability Distribution

TRIVIAL (10/10) ████████████████████ 3 findings (F18, F21, F23) — Anyone can exploit
VERY EASY (8-9)  ████████████████████ 5 findings (F19, F20, F25, F02, F06, F07)
EASY (6-7)      ███████████████ 5 findings (F22, F24, F01, F03, F05)
MODERATE (4-5)  ██████████ 3 findings (F04, F08, F09, F15)
HARD (1-3)      █████ 5 findings (F10, F11, F12, F13, F14, F17)
N/A             ██ 1 finding (F16)

Key takeaway: 13 out of 25 findings (52%) have an exploitability score of 7/10 or higher, meaning they can be exploited by an attacker with basic skills and freely available tools. The 4 CRITICAL findings (F18, F19, F20, F21) are literally exploitable by visiting a URL in a web browser — no hacking tools, no special knowledge needed.

How Company C Compares to Industry Benchmarks

BenchmarkIndustry AverageCompany C StatusVerdict
OWASP Top 10 coverageMost apps have 2-3 categoriesCompany C has issues in 5 out of 10 categoriesBelow average
API authentication77% of APIs require auth0% of Company C APIs require authCritical failure
CORS configuration10% have wildcard CORS100% of Company C APIs have wildcard CORSCritical failure
Security headers scoreAverage: 4/10 headers presentCompany C: 1/10 headers present (only HSTS)Well below average
Rate limiting68% of production APIs have rate limiting0% of Company C endpoints have rate limitingCritical failure
PII exposureAvg breach exposes 4 data typesCompany C exposes 4 data types unauthenticatedAlready breached (by design)
Time to exploitAvg targeted attack: 4-7 daysCompany C CRITICAL vulns: < 5 minutesExtremely vulnerable

India-Specific Threat Intelligence for Company C

ThreatRelevance to Company CLikelihoodAnnual India Impact
UPI Payment FraudCompany C builds UPI payment infrastructure; exposed API makes it a targetVERY HIGH1.1 million UPI fraud cases (FY25, +85% YoY)
Fintech Data BreachesPII already exposed via API; similar to Nupay breach affecting 38 banksVERY HIGH8,500+ identity theft cases; Zoomcar leaked 8.4M users
API-Based AttacksUnauthenticated payment APIs are prime targets; India banking API attacks surgingVERY HIGHBanking/utilities API attacks top category
DDoS ExtortionUnprotected Linode servers are easy targets; DDoS-for-hire costs Rs 500/hrHIGH19+ hrs DDoS on govt sites; 2,011 attacks/week
Phishing via SubdomainWildcard *.company-c.example.com enables branded phishing at zero costHIGH13.7 lakh phishing complaints (2025)
Regulatory ActionDPDPA active; DPB can investigate; no privacy policy = guaranteed violationHIGHDPDPA fines: up to Rs 250 crore; 72-hour breach notification required
SIM Swap AttacksFounder's phone number exposed in API responseHIGHSIM swap is top method for UPI fraud in India
Investment Scam ImpersonationAttackers could use Company C brand for fake investment schemesMEDIUM75% of cyber fraud losses from investment scams

Real-World Parallels — "This Has Happened Before in India"

IncidentWhat HappenedSimilarity to Company C
Nupay Breach (2025)Fintech partner's misconfiguration exposed data from 38 banking institutionsCompany C has misconfigured API with PII exposure — same pattern
Zoomcar Breach (June 2025)8.4 million users' names, emails, phones, trip data leakedCompany C already leaks founder PII; customer data would follow at scale
Twilio Authy (2024)Unauthenticated API endpoint leaked 33.4 million phone numbersCompany C has identical pattern — unauthenticated endpoint leaking phone number
Operation Sindoor DDoS (May 2025)19 hours of DDoS on Indian government sites; power grid probed 200K timesCompany C's Linode servers have zero DDoS protection
Fintech KYC Exposure (2025)Startup stored KYC in plain text; researcher flagged it; DPB imposed penaltyCompany C stores PII in API responses — even worse (actively served)
The pattern is clear: Every vulnerability found in Company C has been exploited against Indian companies in 2025. This is not theoretical — these attacks are happening daily at scale in India.

💰 2B. Business Impact & Real-World Attack Scenarios

This section explains in plain language what a real attacker could do with each vulnerability, what the business stands to lose, and how it would play out step-by-step.

1 Founder Identity Theft & Social Engineering (F18)

Vulnerability exploited: PII hardcoded in API response

How the attack plays out:

  1. Attacker visits https://redacted-api.vercel.app/api/razorpayPayment (no login needed)
  2. Gets founder's full name, phone number (XXXXXXXXXX), email, and city (Hyderabad)
  3. Uses phone number to perform a SIM swap attack — calls the carrier pretending to be the founder, gets a new SIM issued
  4. With control of the phone number, resets passwords on email, banking, and Razorpay accounts
  5. Drains the Razorpay merchant account; accesses business email to send fake invoices to clients

🚨 Business losses:

  • Direct financial theft from merchant/bank accounts
  • Loss of control over business communications
  • Reputational destruction — clients receive fraudulent messages from "your" email
  • Legal liability under IT Act 2000 for failing to protect personal data
  • Estimated damage: Rs 5-50 lakhs+ depending on account balances

2 Fraudulent Payments via Unauthenticated API (F21 + F19)

Vulnerabilities exploited: No authentication on payment API + Wildcard CORS

How the attack plays out:

  1. Attacker reads the public GitHub repo (F23) and understands the full payment flow
  2. Calls /api/razorpayPayment?order_id=ATTACKER_ORDER — injects their own order ID into the Razorpay checkout
  3. Since CORS is *, the attacker builds a website that silently makes API calls to your backend from any visitor's browser
  4. When Razorpay key is eventually set (F20), attacker uses it to create fake payment orders, initiate refunds, and enumerate transactions
  5. Attacker creates a fake storefront using your Razorpay credentials — customers pay the attacker thinking they're paying you

🚨 Business losses:

  • Razorpay account suspended for fraud (they have zero tolerance)
  • Chargebacks from fraudulent transactions — you pay the penalty fees
  • RBI blacklisting if payment fraud is reported
  • Loss of ability to process payments — business operations halt
  • Legal action from defrauded customers
  • Estimated damage: Rs 10 lakhs - Rs 1 crore+ depending on scale

3 Brand Destruction via Subdomain Takeover (F02 + F24)

Vulnerabilities exploited: Wildcard subdomain + 5 Linode servers + 12+ domains

How the attack plays out:

  1. Attacker discovers that *.company-c.example.com resolves to Linode servers
  2. If any of the 5 Linode servers is shut down or IP is released, attacker provisions a new Linode with that IP
  3. Attacker now controls admin.company-c.example.com, payments.company-c.example.com, dashboard.company-c.example.com
  4. Hosts a pornographic website or crypto scam on payments.company-c.example.com
  5. Since there's no HSTS on subdomains (F03), attacker can also intercept traffic via MITM
  6. Google indexes login.company-c.example.com with malicious content — your brand is now associated with malware

Even without server takeover: Attacker simply shares links like urgent-security-alert.company-c.example.com or free-cashback.company-c.example.com in phishing campaigns. These domains RESOLVE and show "Coming Soon" with your branding.

🚨 Business losses:

  • Brand reputation destroyed — "company-c" associated with scams/adult content in Google results
  • Loss of investor confidence (early stage startup — reputation is everything)
  • Domain blacklisted by browser safe-browsing lists
  • Takes 6-12 months to recover brand reputation
  • Potential loss of the .in domain if CERT-In gets involved
  • Estimated damage: Incalculable for an early-stage payments company

4 Customer Payment Theft via Clickjacking (F05 + F01)

Vulnerabilities exploited: Missing X-Frame-Options + Missing CSP

How the attack plays out (when payment forms go live):

  1. Attacker creates win-free-iphone.com with an invisible iframe loading company-c.example.com
  2. Victim visits the attacker's site, sees "Click here to claim your prize"
  3. The click actually hits the "Pay Now" or "Confirm Payment" button on your site
  4. Victim unknowingly authorizes a payment to the attacker
  5. Without CSP, attacker can also inject a keylogger script that captures every keystroke on your payment form

🚨 Business losses:

  • Customer funds stolen — you are legally liable as the payment processor
  • RBI enforcement action for inadequate security controls
  • Loss of PCI-DSS certification eligibility
  • Class action potential if multiple customers affected
  • Estimated damage: Rs 5-25 lakhs per incident + regulatory fines

5 DDoS Taking Down Subdomain Infrastructure (F06 + F07)

Vulnerabilities exploited: No rate limiting on main domain and subdomain servers

How the attack plays out:

  1. Main site (Fastly CDN) is resilient to basic DDoS — but attacker discovers the 5 Linode servers have no CDN protection
  2. Attacker sends 10,000 requests/second to api.company-c.example.com (directly hitting Linode IP 10.0.3.2)
  3. OpenResty on the Linode server crashes — ALL domains and subdomains on that server go down
  4. Since multiple domains share the same servers, one attack takes down 6+ services
  5. Attacker threatens to continue unless ransom is paid (common DDoS extortion)

Without DDoS — CDN cost attack: Attacker sends millions of requests with unique query strings (cache busting). Every request is a cache MISS. Your Fastly bill spikes from Rs 0 to Rs 5-10 lakhs in a single month.

🚨 Business losses:

  • Website and all services offline for hours/days
  • Fastly/Linode bandwidth overage charges
  • Customer-facing downtime during critical periods
  • Ransom demands (typically $500-$5000 in crypto)
  • Estimated damage: Rs 1-10 lakhs per incident

6 Competitor/Attacker Reconnaissance via Information Leaks (F04 + F14 + F22 + F23 + F25)

Vulnerabilities exploited: Combined information disclosure across all components

How the attack plays out:

  1. Attacker knows your full tech stack: Frontend: React + Vite on Fastly CDN; Backend: Express.js on Vercel (Mumbai); Infrastructure: 5 Linode servers running OpenResty xxx.xxx.xxx.xxx; Payment: Razorpay integration; Source code: Public on GitHub
  2. Searches CVE databases for Express.js, OpenResty xxx.xxx.xxx.xxx, and Vercel-specific vulnerabilities
  3. Reads source code to find business logic flaws (e.g., price manipulation, race conditions in payment capture)
  4. Crafts targeted attacks that bypass generic WAF rules
  5. Maps your entire infrastructure for a coordinated multi-vector attack

🚨 Business losses:

  • Dramatically reduces the attacker's effort — from weeks to minutes
  • Increases success probability of every other attack scenario
  • Competitor gains full technical intelligence on your product architecture
  • Estimated damage: Force multiplier for all other attacks

7 Regulatory Shutdown (F16 + F18 + F19)

Vulnerabilities exploited: No privacy policy + PII exposure + insecure API

How the attack plays out:

  1. Security researcher or disgruntled user discovers PII leaking from API
  2. Files complaint with CERT-In (Indian Computer Emergency Response Team)
  3. CERT-In investigates, finds: No privacy policy (DPDPA violation), Personal data exposed without consent, No security measures on payment API (IT Act Section 43A), No PCI-DSS compliance
  4. CERT-In issues directive to fix within 6 hours (standard for critical vulnerabilities)
  5. RBI is notified — blocks PA/PG license application
  6. If DPDPA Data Protection Board gets involved: fines up to Rs 250 crore

🚨 Business losses:

  • RBI PA/PG license denied — cannot legally process payments in India
  • DPDPA fines: up to Rs 250 crore per violation
  • CERT-In public advisory naming your company
  • Investor due diligence red flag — funding rounds jeopardized
  • Estimated damage: Rs 50 lakhs - Rs 250 crore (worst case regulatory)

8 Supply Chain Attack via Third-Party Dependencies (F13 + F01)

Vulnerabilities exploited: 25+ Google Font families + No CSP

How the attack plays out:

  1. Attacker compromises Google Fonts CDN (or performs DNS hijack of fonts.googleapis.com)
  2. Modified font file contains embedded CSS that exfiltrates data
  3. Without CSP, the browser happily loads and executes this
  4. Every visitor to company-c.example.com sends their session data, keystrokes, and form inputs to the attacker
  5. Since you load 25+ font families, the attack surface is enormous — any one of them could be the entry point

🚨 Business losses:

  • Customer data breach at scale
  • Extremely difficult to detect (looks like normal font loading)
  • Breach notification required under DPDPA
  • Estimated damage: Rs 10-50 lakhs + reputational

Impact Summary for Management

Risk CategoryWorst-Case Financial ImpactLikelihood (Current State)
Financial fraud (via unauthenticated API)Rs 10 lakhs - Rs 1 croreHIGH — endpoints are live and accessible now
Identity theft (founder PII exposed)Rs 5-50 lakhsHIGH — PII is accessible with a single URL visit
Regulatory fines (DPDPA, RBI, CERT-In)Rs 50 lakhs - Rs 250 croreMEDIUM — depends on complaint being filed
Brand destruction (subdomain takeover)Incalculable for early-stage startupMEDIUM — requires Linode server decommission
Service disruption (DDoS on Linode)Rs 1-10 lakhs per incidentHIGH — servers have no protection
Customer data breach (when payment goes live)Rs 10-50 lakhs + legalHIGH — no CSP, no security headers
Competitive intelligence leakStrategic disadvantageCERTAIN — source code is public on GitHub
Bottom line: The combination of an unauthenticated live payment API, exposed PII, wildcard CORS, and public source code creates an immediate and exploitable attack chain. An attacker with moderate skill could cause significant financial and reputational damage today, before the platform even officially launches.

🔒 3. CRITICAL: Discovered Backend API & Payment Infrastructure

3.1 Discovery Method

Analysis of the JavaScript bundle at redacted-ui.vercel.app/static/js/main.0b75b70c.js (referenced via GitHub repo dev-user-1/Company C-UI) revealed a hardcoded backend API URL:

https://redacted-api.vercel.app/api

This API server is LIVE, running Express.js on Vercel, and contains active payment processing endpoints with Razorpay integration.

[F18] CRITICAL PII Hardcoded in Live API Response (CVSS 9.1)

The endpoint GET /api/razorpayPayment returns an HTML page with a Razorpay checkout form containing hardcoded personal information:

Data TypeValue ExposedRisk
Full NameAmitIdentity disclosure
Email Addressredacted-c@gmail.comSpam, phishing, social engineering
Phone NumberXXXXXXXXXXSIM swap attacks, social engineering, harassment
Physical Address[Redacted City], IndiaPhysical security risk

This PII is returned to any unauthenticated request from any origin (CORS wildcard). It is visible to every user, bot, or scanner that hits this endpoint.

Remediation:

  • Immediately remove hardcoded PII from API responses
  • Use environment variables for configuration
  • Never prefill personal data in server-rendered checkout pages
  • Implement authentication before exposing any payment endpoints
[F19] CRITICAL Wildcard CORS (*) on Backend API (CVSS 8.6)

The API server responds with:

access-control-allow-origin: *

This means any website on the internet can make API calls to the payment backend. An attacker on evil.com can:

  • Initiate payment flows on behalf of visitors
  • Read API responses including PII
  • Abuse payment endpoints from any origin
  • Perform CSRF attacks without restriction

Remediation: Restrict CORS to specific allowed origins only (e.g., https://company-c.example.com).

[F20] CRITICAL Razorpay Key Undefined in Production (CVSS 8.2)

The Razorpay checkout options include:

"key" : "undefined"

This indicates the Razorpay API key environment variable is not set on the Vercel deployment. This means:

  • The payment checkout will fail silently
  • The key was likely in .env locally but not configured in Vercel environment
  • If the key WAS set, it would be exposed in every API response (client-side HTML)

Remediation:

  • Set Razorpay keys via Vercel environment variables
  • Never expose Razorpay secret key in client-facing responses
  • Use server-side order creation, not client-side key exposure
[F21] CRITICAL Payment API — Zero Authentication (CVSS 9.4)

The following payment API endpoints are live and publicly accessible with zero authentication:

EndpointMethodStatusResponse
/api/razorpayPaymentGET200Full Razorpay checkout HTML with PII
/api/razorpayPayment?order_id=ANYTHINGGET200Checkout with attacker-supplied order_id
/api/makepayment?payment_method=pm_card_visaGET500FUNCTION_INVOCATION_FAILED (crashes)
/api/makepayment?payment_method=pm_card_mastercardGET500FUNCTION_INVOCATION_FAILED (crashes)
/api/makeupipaymentGET500FUNCTION_INVOCATION_FAILED (crashes)
/api/capturepaymentPOST500FUNCTION_INVOCATION_FAILED (crashes)
/api/paymentstatusPOST500FUNCTION_INVOCATION_FAILED (crashes)
/api/upipaymentstatusGET200{} (empty JSON)
/api/verifyupipaymentPOST (callback)404Not found
/ (root)GET200Hello World

Critical issues:

  1. No authentication or API keys required to access any endpoint
  2. No rate limiting — 15 rapid requests all returned 200
  3. Order ID injectionorder_id parameter is directly injected into Razorpay checkout without validation
  4. Payment method endpoints crash — indicating unhandled exceptions that could leak stack traces
  5. Server errors expose Vercel function IDs — e.g., REDACTED_FUNCTION_ID
[F22] MEDIUM Express Server Information Disclosure

The API server exposes:

x-powered-by: Express

This confirms the backend framework and helps attackers target Express-specific vulnerabilities.

Remediation: Add app.disable('x-powered-by'); or use Helmet.js middleware.

[F25] MEDIUM Error Messages Leak Internal Infrastructure

Server errors return:

A server error has occurred
FUNCTION_INVOCATION_FAILED
REDACTED_FUNCTION_ID

This reveals: Vercel serverless function architecture, deployment region (bom1 = Mumbai), and internal request IDs.

3.8 API Endpoint Map

redacted-api.vercel.app
├── /                              → "Hello World" (root)
├── /api/
│   ├── razorpayPayment           → Razorpay UPI checkout (GET) ← LIVE WITH PII
│   ├── makepayment               → Card payment initiation (GET, with ?payment_method=)
│   ├── makeupipayment            → UPI payment initiation (GET)
│   ├── capturepayment            → Payment capture (POST, with paymentid1/paymentid2)
│   ├── paymentstatus             → Card payment status (POST, with paymentid1)
│   ├── upipaymentstatus          → UPI payment status (GET)
│   └── verifyupipayment          → Razorpay callback URL (POST)
[F23] MEDIUM GitHub Repository Exposes Frontend Source

Repository: github.com/redacted/redacted-ui

FieldValue
LanguageJavaScript
FrameworkCreate React App
Homepageredacted-ui.vercel.app
Created2024-02-18
Authordev-user-1

The public repository exposes the complete frontend source code including API endpoint URLs, payment flow logic, and integration patterns.

🌐 4. CRITICAL: Full Domain Portfolio Discovery

[F24] HIGH Complete Domain Inventory (12+ Domains on 5 Linode Servers)
DomainIP AddressServerContentStatus
company-c.example.com10.0.3.1Fastly CDNReact SPA (main site)Active
company-c-alt1.example.com10.0.3.2OpenResty/xxx.xxx.xxx.xxx"Coming Soon"Placeholder
qr.company-c-alt1.example.com10.0.3.3OpenResty/xxx.xxx.xxx.xxx"Coming Soon"Placeholder
company-c-alt2.example.com10.0.3.3OpenResty/xxx.xxx.xxx.xxx"Coming Soon"Placeholder
company-c-dev.example.com10.0.3.5OpenResty/xxx.xxx.xxx.xxx"Coming Soon"Placeholder
company-c-app.example.com10.0.3.3OpenResty/xxx.xxx.xxx.xxx"Coming Soon"Placeholder
company-c-alt3.example.com10.0.3.3OpenResty/xxx.xxx.xxx.xxx"Coming Soon"Placeholder
company-c-alt4.example.com10.0.3.6OpenResty/xxx.xxx.xxx.xxx"Coming Soon"Placeholder
company-c-alt5.example.com10.0.3.6OpenResty/xxx.xxx.xxx.xxx"Coming Soon"Placeholder
company-c-alt6.example.com10.0.3.4OpenResty/xxx.xxx.xxx.xxx"Coming Soon"Placeholder
company-c-alt7.example.com10.0.3.7Parked (redirect to /lander)Domain parking
company-c-alt8.example.com10.0.3.8Parked (redirect to /lander)Domain parking
company-c-alt9.example.com10.0.3.7Parked (redirect to /lander)Domain parking
company-c-alt10.example.com10.0.3.9OpenResty403 ForbiddenBlocked

4.2 Vercel-Hosted Applications (Hidden Infrastructure)

ApplicationURLTechnologyStatus
Payment Frontendredacted-ui.vercel.appReact (CRA) + RazorpayLIVE
Backend APIredacted-api.vercel.appExpress.jsLIVE
Canva Marketingcompany-cments.my.canva.site/mainCanva SitesLIVE

4.3 Linode Server Inventory (5 Servers)

IP AddressSubdomains HostedRegistered DomainsSoftware
10.0.3.3mail, db, postgres, jenkinscompany-c-alt3.example.com, company-c-alt2.example.com, company-c-app.example.com, qr.company-c-alt1.example.comOpenResty/xxx.xxx.xxx.xxx
10.0.3.4dashboard, ci, cdcompany-c-alt6.example.comOpenResty/xxx.xxx.xxx.xxx
10.0.3.5test, internal, redis, mongo, grafanacompany-c-dev.example.comOpenResty/xxx.xxx.xxx.xxx
10.0.3.2api, dev, beta, checkout, prometheuscompany-c-alt1.example.comOpenResty/xxx.xxx.xxx.xxx
10.0.3.6admin, staging, paymentscompany-c-alt4.example.com, company-c-alt5.example.comOpenResty/xxx.xxx.xxx.xxx

4.4 OSINT: Company Intelligence

FieldDetail
CompanyCompany C
FounderFounder C
BackgroundCBDC Architect at Bank of England; ex-Cardano Foundation, VISA
Location[Redacted City], India + London, UK
Team Size1-10 employees
Emailredacted-c@gmail.com
Twittertwitter.com/zapperombie
WellFoundwellfound.com/company/redacted
ProductsSplit payments, Chat-to-Pay, AI fraud detection, Payment orchestration

🖥 5. Target Architecture & Reconnaissance

5.1 Technology Stack

ComponentMain Domain (company-c.example.com)Subdomains (*.company-c.example.com)
Web ServerFastly (Varnish)OpenResty/xxx.xxx.xxx.xxx (nginx)
FrameworkReact 18+ (Vite build)Static HTML (server-generated)
IP Address10.0.3.1 (Fastly CDN)5 Linode IPs
ProtocolHTTP/2, HTTP/3 (h3)HTTP/2
SSLGoogle Trust Services (WR3)Auto-provisioned
HSTSmax-age=31556926max-age=0 (DISABLED)

5.2 Subdomain IP Mapping (5 Linode Servers)

IP AddressSubdomains Resolved
10.0.3.3mail, db, postgres, jenkins
10.0.3.4dashboard, ci, cd
10.0.3.5test, internal, redis, mongo, grafana
10.0.3.2api, dev, beta, checkout, prometheus
10.0.3.6admin, staging, payments
CRITICAL NOTE: Subdomains like db, redis, mongo, postgres, jenkins, grafana, prometheus resolve to live servers. While they currently serve "Coming Soon" pages, the naming suggests these may eventually host sensitive infrastructure. Any of these names becoming active services without proper security is extremely high risk.

5.3 Application Architecture — Main Domain

5.4 DNS Configuration

RecordValue
A Record10.0.3.1 (Fastly)
Wildcard (*.company-c.example.com)Round-robin to 5 Linode IPs
www.company-c.example.comConnection refused (not configured)
HTTP -> HTTPS301 redirect via Varnish

🔐 6. SSL/TLS Configuration Assessment

6.1 Certificate Details

FieldValue
Subject CNhynan.tavric.qzz.io (NOT company-c.example.com)
IssuerGoogle Trust Services (WR3)
Valid From2026-03-19 19:48:15 UTC
Valid To2026-06-17 20:45:04 UTC (~90 day cert)
TypeDV (Domain Validation) — Shared Multi-SAN
SAN Count100+ domains (including company-c.example.com)

6.2 Protocol & Cipher Suite Testing

TestResultVerdict
SSLv3DisabledPASS
TLS 1.0DisabledPASS
TLS 1.1DisabledPASS
TLS 1.2Enabled (ECDHE-RSA-CHACHA20-POLY1305)PASS
TLS 1.3Enabled (TLS_AES_128_GCM_SHA256)PASS
NULL cipher (TLS 1.2)RejectedPASS
EXPORT cipher (TLS 1.2)RejectedPASS
DES cipher (TLS 1.2)RejectedPASS
RC4 cipher (TLS 1.2)RejectedPASS
MD5 cipher (TLS 1.2)RejectedPASS
aNULL cipher (TLS 1.2)RejectedPASS
eNULL cipher (TLS 1.2)RejectedPASS
Note: Initial testing showed false positives for weak ciphers because TLS 1.3 negotiation ignores the -cipher flag. Re-testing with -tls1_2 confirmed all weak cipher suites are properly rejected.
[F08] LOW Shared SSL Certificate (100+ SANs)

The certificate CN is hynan.tavric.qzz.io and lists 100+ unrelated domains as SANs. This reveals all co-hosted domains, enabling attacker reconnaissance.

Impact: Attacker can enumerate co-hosted sites, identify weaker targets on the same infrastructure, and potentially use shared-hosting vulnerabilities.

Remediation: Obtain a dedicated SSL certificate for company-c.example.com and *.company-c.example.com via Fastly's custom certificate or BYOC feature.

🛡 7. Security Headers Analysis

7.1 Complete Header Audit — Main Domain

HeaderExpectedActualStatus
Strict-Transport-Securitymax-age=31536000; includeSubDomainsmax-age=31556926PARTIAL — missing includeSubDomains
Content-Security-PolicyStrict policyNOT SETFAIL
X-Frame-OptionsDENYNOT SETFAIL
X-Content-Type-OptionsnosniffNOT SETFAIL
X-XSS-Protection0 (CSP preferred)NOT SETFAIL
Referrer-Policystrict-origin-when-cross-originNOT SETFAIL
Permissions-PolicyRestrictiveNOT SETFAIL
Cache-ControlAppropriatemax-age=3600PASS
Content-TypeWith charsettext/html; charset=utf-8PASS
Set-Cookie (flags)HttpOnly, Secure, SameSiteNo cookies setN/A
[F01] HIGH Missing Content-Security-Policy (CSP)

No CSP header is configured on any response. Without CSP, if ANY XSS vulnerability is introduced in the future, there is zero browser-level mitigation.

Recommended CSP:

Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' https://fonts.googleapis.com 'unsafe-inline'; font-src https://fonts.gstatic.com; img-src 'self' data:; connect-src 'self'; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests
[F05] MEDIUM Missing X-Frame-Options (Clickjacking)

Neither X-Frame-Options nor CSP frame-ancestors is set. The entire site can be embedded in an iframe on any domain.

Attack scenario (Clickjacking):

  1. Attacker creates evil-site.com with an invisible iframe pointing to company-c.example.com
  2. Overlays fake UI elements on top
  3. User thinks they're clicking on the attacker's page but actually interacts with company-c.example.com
  4. When "Join Waitlist" or "Book a Demo" functionality becomes active, this could trick users into unintended actions

Remediation: Add X-Frame-Options: DENY and CSP frame-ancestors 'none' via Fastly VCL.

[F09] LOW Missing X-Content-Type-Options

Without nosniff, browsers may MIME-sniff responses and execute content as a different type than declared.

Remediation: X-Content-Type-Options: nosniff

[F10] LOW Missing Referrer-Policy

Full URLs leak via the Referer header to third-party resources (Google Fonts, LinkedIn).

Remediation: Referrer-Policy: strict-origin-when-cross-origin

[F11] LOW Missing Permissions-Policy

Browser features (camera, microphone, geolocation, payment API) are not restricted.

Remediation: Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=(self)

💽 8. Injection Attack Testing (XSS, SQLi, Command Injection)

8.1 Cross-Site Scripting (XSS)

8.1.1 Reflected XSS — Main Domain

#PayloadHTTP StatusReflected in HTML?Vulnerable?
1<script>alert(1)</script>200NONO
2"><img src=x onerror=alert(1)>200NONO
3javascript:alert(1)200NONO
4{{7*7}} (SSTI)200NONO
5VAPT_TEST_MARKER_12345200NONO

Result: The main domain serves a completely static HTML file. No query parameters, no URL paths, no headers are reflected in the response body. XSS is not possible on the main domain in its current state.

8.1.2 Reflected XSS — Subdomains

TestResult
Hostname reflected in <title>?YES<title>ANYTHING.company-c.example.com - Coming Soon</title>
Hostname reflected in <h1>?YES<h1>ANYTHING.company-c.example.com</h1>
Can XSS payload be in hostname?Limited — browsers restrict DNS characters, preventing <script> tags in hostnames
Host header injection?Blocked — OpenResty returns 400 Bad Request for malformed Host headers

Assessment: The OpenResty wildcard servers reflect the requested subdomain name directly into <h1> and <title> without sanitization. While direct exploitation via browser is limited by DNS character restrictions, this is a design weakness.

8.1.3 Stored XSS

Result: NOT APPLICABLE — No user input storage mechanism exists (no forms, no comments, no database).

8.1.4 DOM-Based XSS

Result: No dynamic URL parameter handling observed. The React SPA uses virtual DOM which inherently prevents most DOM XSS. LOW RISK.

8.2 SQL Injection (SQLi)

#PayloadHTTP StatusResponse SizeDifferent from Normal?Vulnerable?
1' OR '1'='12002553 bytesNONO
21; DROP TABLE users--2002553 bytesNONO
3' UNION SELECT NULL--2002553 bytesNONO
41 AND 1=12002553 bytesNONO
5admin--2002553 bytesNONO
61 OR 1=1#2002553 bytesNONO

Result: SQL Injection is NOT POSSIBLE. Every payload returns the identical 2553-byte static HTML file. There is no database and no server-side query processing.

8.3 Command Injection (OS Command Injection)

#PayloadHTTP StatusResponse SizeVulnerable?
1; ls -la2002553 bytesNO
2| cat /etc/passwd2002553 bytesNO
3$(whoami)2002553 bytesNO
4`id`2002553 bytesNO
5; ping -c 1 127.0.0.12002553 bytesNO

Result: Command injection is NOT POSSIBLE. No server-side processing of any parameters.

8.4 Server-Side Template Injection (SSTI)

Payloads {{7*7}}, ${7*7}, {{constructor.constructor('return this')()}} tested. NOT APPLICABLE — No template engine processing server-side.

📄 9. Content Injection & Defacement Testing

9.1 Can Anyone Inject Malicious Content on the Homepage?

TestMethodResultContent Changed?
Parameter reflection?q=INJECTED_CONTENTStatic HTML returnedNO
HTML injection via params?q=<h1>HACKED</h1>Not reflectedNO
PUT request with HTML bodyPUT / -d '<html>DEFACED</html>'HTTP 200 but content unchangedNO
POST request with HTML bodyPOST / -d '<html>DEFACED</html>'HTTP 200 but content unchangedNO
Content verified after PUT/POSTGET /Original HTML unchangedNO

Verdict: It is NOT possible to inject content or deface the homepage via HTTP requests. The site is served from Fastly CDN as cached static files. The only ways to change content are: compromising the deployment pipeline, Fastly credentials, DNS hijacking, or subdomain abuse (see F02).

9.2 Defacement Risk via Subdomain Abuse

This is the most viable attack path for brand damage. Since *.company-c.example.com resolves to servers that display the subdomain name, an attacker who gains control of any of the 5 Linode servers could host malicious content on login.company-c.example.com, create phishing pages on secure-payment.company-c.example.com, or display inappropriate content under the company-c.example.com domain.

Risk Level: MEDIUM-HIGH (depends on server security)

⚡ 10. DDoS & Rate Limiting Assessment

10.1 Rate Limiting Tests — Main Domain (Fastly CDN)

TestRequestsConcurrent?ResultsRate Limited?
Sequential burst20NoAll 200 OKNO
Concurrent burst50YesAll 200 OK (100%)NO
Large concurrent burst100YesAll 200 OK (100%)NO
Cache-busting burst100Yes (unique query strings)All 200 OKNO

Response times under 100-request burst:

RequestResponse Time
10.278s
20.381s
30.277s
40.926s
50.226s

Subdomain Servers (Linode/OpenResty)

TestRequestsResultsRate Limited?
Concurrent burst on api.company-c.example.com30All 200 OKNO
[F06] MEDIUM No Rate Limiting — Main Domain
Attack TypeFeasibilityDetails
Volumetric DDoSLOWFastly CDN absorbs traffic across global PoPs; would require massive botnet
Application-layer DDoSMEDIUMNo rate limiting means all requests are served; cache-busting forces origin fetches
Slowloris / Slow ReadLOWFastly/Varnish handles connection management well
CDN cost amplificationMEDIUMContinuous cache-miss requests could increase Fastly billing
[F07] MEDIUM No Rate Limiting — Subdomain Servers
Attack TypeFeasibilityDetails
HTTP flood on LinodeHIGHBare VPS instances, not behind CDN. Direct IP access. No rate limiting.
Connection exhaustionHIGHOpenResty default config may not have connection limits
Bandwidth exhaustionMEDIUMLinode servers have bandwidth limits; sustained traffic could exhaust them

Remediation:

  • Main domain: Enable Fastly Edge Rate Limiting (e.g., 1000 req/min per IP)
  • Subdomains: Add nginx limit_req_zone in OpenResty config. Place behind Cloudflare or similar WAF
  • All endpoints: Implement progressive rate limiting when APIs go live

🌐 11. Subdomain Security & Takeover Testing

[F02] HIGH Wildcard Subdomain with Hostname Reflection

Discovery: ALL *.company-c.example.com subdomains resolve and serve content. The subdomain name is dynamically injected into the HTML response:

Request: https://anything-you-want.company-c.example.com/
Response: <title>anything-you-want.company-c.example.com - Coming Soon</title>
          <h1>anything-you-want.company-c.example.com</h1>

Attack scenarios:

  1. Phishing: secure-payment.company-c.example.com, login.company-c.example.com, verify-account.company-c.example.com — all resolve and look semi-legitimate
  2. Social engineering: Attacker sends link to urgent-security-alert.company-c.example.com
  3. Cookie scope attacks: If company-c.example.com sets cookies on .company-c.example.com, any subdomain can read/modify them
  4. SEO poisoning: Spammers could create backlinks to buy-cheap-xyz.company-c.example.com

11.2 Subdomain Takeover Risk

SubdomainIPServerTakeover Risk
db.company-c.example.com10.0.3.3OpenRestyHIGH if server decommissioned
jenkins.company-c.example.com10.0.3.3OpenRestyHIGH if server decommissioned
grafana.company-c.example.com10.0.3.5OpenRestyHIGH if server decommissioned
prometheus.company-c.example.com10.0.3.2OpenRestyHIGH if server decommissioned
redis.company-c.example.com10.0.3.5OpenRestyHIGH if server decommissioned
If any of these 5 Linode VPS instances is shut down without removing DNS, a Linode customer could potentially claim that IP address and serve content under *.company-c.example.com.
[F03] HIGH Subdomain HSTS Disabled (max-age=0)
ComponentHSTS ValueMeaning
Main domainmax-age=31556926HSTS enabled for ~1 year
All subdomainsmax-age=0HSTS effectively DISABLED

Impact: Subdomain traffic can be intercepted via MITM on untrusted networks. SSL stripping attacks possible. Main domain HSTS doesn't protect subdomains (missing includeSubDomains directive).

Remediation: Set max-age=31536000; includeSubDomains; preload on ALL responses.

[F04] MEDIUM OpenResty Version Disclosure

All subdomain servers respond with: Server: openresty/xxx.xxx.xxx.xxx

Impact: Attacker knows the exact software version, enabling targeted exploit research.

Remediation: Set server_tokens off; in OpenResty config, or use more_clear_headers 'Server';

🔌 12. Host Header & Cache Poisoning Attacks

TestTargetResultVulnerable?
Host: evil.comMain domainHTTP 404 (Fastly rejects unknown host)NO
X-Forwarded-Host: evil.comMain domainHTTP 200, no change in contentNO
X-Forwarded-Proto: httpMain domainHTTP 200, no changeNO
X-Original-URL: /adminMain domainHTTP 200, no changeNO
X-Rewrite-URL: /adminMain domainHTTP 200, no changeNO
Host: <script> injectionSubdomainsHTTP 400 Bad Request (OpenResty blocks)NO
HTTP Request Smuggling probeMain domainHTTP 200, no anomalyNO

Result: Host header injection and cache poisoning are NOT exploitable. Fastly properly validates the Host header and returns 404 for unrecognized domains. OpenResty blocks malformed Host headers.

📁 13. File & Directory Enumeration

13.1 Main Domain — Sensitive Path Scanning (27 paths tested)

PathHTTP StatusActual ContentSensitive Data?
/.env200SPA HTML (2553 bytes)NO
/.git/HEAD200SPA HTML (2553 bytes)NO
/admin200SPA HTML (2553 bytes)NO
/login200SPA HTML (2553 bytes)NO
/signup200SPA HTML (2553 bytes)NO
/api200SPA HTML (2553 bytes)NO
/api/v1200SPA HTML (2553 bytes)NO
/dashboard200SPA HTML (2553 bytes)NO
/.well-known/security.txt200SPA HTML (2553 bytes)NO
/wp-admin200SPA HTML (2553 bytes)NO
/wp-login.php200SPA HTML (2553 bytes)NO
/.htaccess200SPA HTML (2553 bytes)NO
/server-status200SPA HTML (2553 bytes)NO
/phpinfo.php200SPA HTML (2553 bytes)NO
/config.json200SPA HTML (2553 bytes)NO
/package.json200SPA HTML (2553 bytes)NO
/.gitignore200SPA HTML (2553 bytes)NO
/manifest.json200SPA HTML (2553 bytes)NO
/.DS_Store200SPA HTML (2553 bytes)NO
/backup.zip200SPA HTML (2553 bytes)NO
/db.sql200SPA HTML (2553 bytes)NO
/debug200SPA HTML (2553 bytes)NO
/console200SPA HTML (2553 bytes)NO
/graphql200SPA HTML (2553 bytes)NO
/swagger200SPA HTML (2553 bytes)NO
/api-docs200SPA HTML (2553 bytes)NO

ALL paths return the identical 2553-byte SPA HTML. This confirms the Fastly CDN serves a catch-all response — no sensitive files are exposed.

13.2 Subdomain Servers — Path Scanning

PathHTTP StatusContentNotes
api.company-c.example.com/.env200Empty response (0 bytes)Interesting — different behavior than root
api.company-c.example.com/admin200Coming Soon pageCatch-all
api.company-c.example.com/nginx-status200Coming Soon pageCatch-all
api.company-c.example.com/server-status200Empty response (0 bytes)Different behavior
api.company-c.example.com/status200Coming Soon pageCatch-all
Note: /.env and /server-status return empty 0-byte responses on subdomain servers, unlike other paths. This warrants further investigation if these subdomains become active.

13.3 Source Code Exposure

CheckResult
Source map (index-BpBEC52j.js.map)Returns SPA HTML (not actual map) — SAFE
CSS source map (index-M5wXO4nG.css.map)Returns SPA HTML (not actual map) — SAFE
Environment variables in JS (VITE_*, REACT_APP_*)None found — SAFE
API keys / secrets in JS bundleNone found — SAFE
Hardcoded tokens in JS bundleNone found — SAFE

🔗 14. SSRF, LFI, RFI Testing

14.1 Server-Side Request Forgery (SSRF)

#PayloadHTTP StatusResponse SizeSSRF Triggered?
1?url=http://xxx.xxx.xxx.xxx/latest/meta-data/ (AWS metadata)2002553 bytesNO
2?url=http://localhost:80802002553 bytesNO
3?url=file:///etc/passwd2002553 bytesNO

Result: SSRF is NOT POSSIBLE. All responses are the static SPA. No server-side URL fetching occurs.

14.2 Local File Inclusion (LFI)

#PayloadHTTP StatusResponse SizeLFI Triggered?
1../../../../etc/passwd2002553 bytesNO
2....//....//....//etc/passwd30762 bytes (redirect)NO
3%00 (null byte)2002553 bytesNO
4..%252f..%252f..%252fetc/passwd (double encoding)2002553 bytesNO

Result: LFI is NOT POSSIBLE. Static CDN serving, no file inclusion mechanism.

14.3 Remote File Inclusion (RFI)

?page=http://evil.com/shell.php — HTTP 200, static SPA (2553 bytes) — NOT VULNERABLE.

🔀 15. CORS & Cross-Origin Testing

TestRequestResponse HeadersResult
Cross-origin GETOrigin: https://evil.comNo Access-Control-* headersNo CORS policy
Preflight OPTIONSOrigin: evil.com + Access-Control-Request-Method: POSTNo Access-Control-* headersNo CORS policy

Result: No CORS headers are returned on the main domain. This is acceptable for a static site with no API endpoints. The browser's same-origin policy provides sufficient protection.

Future concern: When APIs are added, CORS must be configured carefully. A permissive Access-Control-Allow-Origin: * on payment APIs would be catastrophic.

🔑 16. Session & Authentication Analysis

16.1 Current State

CheckResult
Cookies setNone
Session tokensNone
JWT tokensNone
CSRF tokensNone
localStorage dataEmpty
sessionStorage dataEmpty
Authentication endpointsNone exist
Login/signup formsNone exist

Result: No session management or authentication exists on the current site. This entire attack surface is NOT APPLICABLE currently.

16.2 Pre-Launch Recommendations

When authentication is implemented:

🔃 17. Open Redirect Testing

ParameterPayloadHTTP StatusRedirected?Vulnerable?
?url=https://evil.com200NONO
?redirect=https://evil.com200NONO
?next=https://evil.com200NONO
?return=https://evil.com200NONO
?returnTo=https://evil.com200NONO
?redirect_uri=https://evil.com200NONO
?continue=https://evil.com200NONO
?dest=https://evil.com200NONO
?go=https://evil.com200NONO
//evil.com (path-based)Path traversal redirect307To https://company-c.example.com/evil.comNO (safe redirect)

Result: No open redirect vulnerabilities found. All parameter-based tests return the static SPA.

🔧 18. HTTP Method Abuse Testing

HTTP MethodStatus CodeBehaviorSecurity Concern
GET200Normal responseNone
POST200Same static HTMLNone (currently)
PUT200Same static HTML, content unchangedContent not modified
DELETE200Same static HTML, content unchangedContent not deleted
PATCH200Same static HTMLNone
OPTIONS200Same static HTML (no Allow header)Should return proper OPTIONS response
TRACE200Same static HTMLPOTENTIAL RISK — XST attacks
[F12] LOW SPA Catch-All Returns 200 + TRACE Enabled

TRACE method returns 200 instead of 405 Method Not Allowed. While the current response doesn't echo the request (mitigating Cross-Site Tracing), TRACE should be disabled as a defense-in-depth measure.

Additionally: All paths returning 200 means security scanners cannot distinguish real endpoints from non-existent ones.

Remediation:

  • Block TRACE method: if (req.method == "TRACE") { return(synth(405, "Method Not Allowed")); }
  • Return 404 for undefined routes (serve SPA only for / and /assets/*)

🔍 19. Information Disclosure & OSINT

[F14] INFO CDN Infrastructure Headers
HeaderValueInformation Leaked
x-served-bycache-ccu830059-CCUFastly PoP identifier (CCU = Kolkata)
x-cacheMISS / HITCache status reveals caching behavior
x-cache-hits0Hit count helps understand traffic patterns
x-timerS1774124909.980243,VS0,VE247Internal timing (VE247 = 247ms origin fetch)
Server (subdomains)openresty/xxx.xxx.xxx.xxxExact software version
[F15] INFO Business Email Uses Gmail

Contact email redacted-c@gmail.com is used for "Book a Demo" CTA and footer contact link.

Concerns:

  • No SPF/DKIM/DMARC enforcement on receiving side
  • Gmail lacks enterprise audit trails
  • Customers expect domain-based email from a payment company
  • Social engineering risk — easier to impersonate
[F17] INFO No security.txt or robots.txt

Neither file exists (both return SPA HTML).

security.txt (RFC 9116) should provide security contact info for responsible disclosure.

robots.txt should guide search engine crawling.

19.4 JS Bundle Intelligence

Item FoundDetailRisk
LinkedIn pagelinkedin.com/company/redactedPublic — informational only
QR domainqr.company-c-alt1.example.comNot resolvable — likely future service
API reference/api/premium-contentPlaceholder — not a real endpoint
Sample tokens in codetok_hdfc, user@upi, ORD-4829Example data only — not real credentials
[F13] LOW Excessive Google Fonts (25+ families)

The site loads 25+ Google Font families, creating unnecessary third-party dependencies, tracking exposure, and a supply chain attack surface.

Remediation: Audit and self-host only the required fonts.

⚖ 20. Compliance & Regulatory Gaps

[F16] INFO Privacy Policy & Terms Not Implemented

Footer links "Privacy" and "Terms" both point to href="#" (non-functional).

Regulatory Requirements for Indian Payment Companies:

RegulationRequirementCurrent Status
IT Act 2000, Section 43AReasonable security practices for sensitive dataNOT MET — no privacy policy
RBI PA/PG Guidelines (2020)Privacy policy mandatory for payment aggregatorsNOT MET
DPDPA 2023Consent notice, data processing transparencyNOT MET
PCI-DSSPrivacy policy required for card data handlingNOT MET
RBI Data LocalizationPayment data must be stored in IndiaNOT ASSESSABLE currently

20.2 Pre-Launch Compliance Checklist

✅ 21. Positive Findings (What's Good)

#CheckStatusDetails
1HTTPS enforcedPASSHTTP 301 redirects to HTTPS
2HSTS on main domainPASSmax-age=31556926 (~1 year)
3TLS 1.0/1.1 disabledPASSOnly TLS 1.2 + 1.3
4SSLv3 disabledPASSNot supported
5Strong cipher suitesPASSECDHE-RSA-CHACHA20-POLY1305 (TLS 1.2), AES-128-GCM (TLS 1.3)
6All weak ciphers rejectedPASSNULL, EXPORT, DES, RC4, MD5, aNULL, eNULL all rejected
7No sensitive files exposedPASSSPA catch-all prevents file access
8No API keys in JS bundlePASSNo hardcoded secrets found
9No source maps exposedPASS.map files return SPA HTML
10No client-side storage abusePASSNo cookies, localStorage, or sessionStorage
11HTTP/3 supportPASSModern protocol via alt-svc
12No mixed contentPASSAll resources served over HTTPS
13No SQL injectionPASSNo database/backend interaction
14No XSS (main domain)PASSNo input reflection
15No command injectionPASSNo server-side processing
16No SSRF/LFI/RFIPASSStatic CDN serving
17No open redirectsPASSNo redirect mechanisms
18Host header injection blockedPASSFastly returns 404, OpenResty returns 400
19No cache poisoningPASSX-Forwarded headers don't affect response
20Content cannot be modified via HTTPPASSPUT/POST don't alter served content
21React virtual DOMPASSInherent XSS protection via framework

📈 22. Risk Matrix & Prioritized Remediation

P0 — Fix IMMEDIATELY (Today)

FindingActionEffort
F18 PII in API responseRemove hardcoded name, phone, email, address from API immediately30 min
F19 Wildcard CORS on APIRestrict access-control-allow-origin to specific domains30 min
F21 Unauthenticated payment APIAdd authentication middleware to all /api/* endpoints2-4 hours
F20 Razorpay key undefinedSet environment variables properly in Vercel; never expose key client-side30 min
F23 Public GitHub repoMake repo private or remove sensitive API URLs15 min

P0.5 — Fix Within 48 Hours

FindingActionEffort
F01 Missing CSPAdd Content-Security-Policy header via Fastly VCL or hosting config1 hour
F02 Wildcard subdomainRemove wildcard DNS; define only needed subdomains explicitly30 min
F03 Subdomain HSTS disabledSet max-age=31536000; includeSubDomains; preload on all servers1 hour
F24 12+ domains on LinodeAudit all domains; decommission unused; secure active ones2-4 hours
F16 No Privacy/Terms pagesDraft and publish legal pages (regulatory requirement)1-2 days
F25 API error message leaksAdd proper error handling with generic error responses1 hour

P1 — Fix Within 1 Week

FindingActionEffort
F04 OpenResty version disclosureSet server_tokens off; in nginx/OpenResty config15 min
F05 No X-Frame-OptionsAdd X-Frame-Options: DENY header15 min
F06 No rate limiting (main)Enable Fastly Edge Rate Limiting2 hours
F07 No rate limiting (subdomains)Add limit_req_zone in OpenResty config1 hour
F15 Gmail for businessSet up @company-c.example.com email with SPF/DKIM/DMARC2 hours

P2 — Fix Within 30 Days

FindingActionEffort
F08 Shared SSL certObtain dedicated certificate1 hour
F09 No X-Content-Type-OptionsAdd nosniff header15 min
F10 No Referrer-PolicyAdd strict-origin-when-cross-origin header15 min
F11 No Permissions-PolicyAdd restrictive Permissions-Policy15 min
F12 TRACE enabled / catch-all 200Block TRACE, return proper 404s1 hour
F13 Excessive fontsAudit and self-host required fonts only2 hours

P3 — Nice to Have

FindingActionEffort
F14 CDN info disclosureStrip x-served-by, x-timer, x-cache-hits headers30 min
F17 No security.txt/robots.txtAdd both files30 min
HSTS includeSubDomains on mainAdd directive to main domain HSTS15 min
HSTS preloadSubmit to HSTS preload list after fixes15 min
www.company-c.example.com not workingConfigure www subdomain redirect30 min

🛠 23. Methodology & Tools

23.1 Testing Phases

PhaseDescriptionTools/Methods
ReconnaissanceTechnology fingerprinting, DNS resolution, HTTP header analysiscURL, Python socket, WebFetch
SSL/TLS AssessmentProtocol enumeration, cipher suite testing, certificate analysisOpenSSL s_client
Security HeadersComplete header audit against OWASP recommendationscURL header inspection
XSS TestingReflected, stored, DOM-based XSS with 5+ payloadscURL with encoded payloads
SQL Injection6 SQLi payloads including UNION, boolean, error-basedPython + cURL
Command Injection5 OS command injection payloadsPython + cURL
Content InjectionHTML injection, parameter reflection, PUT/POST body modificationcURL
DDoS TestingSequential (20), concurrent (50, 100) request bursts with timingBash parallel cURL
Rate LimitingMain domain + subdomain burst testingBash parallel cURL
Directory Enumeration27 sensitive paths on main domain, 5 paths on subdomainscURL status code analysis
Subdomain Enumeration20 subdomains tested, IP mapping, content analysisPython socket, cURL
Subdomain TakeoverDangling CNAME check, IP ownership analysis, content reflectionPython DNS, cURL
Host Header Injection5 header manipulation techniques testedcURL with custom headers
Cache PoisoningX-Forwarded-Host, X-Forwarded-Proto, X-Original-URL, X-Rewrite-URLcURL
SSRFAWS metadata, localhost, file protocolcURL with encoded payloads
LFI/RFIPath traversal, double encoding, null byte, remote includecURL
CORSCross-origin GET + OPTIONS preflight with malicious OrigincURL
Open Redirect9 parameter names + path-based redirectcURL
HTTP Methods7 methods tested (GET/POST/PUT/DELETE/PATCH/OPTIONS/TRACE)cURL
Application AnalysisJS bundle analysis (388KB), DOM inspection, client-side storage auditChrome DevTools, JavaScript execution
Cipher Testing7 weak cipher suites tested on TLS 1.2OpenSSL s_client
SSTITemplate injection payloads (Jinja2, Twig patterns)cURL

23.2 Total Tests Executed

CategoryCount
XSS payloads5
SQLi payloads6
Command injection payloads5
SSRF payloads3
LFI payloads4
RFI payloads1
Open redirect tests11
Directory/file paths32
Subdomain enumeration20
HTTP method tests7
Rate limiting requests200+
Cipher suite tests7
Header injection tests6
Content injection tests4
Cookie/session checks6
TOTAL300+

📜 24. Disclaimer

This assessment was performed as an external black-box penetration test with documented consent from management and the security team. The scope was limited to the publicly accessible company-c.example.com domain and all discovered subdomains.

Limitations

Recommendation

A comprehensive grey-box or white-box assessment is strongly recommended before the platform processes any real payments or user data. This should include: