چکیده

آسیب‌پذیری در SQLite ناشی از یک خطای برش عدد صحیح (Integer Truncation) هنگام پردازش کوئری‌های تجمیعی با تعداد بسیار زیاد ارجاعات ستونی است. زمانی که تعداد ستون‌های پردازش‌شده در یک عبارت تجمیعی از مقدار 32,767 فراتر رود، مقدار ایندکس از یک عدد 32 بیتی به یک مقدار 16 بیتی علامت‌دار برش می‌خورد و به مقدار منفی تبدیل می‌شود. این وضعیت باعث بروز دسترسی خارج از محدوده (Out-of-Bounds Read/Write)، سرریز بافر هیپ (Heap Buffer Overflow) و در نهایت خرابی حافظه (Memory Corruption) می‌گردد. این آسیب‌پذیری در نسخه‌های پیش از 3.50.2 وجود دارد و در برخی سناریوها می‌تواند زمینه اجرای کد از راه دور (RCE) را فراهم کند.

توضیحات

آسیب‌پذیری CVE‑2025‑6965 ناشی از یک خطای برش عدد صحیح (Integer Truncation) مطابق با CWE‑197 در SQLite (کتابخانه پایگاه‌داده SQLite Database Engine) است که هنگام پردازش کوئری‌های تجمیعی (Aggregate Queries) شامل تعداد بسیار زیاد ارجاعات ستونی متمایز (Distinct Column References) رخ می‌دهد.

در این فرآیند، تابع ‎findOrCreateAggInfoColumn‎ مقدار ایندکس ستون را از تابع ‎addAggInfoColumn‎ به‌صورت عدد صحیح 32 بیتی دریافت کرده و سپس آن را به عدد صحیح 16 بیتی علامت‌دار تبدیل می‌کند. زمانی که تعداد ارجاعات ستونی از مقدار حداکثر 32,767 فراتر رود، این تبدیل باعث ایجاد ایندکس منفی می‌شود.

در نسخه‌های دیباگ (Debug Builds)، این مقدار نامعتبر موجب فعال شدن بررسی‌های Assertion و توقف اجرای برنامه می‌شود. در نسخه‌های غیردیباگ، این ایندکس منفی در عملیات دسترسی به آرایه ‎pAggInfo->aCol‎ استفاده می‌شود و در توابعی مانند ‎sqlite3ExprCodeTarget‎ منجر به خواندن خارج از محدوده (Out‑of‑Bounds Read) و تولید دستورات نامعتبر ماشین مجازی SQLite یا VDBE (Virtual Database Engine Bytecode Instructions) می‌گردد. علاوه براین، در تابع ‎agginfoPersistExprCb‎ ابتدا خواندن خارج از محدوده و سپس نوشتن خارج از محدوده روی ساختار AggInfo رخ می‌دهد که منجر به خرابی حافظه هیپ (Heap Memory Corruption / Heap Buffer Overflow) و در نتیجه امکان اجرای کد از راه دور (RCE) می‌شود. به عبارت دیگر،AggInfo شامل داده‌ها و pointer‌هایی است که به توابع تجمعی یا به ساختارهای اجرایی مرتبط اشاره می‌کنند. اگر Overflow بتواند یکی از این pointerها را با مقداری تحت کنترل مهاجم بازنویسی کند، وقتی SQLite بعداً آن pointer را برای فراخوانی callback یا رسیدگی به یک expression استفاده کند، جریان برنامه به آدرس دلخواه مهاجم می‌پرد — این همان «کنترل pointer تابع» است که می‌تواند به اجرای کد دلخواه منجر شود.

پیامدهای امنیتی این آسیب پذیری شامل محرمانگی با افشای جزئی داده ها، یکپارچگی با تغییر داده‌ها به دلیل نوشتن خارج از محدوده و در دسترس پذیری با ایجاد کرش یا عملکرد غیرقابل پیش‌بینی است.

فرآیند بهره‌برداری قابل خودکارسازی است. مهاجم می‌تواند با ایجاد کوئری‌های تجمیعی دارای بیش از 32,767 ارجاع ستونی، ایجاد جدول های عریض (Wide Tables)، استفاده از تعداد زیاد نام‌های مستعار جدول (Table Aliases) و تولید عبارات پیچیده HAVING و CASE WHEN، مقدار ایندکس ستونی را وارد محدوده منفی کند. این عملکرد باعث فعال‌شدن مسیرهای خرابی حافظه در اجرای SQLite می‌شود.

