API6:2023 - Unrestricted Access to Sensitive Business Flows چیست
به واسطه این آسیب پذیری مهاجم امکان بهره برداری از عملکرد های مجاز برنامه را برای هدف های غیر مجاز به واسطه قابلیت های برنامه دارد.
مثال:
درخواست POST برای خرید بلیط هواپیما با ارائه جزئیات مسافر:
POST /api/tickets/buy Body: { "passenger_name": "John Doe", "flight_number": "AB123", "departure_date": "2023-07-01" }
کد آسیب پذیر(NET.):
[Route("api/orders")] public class OrderController : ApiController { private readonly IOrderService _orderService; public OrderController(IOrderService orderService) { _orderService = orderService; } [HttpPost] public IHttpActionResult CreateOrder(OrderRequest request) { // Create a new order without proper validation Order order = _orderService.CreateOrder(request); // Return the created order return Ok(order); } [HttpGet] [Route("{orderId}")] public IHttpActionResult GetOrder(string orderId) { // Get the order by ID without proper authorization Order order = _orderService.GetOrder(orderId); // Return the order return Ok(order); } // Other methods... }
پیشگیری (NET.):
[Route("api/orders")] public class OrderController : ApiController { private readonly IOrderService _orderService; public OrderController(IOrderService orderService) { _orderService = orderService; } [HttpPost] [Authorize(Roles = "Admin")] public IHttpActionResult CreateOrder(OrderRequest request) { // Validate the request and create a new order with proper authorization Order order = _orderService.CreateOrder(request); // Return the created order return Ok(order); } [HttpGet] [Route("{orderId}")] [Authorize(Roles = "User")] public IHttpActionResult GetOrder(string orderId) { // Authorize the user's access to the order // Only users with the "User" role can access the order Order order = _orderService.GetOrder(orderId); // Return the order return Ok(order); } // Other methods... }
کد آسیب پذیر (جاوا):
@RestController @RequestMapping("/api/orders") public class OrderController { private final OrderService orderService; public OrderController(OrderService orderService) { this.orderService = orderService; } @PostMapping public ResponseEntity<Order> createOrder(@RequestBody OrderRequest request) { // Create a new order without proper validation Order order = orderService.createOrder(request); // Return the created order return ResponseEntity.ok(order); } @GetMapping("/{orderId}") public ResponseEntity<Order> getOrder(@PathVariable String orderId) { // Get the order by ID without proper authorization Order order = orderService.getOrder(orderId); // Return the order return ResponseEntity.ok(order); } // Other methods... }
پیشگیری (جاوا):
@RestController @RequestMapping("/api/orders") public class OrderController { private final OrderService orderService; public OrderController(OrderService orderService) { this.orderService = orderService; } @PostMapping @PreAuthorize("hasRole('ROLE_ADMIN')") public ResponseEntity<Order> createOrder(@RequestBody OrderRequest request) { // Validate the request and create a new order with proper authorization Order order = orderService.createOrder(request); // Return the created order return ResponseEntity.ok(order); } @GetMapping("/{orderId}") @PreAuthorize("hasRole('ROLE_USER') or hasPermission(#orderId, 'READ')") public ResponseEntity<Order> getOrder(@PathVariable String orderId) { // Authorize the user's access to the order // Only users with ROLE_USER or permission to read the order can access it Order order = orderService.getOrder(orderId); // Return the order return ResponseEntity.ok(order); } // Other methods... }
پیشنهادات کلی جلوگیری:
اجرای مکانیزمهای احراز هویت و اعتبارسنجی کاربران قبل از دسترسی به جریان کسب و کار حساس.
بررسی و اعتبارسنجی دادهها و ورودیهای کاربران به دقت، از جمله بررسی اعتبار تاریخ و فرمتهای ورودی.
اعمال محدودیتها و قوانین منطقی برای دسترسی به جریان کسب و کار حساس.
استفاده از سیستمهای لاگینگ و مانیتورینگ برای آشکارسازی و پیگیری فعالیتهای مشکوک یا نامناسب در جریانهای کسب و کار.
ارائه و استفاده از واسطهها (API Gateways) که قابلیت کنترل و مدیریت دسترسی به جریانهای کسب و کار را فراهم میکنند.