خانه » API1:2023 – Broken Object Level Authorization (BOLA)؛ خطرناک‌ترین آسیب‌پذیری APIها
مقالات

API1:2023 – Broken Object Level Authorization (BOLA)؛ خطرناک‌ترین آسیب‌پذیری APIها

مقدمه

در میان تمامی آسیب‌پذیری‌های معرفی‌شده در OWASP API Security Top 10 2023، آسیب‌پذیری Broken Object Level Authorization یا BOLA در رتبه نخست قرار گرفته است. دلیل این موضوع نیز بسیار ساده است؛ این آسیب‌پذیری مستقیماً به کنترل دسترسی کاربران مربوط می‌شود و در صورت وجود، مهاجم می‌تواند به داده‌های سایر کاربران دسترسی پیدا کند.

بسیاری از نشت‌های اطلاعاتی بزرگ در سال‌های اخیر نه به دلیل ضعف رمزنگاری یا حملات پیچیده، بلکه به دلیل وجود نقص BOLA در APIها رخ داده‌اند.

BOLA چیست؟

BOLA زمانی رخ می‌دهد که API هنگام دسترسی به یک شیء (Object) تنها وجود آن را بررسی کند اما مالکیت یا مجوز دسترسی کاربر به آن شیء را اعتبارسنجی نکند.

به بیان ساده:

سیستم بررسی می‌کند که سفارش شماره 1001 وجود دارد، اما بررسی نمی‌کند آیا این سفارش متعلق به کاربر فعلی است یا خیر.

مثال ساده

فرض کنید کاربر وارد حساب خود شده است و درخواست زیر را ارسال می‌کند:

GET /api/orders/1001
Authorization: Bearer eyJ...

پاسخ:

{
  "id": 1001,
  "customer": "Ali",
  "amount": 1200
}

حال مهاجم شناسه را تغییر می‌دهد:

GET /api/orders/1002
Authorization: Bearer eyJ...

اگر API تنها وجود سفارش را بررسی کند، اطلاعات کاربر دیگری نمایش داده خواهد شد.

چرا BOLA بسیار خطرناک است؟

این آسیب‌پذیری معمولاً منجر به موارد زیر می‌شود:

  • افشای اطلاعات کاربران
  • مشاهده اطلاعات مالی
  • دسترسی به پرونده‌ها و اسناد محرمانه
  • دسترسی به اطلاعات پزشکی
  • دسترسی به داده‌های مشتریان سازمان

در بسیاری از موارد مهاجم حتی نیازی به دور زدن احراز هویت ندارد و تنها با تغییر یک شناسه می‌تواند اطلاعات دیگران را مشاهده کند.

مثال واقعی در سامانه‌های سازمانی

فرض کنید API زیر برای مشاهده نتیجه آزمایش طراحی شده است:

GET /api/results/123456

اگر تنها شناسه قبض بررسی شود و مالکیت آن اعتبارسنجی نشود، هر فردی با حدس یا کشف شناسه‌های معتبر می‌تواند نتایج سایر کاربران را مشاهده کند.

تفاوت BOLA و Broken Authentication

بسیاری از توسعه‌دهندگان این دو را با یکدیگر اشتباه می‌گیرند.

Broken Authentication

مشکل در فرآیند احراز هویت است.

مثال:

  • توکن قابل حدس
  • JWT ناامن
  • Session ضعیف

BOLA

کاربر احراز هویت شده است اما به داده‌ای دسترسی پیدا می‌کند که متعلق به او نیست.

نشانه‌های وجود BOLA

موارد زیر معمولاً هشداردهنده هستند:

  • استفاده از شناسه‌های ترتیبی
  • عدم بررسی مالکیت رکورد
  • نبود Authorization Middleware
  • عدم ثبت رویدادهای دسترسی
  • نمایش داده‌ها صرفاً بر اساس ID

نمونه کد آسیب‌پذیر در Laravel

public function show($id)
{
    return Order::findOrFail($id);
}

در این مثال هر کاربری می‌تواند سفارش هر شناسه‌ای را مشاهده کند.

نمونه کد ایمن

public function show($id)
{
    return auth()->user()
        ->orders()
        ->findOrFail($id);
}

اکنون فقط سفارش‌های متعلق به کاربر فعلی قابل مشاهده هستند.

استفاده از Policy در Laravel

یکی از بهترین روش‌ها استفاده از Policy است.

public function view(User $user, Order $order)
{
    return $order->user_id === $user->id;
}

و در Controller:

$this->authorize('view', $order);

این روش احتمال بروز خطا را به شدت کاهش می‌دهد.

روش‌های شناسایی BOLA

تست دستی

شناسه‌های مختلف را در درخواست‌ها تغییر دهید.

مثال:

/api/orders/1001
/api/orders/1002
/api/orders/1003

اگر اطلاعات سایر کاربران نمایش داده شود، آسیب‌پذیری وجود دارد.

تست نفوذ API

ابزارهای زیر کمک می‌کنند:

  • Burp Suite
  • OWASP ZAP
  • Postman
  • Insomnia

روش‌های جلوگیری از BOLA

1. اعتبارسنجی مالکیت شیء

همیشه مالکیت داده را بررسی کنید.

2. استفاده از Authorization Layer

تمام Endpointها باید دارای کنترل دسترسی باشند.

3. استفاده از UUID

به جای شناسه‌های ترتیبی:

1001
1002
1003

از:

7a5ef4d2-f67f-4eb6-9f09-2f00d2ea7c9a

استفاده کنید.

البته UUID به تنهایی کافی نیست و باید همراه با کنترل دسترسی استفاده شود.

4. ثبت رویدادهای امنیتی

تمام دسترسی‌های غیرمجاز باید ثبت و مانیتور شوند.

5. تست امنیتی در CI/CD

قبل از انتشار نسخه جدید، تست‌های خودکار امنیتی اجرا شوند.

چک‌لیست سریع توسعه‌دهندگان

  • آیا مالکیت رکورد بررسی می‌شود؟
  • آیا از Policy یا Authorization استفاده شده است؟
  • آیا کاربران فقط داده‌های خود را مشاهده می‌کنند؟
  • آیا لاگ دسترسی ثبت می‌شود؟
  • آیا تست امنیتی برای تغییر شناسه انجام شده است؟

جمع‌بندی

Broken Object Level Authorization خطرناک‌ترین آسیب‌پذیری APIها محسوب می‌شود زیرا مستقیماً به داده‌های کاربران دسترسی پیدا می‌کند. هر API که بر اساس شناسه اشیاء عمل می‌کند باید علاوه بر احراز هویت، مالکیت و مجوز دسترسی به آن شیء را نیز بررسی کند. استفاده از Policyها، کنترل دسترسی مبتنی بر نقش و تست‌های امنیتی منظم می‌تواند تا حد زیادی از بروز این آسیب‌پذیری جلوگیری کند.

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم. هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

درباره نویسنده

مهدی منصوری

من مهدی منصوری و کارشناس حوزه نرم افزار و امنیت اطلاعات هستم. کارشناسی ارشد خودم را در رشته امنیت اطلاعات از دانشگاه مالک اشتر تهران گرفتم. هم اکنون در زمینه DevOPS مشغول هستم. و در زمان های ممکن در این سایت و چند سایت دیگه مطلب می گذارم

افزودن نظر

برای ارسال نظر کلیک کنید