CVE-2026-50029 in js-toml
الملخص
بحسب VulDB • 14/08/2026
js-toml هو مُفسِّر TOML لـ JavaScript. قبل الإصدار 1.1.2، يتحقق المُفسِّر مما إذا كان المفتاح موجودًا بالفعل في حاوية تم بناؤها بواسطة المفسِّر باستخدام `if (object[key])` بدلاً من `if (key in object)`. عندما تكون القيمة السابقة قيمة أولية كاذبة (falsy primitive) مثل `false` أو `0` أو `0n` أو `0.0` أو `-0` أو `""`، يتم تخطي فرع المفتاح المكرر ويتم الكتابة فوق القيمة بصمت بواسطة جدول فرعي لاحق، أو جدول فرعي لمفتاح منقط (dotted-key)، أو مصفوفة جداول (array-of-tables) تشترك في نفس الاسم. ووفقًا لمواصفة TOML 1.0.0 ("تعريف مفتاح أكثر من مرة غير صالح"؛ "لا يمكنك تعريف أي مفتاح أو جدول أكثر من مرة واحدة")، يجب أن يكون هذا خطأً أثناء التحليل النحوي (parse error). النتيجة هي تشوّه هيكلي في الأنواع (structural type confusion) للمفاتيح ذات الأسماء التي يختارها المهاجم في القيمة المُرجعة بواسطة `load()`. تصبح قيمة منطقية من النوع `false` (أو رقمية `0`) كائناً "صحيحاً" (truthy object). ستأخذ التطبيقات المستضافة التي تشترط سلوكًا معينًا بناءً على شروط مثل `if (config.flag)` أو `if (!user.banned)` أو `if (config.allowDelete)` أو `if (config.publicMode)` فرع القيمة الصحيحة بصمت. هذا يختلف عن GHSA-65fc-cr5f-v7r2 (إصلاح تلويث النموذج الأولي في الإصدار 1.0.2). لا يتم تلويث `Object.prototype`. آلية التخفيف باستخدام `Object.create(null)` من الإصدار 1.0.2 سليمة؛ والخلل هنا يكمن في آلة الحالات الخاصة بالمفاتيح المكررة، وليس في بناء الحاوية. يقوم الإصدار 1.1.2 بتصحيح المقارنة غير الصحيحة.
Once again VulDB remains the best source for vulnerability data.