Context: Profile of the Attacked Store
MegaShop (name changed) is a mid-sized Polish online store:
- Platform: WooCommerce on WordPress 6.x
- 45,000 active customers, 800 orders/day
- 12 plugins, including 3 premium (payment gateway, ERP, marketing automation)
- IT team: 2 developers, 1 server admin (no dedicated security personnel)
- Revenue: EUR 8 million/year
- No dedicated SOC or security monitoring
Day 0: Reconnaissance
The attacker begins with passive reconnaissance — gathering information without directly contacting the store:
- Wappalyzer/BuiltWith reveals: WordPress 6.4.2, WooCommerce 8.5, PHP 8.1, Nginx server
- Subdomain enumeration discovers: staging.megashop.pl (production copy with test data)
- Google dorking (
site:megashop.pl filetype:sql OR filetype:log) — no results, butsite:staging.megashop.plreveals directory listing with log files - Shodan shows open port 3306 (MySQL) on the staging server
- LinkedIn — profiles of 2 developers with technology stack information
The attacker already knows that staging is the weakest link. Active recon begins.
Days 1-3: Staging Server Exploitation
The staging server has:
- WordPress with default admin/admin login (unchanged after cloning from production)
- WP File Manager plugin version 6.8 with a critical RCE vulnerability (CVE-2024-XXXX)
- A database with a copy of 45,000 customer records from production (addresses, phone numbers, order history)
The attacker:
- Logs into the staging WordPress panel with default credentials
- Exploits the WP File Manager vulnerability to upload a web shell
- Gains database access on staging — copies 45,000 customer records
- Analyzes wp-config.php configuration — finds payment gateway API keys (same as production!)
- Discovers that the SSH key on staging allows access to the production server (shared key)
Days 4-7: Lateral Movement to Production
With the SSH key, the attacker gains access to the production server:
- Persistence installation — a backdoor in the form of a modified theme functions.php file (hard to detect as it looks like legitimate WordPress code)
- Privilege escalation — from the www-data account to root via an outdated kernel exploit
- Web skimmer installation — malicious JavaScript injected into the WooCommerce checkout file
The skimmer is advanced:
- Activates only on the checkout page
- Captures card data as it is typed (before tokenization)
- Sends data to
cdn-analytics-megashop.com(looking like a legitimate domain) - Obfuscated code resembles an analytics fragment
- Does not activate for IPs from the company range (anti-detection)
Days 8-30: Data Exfiltration
For 22 days, the skimmer operates undetected:
- 8,200 payment card numbers intercepted
- Personal data (names, addresses, phone numbers) stolen with every transaction
- Password hashes exported from the database (bcrypt, but the attacker will recover ~15% of weak passwords)
- Order logs with complete customer data
Simultaneously, the attacker:
- Uses stolen API keys for test refunds (small amounts to avoid suspicion)
- Installs a cryptominer on the staging server (additional revenue)
- Sells the 45,000 customer database on the dark web for $2,000
Day 31: Incident Detection
A MegaShop customer reports an unauthorized transaction to their bank. The bank identifies MegaShop as a Common Point of Purchase (CPP) — multiple store customers report fraud.
The bank notifies the payment processor, which:
- Informs MegaShop about suspected compromise
- Requires an immediate PCI Forensic Investigation
- Threatens to disable payment terminals
MegaShop learns about the attack not from its own monitoring, but from the bank — 22 days after the skimmer became active.
Analysis: What Went Wrong
| Vulnerability | Impact | Prevention |
|---|---|---|
| Staging with production data | 45,000 records leaked | Data anonymization on staging |
| Default admin passwords on staging | Attack entry point | Strong passwords + MFA everywhere |
| Shared SSH key | Lateral movement | Separate keys per environment |
| No file integrity monitoring | Skimmer undetected for 22 days | FIM + CSP + SOC |
| No staging/production segmentation | Full access from one point | Environment isolation |
| Outdated plugin with RCE | Staging exploit | Regular updates + vulnerability scanning |
Consequences and Costs
Financial (total ~EUR 500,000):
- PCI Forensic Investigation: EUR 42,000
- PCI DSS fines: EUR 95,000
- Chargebacks: EUR 75,000
- Notification of 45,000 customers: EUR 21,000
- Supervisory authority fine (GDPR): EUR 120,000
- Lost revenue (3 months reduced sales): EUR 140,000
Operational:
- 2 weeks of emergency operations
- Complete server infrastructure replacement
- Migration to payment tokenization
- Implementation of 24/7 security monitoring
Reputational:
- 35% of customers did not return after the incident
- Negative media and social media coverage
- Loss of business partner trust
Cybersecurity for Your Industry
Learn more about cybersecurity in your industry:
