دستهی جدیدی از آسیبپذیریها ممکن است توسط عاملان تهدید مورد استفاده قرار بگیرند تا بدافزارهایی با ظاهر فریبنده طوری تزریق شوند که از نظر موقعیتی مجاز باشد اما منطقی که توسط کد منبع تعریف شده است را تغییر بدهند و به طور کارآمد، دری را به سمت ریسکهای First-Party و زنجیرهی تأمین باز کنند.
نیکولاس باچر و راس اندرسون، پژوهشگران دانشگاه کمبریج در یک مقاله که به تازگی منتشر شده است، گفتند: «این تکنیک که حملات Trojan Source نام گرفته، با بهرهگیری از ظرافتهایی در استانداردهای رمزگذاری متن، مثل Unicode، کد منبعی را ایجاد میکند که Tokenهای این تکنیک بهطور منطقی با ترتیبی متفاوت از ترتیب نمایش آنها کدگذاری میشوند. این امر به آسیبپذیریهایی منجر میشود که نمیتوان مستقیماً توسط بررسیکنندههای کد انسانی قابل شناسایی نیست.»
آسیبپذیریهایی که بهعنوان CVE-2021-42574 و CVE-2021-42694 ردیابی شدهاند روی کامپایلرهای تمام زبانهای برنامهنویسی محبوب مثل C، C++، C#، JavaScript، Java، Rust، Go و Python تأثیر میگذارند.
کامپایلرها برنامههایی هستند که کد منبع سطح بالایی را که توسط انسان قابل درک باشد، به کدهای سطح پایینتری ترجمه میکنند، مثل زبان اسمبلی، کد Object یا کد ماشین که بتوان آن را توسط سیستم عامل اجرا نمود.
این مسئله در اصل به الگوریتم دوطرفهی Unicode یا Bidi مربوط است که پشتیبانی را هم برای زبانهای چپ به راست (مثل انگلیسی) و هم زبانهای راست به چپ (مثل فارسی) فراهم میکند و همچنین دارای یک ویژگی به نام Bidirectional Override است که اجازه میدهد کلمات چپ به راست درون جملات راست به چپ یا برعکس نوشته شوند و بدین صورت این امکان را فراهم میکند که متنی با جهت مخالف را درون یک متن طولانی قرار داد.
بااینکه انتظار میرود خروجی یک کامپایلر بهدرستی کد منبعی که برایش فراهم شده است را به کار بگیرد، مغایرتهایی که با وارد کردن حروف Unicode Bidi Override درون Commentها و رشتهها ایجاد میشوند، میتوانند باعث ایجاد شرایطی شوند که کد منبعی ارائه شده از نظر دستوری معتبر و ترتیب نمایش حروف، منطقی را نمایش دهد که از منطق اصلی فاصله داشته باشد.
به عبارت دیگر نحوهی کار حمله این است که کدگذاری فایلهای کد منبع را هدف میگیرد تا آسیبپذیریهای هدفداری را ایجاد نماید، نه اینکه عمداً Bugهایی منطقی را معرفی کند؛ هدف از این کار این است که بهطور بصری ترتیب Tokenهایی را در کد منبع تغییر دهد که هرچند بهطور کاملاً قابل قبولی ارائه شدهاند، کامپایلر را فریب میدهد تا کد را بهشیوهی متفاوتی پردازش نماید و جریان برنامه را بهشدت تغییر دهد؛ مثلاً کاری کند که یک Comment به شکل کد به نظر برسد.
یکی از پژوهشگران گفت: «عملاً ما برنامه A را در برنامه B آناگرام میکنیم. اگر تغییر در منطق آنقدری نامحسوس باشد که در تستهای بعدی شناسایی نشود، یک تهدید میتواند بدون شناسایی شدن، آسیبپذیریهای هدفمندی را معرفی کند.»
پژوهشگران هشدار میدهند که این کدگذاریهای مخرب میتوانند تأثیری جدی روی زنجیرهی تأمین داشته باشند؛ وقتی آسیبپذیریهای نرمافزاری نامرئی به یک نرمافزار متن باز Inject میگردند، به حرکت خود ادامه داده و ممکن است تمام کاربران نرمافزار را آلوده نمایند. خبر بدتر این است که اگر یک مهاجم از هموگلیفها استفاده کند تا عملکردهای موجود در یک بستهی Upstream را مجدداً تعریف نماید و از برنامهی یک قربانی به آنها استناد کند، حملات Trojan Source میتوانند شدیدتر شوند.
یک عامل تهدید میتواند با جایگزین کردن حروف لاتین با حروف مشابهی از خانوادههای Unicode دیگر (مثلاً جایگزین کردن H با H سیریلیک)، یک عملکرد هموگلیف بسازد که ظاهراً شبیه به عملکرد اصلی است اما در حقیقت حاوی کد مخربی باشد که م بدون جلب توجه زیاد، به یک پروژهی متن باز اضافه شود. این مقاله اشاره کرد که وقتی چنین حملهای در مقابل یک عملکرد متداول اعمال شود که از طریق یک Library یا وابستگی ورودی قابلدسترسی باشد، میتواند فاجعهبار گردد.
پژوهشگران بیان کردند: «اینکه آسیبپذیری Trojan Source تقریباً روی همهی زبانهای رایانهای تأثیر میگذارد، باعث میشود فرصت نادری برای مقایسهی پاسخهای بین پلتفرمها و بین Vendorها در سطح سیستم و معتبر از نظر زیست محیطی باشد. ازآنجاییکه با استفاده از این تکنیک میتوان حملات زنجیرهی تأمین قدرتمندی را اجرا کرد، حیاتی است که سازمانهایی که در یک زنجیرهی تأمین نرمافزاری شرکت میکنند سیستمهای دفاعی را اعمال کنند.»