کد اثبات مفهومی (PoC) به‌صورت عمومی منتشر شده است که نشان می‌دهد چگونه برش عدد صحیح هنگام تبدیل ایندکس از 32 بیت به 16 بیت موجب انحراف ایندکس، ایجاد Heap Buffer Overflow و در نهایت Memory Corruption می‌شود. این PoC با ایجاد کوئری‌های بسیار بزرگ شامل aliasهای متعدد و عبارت‌های گسترده HAVING و CASE، مسیر بهره برداری را با جزئیات قابل تکرار نمایش می‌دهد. این آسیب‌پذیری در تمامی نسخه‌های پیش از SQLite 3.50.2 وجود داشته و در نسخه 3.50.2 به‌طور کامل پچ شده است.

CVSS

Score Severity Version Vector String
7.2 HIGH 4.0 CVSS:4.0/AV:N/AC:H/AT:P/PR:L/UI:N/VC:L/VI:H/VA:L/SC:L/SI:H/
SA:L/S:N/AU:N/R:U/V:D/RE:L/U:Green

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

Versions Product
affected from 0 before 3.50.2 SQLite

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

Versions Product
3.50.2 SQLite

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

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

Approx. Usage in .ir Domain via Google

(Total Pages)

Search Query (Dork) Product
152,000 site:.ir “SQLite” SQLite

نتیجه گیری

این آسیب‌پذیری با شدت بالا در SQLite، امکان خرابی حافظه و اجرای کد از راه دور (RCE) را از طریق برش ایندکس در کوئری‌های تجمعی بزرگ فراهم می کند. در محیط‌هایی که SQLite به‌صورت جاسازی‌شده استفاده می‌شود، این ضعف می‌تواند منجر به افشای داده‌ها، دستکاری اطلاعات و کرش سیستم گردد. با توجه به انتشار پچ امنیتی، وجود PoC عمومی و تأثیر بر محصولات گسترده، اجرای فوری اقدامات زیر برای جلوگیری از بهره‌برداری و کاهش سطح ریسک ضروری است:

  • به‌روزرسانی فوری: SQLite را به نسخه 3.50.2 یا بالاتر به روزرسانی کنید. این اقدام، مؤثرترین و قطعی‌ترین راهکار برای رفع آسیب‌پذیری است و باید در اولویت قرار گیرد. سایر اقدامات نقش مکمل را دارند و می‌توانند به کاهش ریسک این آسیب پذیری و مقابله با حملات مشابه کمک کنند.
  • اعتبارسنجی و محدودسازی کوئری‌ها: در لایه اپلیکیشن، از ORMها (Object-Relational Mapping) یا درایورهای SQLite برای محدود کردن پیچیدگی کوئری‌ها (مانند حداکثر تعداد ستون‌ها) استفاده کنید و ورودی‌های کاربر را با کوئری های آماده (prepared statements) پاکسازی نمایید.
  • کنترل دسترسی و اصل حداقل دسترسی: دسترسی به اجرای کوئری‌های SQL را بر اساس اصل حداقل دسترسی محدود سازید و از ویژگی‌های لیست کنترل دسترسی (ACL) در اپ‌ها برای جلوگیری از کوئری‌های پیچیده بهره ببرید.
  • نظارت و ثبت لاگ: از ابزارهای مانیتورینگ پایگاه داده مانند SQLite Analyzer یا Prometheus برای شناسایی الگوهای مشکوک در کوئری‌ها استفاده کنید. همچنین با فعال‌سازی مکانیزم‌های ثبت لاگ سطح بالا در اپلیکیشن یا درایور SQLite (مانند sqlite3_trace_v2 یا لاگ‌های توسعه‌ای مشابه VERBOSE)، اجرای کوئری‌های پیچیده و تلاش‌های احتمالی برای ایجاد سرریز قابل شناسایی و هشداردهی خواهد بود.
  • ایزوله‌سازی و کنترل شبکه: SQLite را در محیط‌های ایزوله مانند Docker یا محیط ایزوله مستقر کنید و دسترسی به فایل‌های پایگاه داده را با SELinux (سیستم امنیت اجباری لینوکس) یا AppArmor محدود سازید.
  • تست و ارزیابی امنیتی: اپلیکیشن‌ها را با ابزارهای اسکن بررسی کنید تا سناریوهای overflow شناسایی شود. همچنین، از تکنیک Fuzzing (تست ورودی‌های تصادفی برای شناسایی ضعف‌ها) برای کوئری‌های SQL استفاده نمایید و تست‌های نفوذ منظم (Penetration Testing) انجام دهید.
  • آموزش و آگاهی: تیم‌های توسعه را در مورد ریسک‌های برش عدد صحیح (Integer Truncation) در SQLite و اهمیت محدودسازی کوئری‌ها آموزش دهید.

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

امکان استفاده در تاکتیک های Mitre Attack

Initial Access (TA0001)

در این سناریو نقطه ورود مستقل وجود ندارد؛ مهاجم تنها زمانی می‌تواند کوئری مخرب ارسال کند که اپلیکیشن میزبان SQLite ورودی کاربر را بدون محدودیت به موتور کوئری پاس دهد. بنابراین ورود اولیه معمولاً از طریق اینترفیس اپلیکیشن API، فرم وب یا endpoint داخلی انجام می‌شود.

Execution (TA0002)

در مرحله اجرا، آسیب‌پذیری با دست‌کاری ساختار AggInfo منجر به Heap Buffer Overflow می‌شود و VDBE هنگام فراخوانی callbackها یا پردازش expressionها روی pointerهای خراب‌شده می رود. این وضعیت می‌تواند اجرای ROP chain یا اجرای توابع کتابخانه‌ای را فراهم کند.

Privilege Escalation (TA0004)

اگر SQLite در یک پردازه با سطح دسترسی بالا اجرا شود مثلاً daemon با مجوزهای سیستمی، اپلیکیشن privileged یا فرایند مدیریت داده، اجرای کد از طریق overflow می‌تواند منجر به ارتقای سطح دسترسی در همان پردازه شود.

Defense Evasion (TA0005)

جریان اجرای کد از طریق pointerهای خراب‌شده معمولاً بدون هشدارهای معمول AV/EDR رخ می‌دهد، چون از مسیر اجرای مشروع VDBE استفاده می‌کند و به‌صورت طبیعی شبیه یک فراخوانی داخلی SQLite است.

Discovery (TA0007)

مهاجم پس از دستیابی به اجرای کد، می‌تواند از context پردازه SQLite برای جمع‌آوری اطلاعات محلی استفاده کند (مانند مسیر فایل‌ها، ساختار دیتابیس، فایل‌های پیکربندی اپلیکیشن).

Lateral Movement (TA0008)

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

Collection (TA0009)

پس از دستیابی به اجرای کد، مهاجم می‌تواند محتویات جداول، فایل‌های مرتبط با دیتابیس، لاگ‌ها و حافظه پردازه را جمع‌آوری کند.

Exfiltration (TA0010)

داده‌های استخراج‌شده می‌توانند از طریق کانال‌های معمول اپلیکیشن، شبکه داخلی، یا حتی callbackهای API خارج شوند.

Impact (TA0040)

نتیجه نهایی این ضعف اجرای کد دلخواه در پردازه SQLite، خراب‌کردن داده‌ها، تخریب فیزیکی دیتابیس، حذف رکوردها، تزریق داده مخرب، و در سناریوهای بدتر تصاحب کامل اپلیکیشن میزبان است. مهاجم می‌تواند با corruption هدفمند، DB را از کار بیندازد یا جریان پردازش را مختل کند.

منابع

  1. https://www.cve.org/CVERecord?id=CVE-2025-6965
  2. https://www.cvedetails.com/cve/CVE-2025-6965/
  3. https://www.sqlite.org/src/info/5508b56fd24016c13981ec280ecdd833007c9d8dd595edb295b984c2b487b5c8
  4. https://vulmon.com/vulnerabilitydetails?qid=CVE-2025-6965
  5. https://vuldb.com/?id.316412
  6. http://seclists.org/fulldisclosure/2025/Sep/57
  7. http://seclists.org/fulldisclosure/2025/Sep/56
  8. http://seclists.org/fulldisclosure/2025/Sep/53
  9. http://seclists.org/fulldisclosure/2025/Sep/58
  10. http://seclists.org/fulldisclosure/2025/Sep/49
  11. http://www.openwall.com/lists/oss-security/2025/09/06/1
  12. https://github.com/google/security-research/security/advisories/GHSA-qj7j-3jp8-8ccv
  13. https://nvd.nist.gov/vuln/detail/CVE-2025-6965
  14. https://cwe.mitre.org/data/definitions/197.html

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

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *