IDOR in API endpoint access control
This lab demonstrates an IDOR vulnerability in an API system. The application allows users to access any API endpoint and resource by simply changing the endpoint and resource_id parameters without proper authorization checks.
Objective: Access unauthorized API endpoints and resources by manipulating the endpoint and resource_id parameters to view sensitive data.
// Vulnerable: No proper authorization check
$endpoint = $_GET['endpoint'] ?? 'users';
$resource_id = $_GET['resource_id'] ?? '';
// Simulate API resources
$api_resources = [
'users' => [...],
'orders' => [...],
'payments' => [...],
'analytics' => [...]
];
// Direct access without checking if user is authorized
if (isset($api_resources[$endpoint])) {
if ($resource_id) {
// Access specific resource
$api_data = $api_resources[$endpoint][$resource_id];
} else {
// Access all resources in endpoint
$api_data = $api_resources[$endpoint];
}
}
// Example vulnerable usage:
// ?endpoint=users (user data)
// ?endpoint=orders (order data)
// ?endpoint=payments (payment data)
// ?endpoint=analytics (analytics data)
ID: 1 | Data: { "id": 1, "user_id": 1, "order_id": 1, "amount": 99.99, "payment_method": "credit_card", "card_last4": "1234", "status": "success", "created_date": "2024-01-10" }
ID: 2 | Data: { "id": 2, "user_id": 2, "order_id": 2, "amount": 29.99, "payment_method": "paypal", "card_last4": null, "status": "pending", "created_date": "2024-01-12" }
ID: 3 | Data: { "id": 3, "user_id": 3, "order_id": 3, "amount": 299.99, "payment_method": "bank_transfer", "card_last4": null, "status": "success", "created_date": "2024-01-14" }
endpoint, resource_idTry these endpoint values:
users - User dataorders - Order datapayments - Payment dataanalytics - Analytics dataExample URLs:
4.php?endpoint=users4.php?endpoint=orders&resource_id=14.php?endpoint=payments&resource_id=24.php?endpoint=analyticsClick these links to test the vulnerability: