آسیب‌پذیری‌ای در Bitcoin core که امکان چند برابر کردن ارز را به ارزکاوان می‌دهد

یک آسیب‌پذیری منع سرویس و یک آسیب‌پذیری inflation (چند برابر کردن ارز) در Bitcoin Core وجود داشت که با به‌روزرسانی‌های اخیر برطرف شد (CVE-2018-17144).

 آسیب‌پذیری‌ای در Bitcoin core که امکان چند برابر کردن ارز را به ارزکاوان می‌دهد

یک آسیب‌پذیری منع سرویس و یک  آسیب‌پذیری inflation (چند برابر کردن ارز) در Bitcoin Core وجود داشت که با به‌روزرسانی‌های اخیر برطرف شد (CVE-2018-17144). در سیستم بیت‌کوین، باید چک شود که هر خروجی تراکنش (transaction output) تنها یک بار مصرف شود. مشکلی که در این چک کردن وجود داشت، عامل ایجاد این آسیب‌پذیری‌ها بود.

Bitcoin Core معروف‌ترین کلاینت بیت‌کوین است که از روی نسخه کلاینت اصلی مبدع بیت‌کوین، ساتوشی ناکاموتو (Satoshi Nakamoto) توسعه یافته است.

 

جزئیات

در هر تراکنش بیت‌کوین، تعدادی ورودی و خروجی وجود دارد. اگر شما بخواهید طی تراکنشی برای یک یا چند نفر پول واریز کنید، باید از یک یا چند تراکنش که به حساب شما واریز شده اند استفاده کنید بنابراین هر تراکنش دارای چند ورودی و خروجی است. هر خروجی می‌تواند ورودی یک تراکنش دیگر باشد. برای آنکه هر کس بتواند به اندازه دارایی خود خرج کند، باید چک شود که یک خروجی بیش از یک بار مصرف نشود.

 

ورودی و خروجی تراکنش در بیت‌کوین.

طرح: Wikimedia

 

در نسخه 0.14 یک بهینه‌سازی برای افزایش سرعت انجام شده بود که این چک را حذف می‌کرد، اما در عوض تنها «اظهار» (assert) می‌کرد که چنین شرایطی نباید اتفاق بیفتد. وقتی شرط معین شده در یک assert نقض شود، برنامه crash می‌کند. بنابراین امکان ایجاد شرایط منع سرویس در این نسخه وجود داشت.

در نسخه 0.15 تغییر کوچکی در اظهار فوق اتفاق افتاد: به جای اینکه اظهار شود که «یک خروجی که قرار است مصرف شود قبلا مصرف نشده باشد»، اظهار می‌شود که «خروجی مذکور باید وجود داشته باشد».

بنابراین اگر یک خروجی در یک بلاک ایجاد شده و در همان بلاک نیز دوبار مصرف شود، assertion فوق باعث توقف برنامه می‌شود (زیرا هنوز خروجی ثبت نشده)، اما اگر شما در بلاک‌های قبلی خروجی‌ای تولید کرده باشید، به عنوان یک خروجی موجود ثبت شده است و هنگامی که در بلاک‌های بعدی آن را چند بار مصرف کنید، assertion فوق می‌بیند که شرط موجود بودن خروجی برقرار است و در نتیجه برنامه را متوقف نمی‌کند. در نتیجه یک ارزکاو می‌تواند مبلغی را یک بار ایجاد کرده و چند بار مصرف کند، یا به عبارتی از هیچ، ارز تولید کند.

تاکنون سوء استفاده‌ای از این آسیب‌پذیری‌ها مشاهده نشده است. نسخه‌های 0.17.0rc4 و 0.16.3 این مشکل را برطرف کرده اند.

 

منابع:

https://bitcoincore.org/en/2018/09/20/notice/

https://en.bitcoin.it/wiki/Transaction

کلمات کلیدی