3.1 KiB
Improper Inventory Management (API9:2023)
Due to the lack of management of API versions, as well as the list of features and case-by-case functions for all functions, it is possible for an attacker to use different functions in different versions of the application.
- Example
GET request to get the list of available API versions:
GET /api/versions
Non-compliant code (.NET)
[ApiController]
[Route("api/inventory")]
public class InventoryController : ControllerBase
{
private readonly IInventoryService _inventoryService;
public InventoryController(IInventoryService inventoryService)
{
_inventoryService = inventoryService;
}
// GET api/inventory/{productId}
[HttpGet("{productId}")]
public IActionResult GetProductInventory(int productId)
{
// Fetch inventory data directly from the database
var inventory = _inventoryService.GetInventoryByProductId(productId);
return Ok(inventory);
}
// POST api/inventory
[HttpPost]
public IActionResult UpdateProductInventory(InventoryModel inventory)
{
// Update inventory directly in the database
_inventoryService.UpdateInventory(inventory);
return Ok();
}
// Other methods...
}
Compliant code (.NET)
[ApiController]
[Route("api/inventory")]
public class InventoryController : ControllerBase
{
private readonly IInventoryService _inventoryService;
public InventoryController(IInventoryService inventoryService)
{
_inventoryService = inventoryService;
}
// GET api/inventory/{productId}
[HttpGet("{productId}")]
public IActionResult GetProductInventory(int productId)
{
// Fetch inventory data through the inventory service
var inventory = _inventoryService.GetProductInventory(productId);
if (inventory == null)
return NotFound();
return Ok(inventory);
}
// POST api/inventory
[HttpPost]
[Authorize(Roles = "Admin")] // Restrict access to authorized users with the "Admin" role
public IActionResult UpdateProductInventory(InventoryModel inventory)
{
// Update inventory through the inventory service
_inventoryService.UpdateProductInventory(inventory);
return Ok();
}
// Other methods...
}
General prevention suggestions:
-
Complete and detailed documentation for the API, including current and previous versions.
-
Create a version management system that simplifies updating and managing API versions.
-
Introducing a version release policy that includes the time period and support for old versions.
-
Using automated methods to check the API version used by customers and warn if old versions are being used.
-
Continuous monitoring to detect and fix issues such as outdated API versions and buggy endpoints.
-
Use automation methods to automatically check and update API versions and hosts.
-
Setting update policies for old API versions and not supporting them.