آسیبپذیری جدیدی با شناسه CVE-2026-114116 در زبان برنامهنویسی Vyper کشف شده است که میتواند منجر به تغییر غیرقابل شناسایی مقادیر عددی و آدرسها در قراردادهای هوشمند شود.
جزئیات فنی
نسخههای 0.1.0b1 تا 0.1.0b17 و همچنین نسخههای 0.4.1 تا 0.5.0b1 از Vyper تحت تأثیر این نقص قرار دارند. مشکل اصلی در نحوه استفاده از تابع str.splitlines() برای ساخت جدول خطوط منبع (source-line table) نهفته است.
این تابع، کاراکترهایی مانند form feed و U+2028 را به عنوان جداکننده خط در نظر میگیرد؛ در حالی که مفسر Python این کاراکترها را به عنوان شکستگی خط (line break) تشخیص نمیدهد و آنها را نادیده میگیرد. این تفاوت در تفسیر (discrepancy) بین تابع و مفسر، یک شکاف امنیتی ایجاد میکند.
سناریوی حمله
یک مهاجم که امکان ارسال یا مشارکت در کد منبع را دارد، میتواند این کاراکترهای خاص را در بخشهای مختلف مانند comments (توضیحات)، strings (رشتهها) یا حتی در بخشهای مربوط به indentation (تورفتگی) مخفی کند. با این کار، مقادیر عددی، اعشاری یا آدرسها از متنی که به دلیل جابهجایی خطوط (shifted source text) ایجاد شده، خوانده و تایید میشوند. این امر به مهاجم اجازه میدهد تا بدون تغییر ظاهری کد، مقادیر حیاتی را به صورت پنهانی تغییر دهد.