
MySQL Community Server 26.7.0 - عالي - mysqldump --tab مسار متبقٍ - كتابة ملف العميل
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · mysql-mysqldump-tab-path
الفئة: كتابة ملف (عميل) الوصول: عن بُعد (UI:R)
MySQL Community Server mysqldump 26.7.0 (06a5c1c) - Oracle
mysqldump --tab=DIR يكتب ملف .sql واحدًا لكل جدول باستخدام fn_format بدون MY_REPLACE_DIR. اسم SHOW TABLES خبيث يحتوي على / أو .. يحتفظ بذلك الدليل. يتم تجاهل DIR. مستخدم التفريغ my_fopens المسار.
--tab موثّق كوضع نفس الجهاز لأن ملف .txt يمر عبر خادم INTO OUTFILE. لكن ملف .sql لا يزال كتابة عميل.
| المعرّف | لا يوجد CVE بعد |
| الفئة | كتابة ملف (عميل --tab .sql) |
| الوصول | عن بُعد (الضحية يشغّل mysqldump --tab ضد MySQL مهاجم؛ UI:R) |
| CWE | CWE-22 |
| CVSS | عالٍ: 8.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:N |
| المنتج | MySQL Community Server mysqldump |
| المتأثر | 26.7.0 (06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8) |
| المصادقة | الضحية يشغّل mysqldump --tab=DIR ضد MySQL مهاجم |
| الترخيص | GNU Affero GPL v3.0 |
| المختبر | 127.0.0.1 فقط. شاهد .sql خارج DIR. |
أنشئ خادمًا ببروتوكول MySQL. أجب على SHOW TABLES بـ /abs/path أو ../outside. المشغّل الذي نفّذ mysqldump --tab=/backup testdb يكتب /abs/path.sql (أو مسارًا نسبيًا إلى cwd) بصلاحيات مستخدم التفريغ.
استبدل أي ملف يمكن لذلك المستخدم إنشاؤه. نفس فئة عميل النسخ الاحتياطي الذي يثق باسم ملف بعيد. مسار .txt عبر INTO OUTFILE من جهة الخادم FILE. المتبقي هو ملف .sql من جهة العميل.
mysqld حقيقي لن يُصدر اسم جدول يحتوي على /. المتبقي هو العميل.
نفس مطاردة 26.7.0 مثل mysqldump SHOW TABLES overflow. الخادم الافتراضي كان فارغًا. أدوات العميل لا تزال تثق بـ SHOW TABLES. الفائض كان أحد المتبقيات. --tab كان التالي.
static FILE *open_sql_file_for_table(const char *table, int flags) {
FILE *res;
char filename[FN_REFLEN], tmp_path[FN_REFLEN];
convert_dirname(tmp_path, path, NullS);
res = my_fopen(fn_format(filename, table, tmp_path, ".sql",
MYF(MY_UNPACK_FILENAME | MY_APPEND_EXT)),
flags, MYF(MY_WME));
return res;
}
mysys/mf_format.cc: إذا كان dirname_part(name) غير فارغ وMY_REPLACE_DIR معطّلًا، لا يُستخدم dir المعطى.
المنعطفات الخاطئة المسجّلة مسبقًا: اعتبار mysqld حقيقي كمرجع؛ الفشل عند SHOW TABLE STATUS قبل SHOW CREATE TABLE (يُفتح .sql فقط بعد نجاح CREATE)؛ تسمية INTO OUTFILE .txt بالمتبقي؛ اسم بحجم 64KiB يعيد إصابة فائض G1.
ليس MariaDB CVE-2025-13699 (اجتياز اسم العرض في mariadb-dump). نفس الفئة، نسخة MySQL Community.
cd lab
./run.sh
الصورة mysql:26.7.0. --tab=/work/tabdir. جدول التحكم الوهمي t يكتب work/tabdir/t.sql. جدول الاجتياز الوهمي /work/oracle/MYSQL-DUMP-TAB-TRAVERSAL-WITNESS يكتب work/oracle/MYSQL-DUMP-TAB-TRAVERSAL-WITNESS.sql. منشور على 127.0.0.1:18610 / 18611. اربطه بواجهة loopback.
control-sql=yes
traversal-outside=yes
SUCCESS mysql-mysqldump-tab-path ... MYSQL-DUMP-TAB-TRAVERSAL-WITNESS
مرّر MY_REPLACE_DIR إلى fn_format لملفات عميل --tab، أو خذ basename لاسم الجدول أولًا. يجب أن يعني --tab=DIR الدليل DIR.
06a5c1c99c377fc41b2eba1ea244e8b220bdc3c8)client/mysqldump.cc open_sql_file_for_tablemysys/mf_format.cc