خانه » CVE-2026-33331

CVE-2026-33331

oRPC: Stored XSS in OpenAPI Documentation Generation

توسط Vulnerbyte Alerts
71 بازدید
هشدار سایبری CVE-2026-33331

چکیده

یک آسیب‌پذیری از نوع XSS ذخیره‌شده (Stored XSS) در ابزار oRPC و در فرآیند تولید مستندات OpenAPI شناسایی شده است. در این ضعف امنیتی، داده‌های مربوط به مشخصات OpenAPI (Specification) هنگام تولید صفحه مستندات، از طریق تابع JSON.stringify() بدون انجام خروجی‌سازی مناسب مستقیماً در HTML قرار می‌گیرند. در صورتی که مهاجم بتواند کنترل فیلدهایی از این مشخصات مانند info.description را در اختیار بگیرد، قادر خواهد بود با تزریق داده مخرب، کد JavaScript دلخواه را در مستندات API اجرا کند. این موضوع می‌تواند منجر به افشای اطلاعات حساس و در نهایت سرقت نشست کاربر (Session Hijacking) شود.

توضیحات

آسیب‌پذیری CVE-2026-33331 در ابزار oRPC و به‌طور خاص در فرآیند تولید مستندات OpenAPI ناشی از XSS ذخیره‌شده (Stored Cross-Site Scripting) مطابق با CWE-79 است. oRPC یک فریم‌ورک توسعه API است که امکان ساخت APIهای End-to-End Type Safe و سازگار با OpenAPI Specification (استانداردی برای توصیف ساختار و عملکردهای APIهای REST) را فراهم می‌کند و در این سیستم، پلاگین OpenAPI وظیفه تولید مستندات HTML از مشخصات API را بر عهده دارد. ریشه این ضعف امنیتی در فایل packages/openapi/src/plugins/openapi-reference.ts و در تابع renderDocsHtml() قرار دارد که آبجکت مشخصات OpenAPI را دریافت کرده و آن را مستقیماً در قالب HTML قرار می‌دهد. در این پیاده‌سازی از تابع JSON.stringify() برای تبدیل آبجکت JSON به رشته استفاده شده است؛ اگرچه این تابع ساختار JSON را حفظ می‌کند، اما کاراکترهای حساس HTML مانند < و > از طریق خروجی‌سازی امن (Output Escaping) محافظت نمی‌شوند. در نتیجه، اگر مقدار یک فیلد در مشخصات OpenAPI شامل رشته‌ای مانند </script><script>…</script> باشد، مرورگر هنگام پردازش HTML بلوک اسکریپت را زودتر بسته و اسکریپت مخرب بعدی را اجرا می‌کند.

کد اثبات مفهومی (PoC) عمومی برای این آسیب‌پذیری نشان می‌دهد که مهاجم می‌تواند با تزریق پیلود مخرب در فیلدهایی از مشخصات OpenAPI مانند info.description از context مربوط به JSON خارج شود و کد JavaScript دلخواه خود را در صفحه مستندات اجرا کند. این حمله نیازمند تعامل کاربر (User Interaction) است؛ به این معنا که قربانی باید صفحه مستندات API را مشاهده کند و از آنجا که این یک آسیب‌پذیری  XSS ذخیره‌شده است، پیلود مخرب در ساختار مشخصات API ذخیره می‌شود و هر کاربری که مستندات را مشاهده کند، در معرض اجرای کد قرار می‌گیرد. پیامدهای این حمله می‌تواند شامل سرقت نشست کاربر (Session Hijacking) از طریق دسترسی به کوکی‌های مرورگر، اجرای درخواست‌های API به‌جای کاربر قربانی، تغییر عملکرد رابط مدیریتی مستندات و افشای اطلاعات حساس مربوط به API باشد.

این ضعف امنیتی در نسخه 1.13.9 با اصلاح نحوه سریال‌سازی داده‌ها در HTML و جلوگیری از قرارگیری مستقیم JSON بدون خروجی‌سازی امن پچ شده است.

CVSS

Score Severity Version Vector String
8.2 HIGH 3.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N

لیست محصولات آسیب پذیر

Versions Product
affected at < 1.13.9 orpc

لیست محصولات بروز شده

Versions Product
1.13.9 orpc

استفاده محصول در ایران

در این جدول، تعداد صفحات ایندکس‌شده در گوگل با دامنه .ir که OpenAPI را ذکر کرده اند، ثبت شده است. این داده صرفاً برای برآورد تقریبی حضور محصولات در وب ایران استفاده شده و نمایانگر میزان نصب دقیق و استفاده واقعی نیست.

Approx. Usage in .ir Domain via Google (Total Pages) Search Query (Dork) Product
5,400 site:.ir “OpenAPI” OpenAPI

نتیجه گیری

این آسیب‌پذیری با شدت بالا نشان می‌دهد که حتی در فرآیند تولید مستندات OpenAPI نیز عدم انجام خروجی‌سازی صحیح داده‌ها (Output Escaping) می‌تواند منجر به حملات Cross-Site Scripting (XSS) شود. از آنجا که مستندات API اغلب توسط توسعه‌دهندگان و مدیران مشاهده می‌شود، موفقیت این حمله می‌تواند منجر به سرقت نشست، اجرای درخواست‌های API از طرف قربانی و افشای اطلاعات حساس شود.

برای کاهش ریسک این آسیب‌پذیری و جلوگیری از حملات مشابه، اجرای اقدامات زیر توصیه می‌شود:

  • به‌روزرسانی فوری نرم‌افزار: تمامی پروژه‌هایی که از orpc استفاده می‌کنند باید به نسخه 13.9 یا بالاتر ارتقا داده شوند. این نسخه اصلاحات لازم برای جلوگیری از تزریق اسکریپت در مستندات OpenAPI را اعمال کرده است. این اقدام اصلی‌ترین، ساده‌ترین و مؤثرترین راهکار برای رفع کامل آسیب‌پذیری است و باید در اولویت قرار گیرد.
  • خروجی‌سازی امن داده‌ها: هنگام قرار دادن داده‌های JSON در HTML، کاراکترهای حساس مانند <, >, & باید به‌صورت امن خروجی‌سازی شوند. استفاده از کتابخانه‌هایی مانند serialize-javascript یا devalue برای سریال‌سازی امن توصیه می‌شود.
  • اعتبارسنجی ورودی‌ها: داده‌هایی که در مشخصات OpenAPI وارد می‌شوند، به‌ویژه فیلدهای متنی مانند description باید پیش از ذخیره یا نمایش بررسی و پاک‌سازی شوند.
  • پیاده‌سازی سیاست امنیت محتوا: استفاده از سیاست امنیت محتوا (CSP) می‌تواند اجرای اسکریپت‌های تزریق‌شده را محدود کند و اثر حملات XSS را کاهش دهد.
  • استفاده از فایروال اپلیکیشن وب: استقرار فایروال اپلیکیشن وب (WAF) می‌تواند درخواست‌های حاوی الگوهای رایج XSS را شناسایی و مسدود کند.
  • بازبینی امنیتی کد: توسعه‌دهندگان باید از ابزارهای تحلیل امنیتی مانند OWASP ZAP یا Burp Suite برای شناسایی آسیب‌پذیری‌های XSS در رابط‌های وب و مستندات API استفاده کنند.
  • محدودسازی دسترسی به مستندات API: در صورت امکان، مستندات API نباید به‌صورت عمومی در اینترنت منتشر شوند و دسترسی به آن‌ها باید از طریق احراز هویت یا شبکه داخلی محدود شود.

اجرای ترکیبی این اقدامات، به‌ویژه به‌روزرسانی نرم‌افزار و پیاده‌سازی روش‌های امن سریال‌سازی داده‌ها، می‌تواند ریسک ناشی از این آسیب‌پذیری و سایر حملات مشابه XSS در مستندات API را به‌طور قابل توجهی کاهش دهد.

امکان استفاده در تاکتیک‌های Mitre Attack (در زمان اجرای حمله)

Initial Access (TA0001)
مهاجم برای دسترسی اولیه نیازی به نفوذ پیچیده ندارد. او می‌تواند با ارسال درخواست به نمونه در حال اجرای oRPC، فیلدهای OpenAPI را کنترل کرده و payload مخرب را در مستندات ذخیره کند. شرط موفقیت این مرحله، قابلیت دسترسی مهاجم به endpointهای به‌روزرسانی مشخصات OpenAPI است.

Execution (TA0002)
پس از ذخیره payload، هنگامی که یک کاربر (مدیر یا توسعه‌دهنده) مستندات API را مشاهده می‌کند، کد جاوااسکریپت مخرب در مرورگر او اجرا می‌شود. این اجرا می‌تواند شامل سرقت کوکی‌ها، تغییر محتوای صفحه یا هدایت کاربر به سایت‌های مخرب باشد.

Persistence (TA0003)
با توجه به ماهیت ذخیره‌شده XSS، payload به طور دائم در مستندات باقی می‌ماند. هر بار که کاربر به مستندات مراجعه می‌کند، payload اجرا می‌شود. این یک نوع تداوم دسترسی در سطح جلسه کاربر محسوب می‌شود.

Defense Evasion (TA0005)
مهاجم می‌تواند payload خود را به گونه‌ای رمزگذاری یا encode کند (مانند استفاده از String.fromCharCode) که از قوانین ساده WAF عبور کند. همچنین می‌تواند کد مخرب را در بخش‌های کم‌تر مورد توجه مستندات (مانند توضیحات طولانی) پنهان کند.

Credential Access (TA0006)
هدف اصلی این آسیب‌پذیری دسترسی به اطلاعات احراز هویت است. مهاجم می‌تواند با استفاده از payload XSS، کوکی نشست (session cookie) قربانی را سرقت کرده و از آن برای ورود به سیستم با هویت قربانی استفاده کند. همچنین می‌تواند با رهگیری ورودی‌های فرم، رمز عبور کاربران را استخراج نماید.

Discovery (TA0007)
مهاجم با اجرای کد جاوااسکریپت در مرورگر قربانی، می‌تواند اطلاعاتی درباره محیط قربانی (مانند نوع مرورگر، افزونه‌های نصب‌شده، آدرس IP داخلی) جمع‌آوری کرده و برای مراحل بعدی استفاده کند.

Collection (TA0008)
مهاجم می‌تواند داده‌های حساس قابل مشاهده در صفحه مستندات (مانند کلیدهای API، توکن‌ها، اطلاعات پیکربندی) را جمع‌آوری کرده و برای انتقال آماده کند.

Exfiltration (TA0010)
مهاجم داده‌های جمع‌آوری‌شده (مانند کوکی‌ها یا توکن‌ها) را با ارسال یک درخواست HTTP به سرور تحت کنترل خود (از طریق یک تصویر مخفی یا درخواست AJAX) از محیط هدف خارج می‌کند.

Impact (TA0040)
بهره‌برداری موفق از این آسیب‌پذیری می‌تواند منجر به نقض محرمانگی (Confidentiality) و یکپارچگی (Integrity) اطلاعات شود. مهاجم می‌تواند با سرقت کوکی نشست، جلسه کاربر را ربوده و به داده‌های حساس دسترسی یابد. در موارد شدیدتر، مهاجم می‌تواند با تغییر محتوای مستندات، اطلاعات نادرست را به کاربران القا کرده یا با هدایت کاربران به سایت‌های فیشینگ، اعتماد آنها را از بین ببرد. این امر می‌تواند منجر به از دست رفتن اعتبار برند و نقض قوانین حریم خصوصی شود.

منابع

  1. https://www.cve.org/CVERecord?id=CVE-2026-33331
  2. https://www.cvedetails.com/cve/CVE-2026-33331/
  3. https://github.com/middleapi/orpc/security/advisories/GHSA-7f6v-3gx7-27q8
  4. https://vulmon.com/vulnerabilitydetails?qid=CVE-2026-33331
  5. https://vuldb.com/vuln/352866
  6. https://github.com/middleapi/orpc/commit/4f0efa8a1d3fa8e8317a4b03cc3945a5dfd68add
  7. https://github.com/middleapi/orpc/releases/tag/v1.13.9
  8. https://cwe.mitre.org/data/definitions/79.html

همچنین ممکن است دوست داشته باشید

پیام بگذارید