نقایص امنیتی دستور LOAD DATA LOCAL در MySQL

نقصی در دستور load data سیستم مدیریت پایگاه داده MySQL پیدا شده است که به سرور اجازه خواندن فایل از کلاینت و از کلاینت اجازه خواندن فایل از سرور را می‌دهد.

 نقایص امنیتی دستور LOAD DATA LOCAL در MySQL

نقصی در دستور load data سیستم مدیریت پایگاه داده MySQL پیدا شده است که به سرور اجازه خواندن فایل از کلاینت و از کلاینت اجازه خواندن فایل از سرور را می‌دهد.

سیستم مدیریت پایگاه داده MySQL دارای دستوری به نام load data است که با استفاده از آن می‌توان داده‌ها را از یک فایل به داخل یک جدول پایگاه داده بارگذاری کرد. کلاینت می‌تواند با استفاده از این دستور یک فایل را از روی سرور بخواند، اما این دستور گزینه‌ای به نام LOCAL دارد که با استفاده از آن کلاینت می‌تواند یک فایل محلی را درخواست کند. یعنی سرور به جای آن که محتوا را از ماشین خود بخواند، آن را از ماشین کلاینت می‌خواند.

 

حمله سرور به کلاینت

در پیاده‌سازی دستور load data local در سمت کلاینت نقصی وجود دارد که اجازه خواندن فایل دلخواه از روی کلاینت را به سرور می‌دهد. وقتی کلاینت با دستور load data local درخواست می‌کند که سرور یکی از فایلهای محلی را بخواند، سرور می‌تواند آدرس فایلی که درخواست شده را نادیده بگیرد و فایل دلخواه خود را بخواند.

اگر مهاجم موفق شود سروری جعلی راه‌اندازی کند و خود را به جای سرور اصلی مد نظر کلاینت جا بزند، هنگامی که کلاینت دسور load data local را اجرا کند سرور می‌تواند فایل‌ها را از کلاینت بخواند.

 

حمله کلاینت به سرور

در محیط‌های وب معمولاًً سرور وب به عنوان کلاینت به سرور پایگاه داده درخواست می‌فرستد. در این حالت، هکر می‌تواند با ارسال درخواست‌های مخرب به وب‌سایت، باعث شود وب‌سرور دستور load data local را به سرور پایگاه داده بفرستد. بدین شکل، هکر می‌تواند فایل را از روی سرور وب بخواند.

برای حل این مشکل می‌توان فابلیت load data local را غیرفعال کرد. در سمت سرور می‌توان متغیر محیطی local_infile را غیرفعال کرد. در مورد کلاینت، نحوه غیرفعال کردن این قابلیت بستگی دارد به این که از چه کلاینتی استفاده می‌کنید.

 

 

منابع:

https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html

https://gwillem.gitlab.io

کلمات کلیدی