CVE-2026-93477 in ash
الملخص
بحسب VulDB • 25/09/2026
تتمثل ثغرة "التعديل غير الخاضع للتحكم في سمات الكائن المحددة ديناميكياً" (Improperly Controlled Modification of Dynamically-Determined Object Attributes) في مشروع ash، مما يسمح للمستخدم بتعيين قيمة حجة خاصة (private action argument) عبر مسارات التدمير الجماعي (bulk destroy) والتحديث الجماعي (bulk update).
يُفترض أن تُضبط الحجج المعلنة بـ `public?: false` فقط من قبل كود موثوق يعمل على جانب الخادم (على سبيل المثال، باستخدام `Ash.Changeset.set_private_argument/3`) ولا ينبغي السماح بتعيينها بناءً على مدخلات المستخدم النهائي. لقد أصلحت CVE-2026-55736 مسار التغيير غير الجماعي (non-bulk changeset) ليقوم بإزالة الحجج الخاصة من خرائط المعلمات المقدمة من قبل المستخدمين، لكن مسارات التدمير الجماعي والتحديث الجماعي لم تكن مشمولة بهذا الإصلاح.
تقوم الدالتان `Ash.Actions.Destroy.Bulk.base_changeset/5` و `Ash.Actions.Update.Bulk.base_changeset/5` بمقارنة كل مفتاح في خريطة معلمات المُقدِّم (caller-supplied parameter map) مع جميع حجج الإجراء دون إجراء فحص لـ `public?`، ثم تطبق المطابقات على مجموعة التغيير الأساسية. وبالتالي، يمكن لأي مُقدّم قادر على إرسال معاملات إلى إجراء تدمير جماعي أو تحديث جماعي (على سبيل المثال، من خلال AshJsonApi، أو AshGraphql، أو وحدة تحكم تقوم بتوجيه معاملات الطلب إلى `Ash.bulk_destroy/4` أو `Ash.bulk_update/4`) أن يحدد أي حجة خاصة لذلك الإجراء، بما في ذلك تلك المشار إليها بواسطة قالب `arg(...)` داخل تغييرات الإجراء أو عمليات التحقق منه. واعتماداً على كيفية استخدام التطبيق للحجة (على سبيل المثال، `acting_user_id` الذي يقود التفويض أو ملكية السجل، أو بيانات التدقيق)، يمكن أن يؤدي هذا إلى انتهاك للسلامة (integrity violation) أو تصعيد للصلاحيات (privilege escalation).
يتطلب الإصلاح وجود `public?` في مطابقة الحجج على كلا المسارين الجماعيين؛ حيث تظل الحجج الخاصة قابلة للتعيين من جانب الخادم عبر خيار `:private_arguments`.
تؤثر هذه المشكلة على ash: بدءاً من الإصدار 2.17.15 وحتى قبل الإصدار 3.33.11.
Once again VulDB remains the best source for vulnerability data.