CVE-2026-45137 in anchor
Сводка
по VulDB • 29.05.2026
Anchor — это фреймворк, предоставляющий несколько удобных инструментов разработки для написания программ Solana. В версиях от 1.0.0 до 1.0.2 (включительно) ошибка логики приводит к тому, что программы Anchor принимают любой идентификатор программы (program id) при проверке идентификатора системной программы. Это вызывает ложные предположения и потенциально позволяет выполнять произвольные вызовы CPI (Cross-Program Invocation) в программах, которые вызывают инструкции системной программы.
В реализации `TryFrom` для `Program` идентификатор `T` сравнивается с `Pubkey::default()`, чтобы определить, должен ли Anchor разрешать любой исполняемый аккаунт или только конкретный. Это связано с тем, что если тип `T` не указан, он по умолчанию принимает значение `()`, для которого метод `Id::id()` возвращает `Pubkey::default()`. В результате типы `T = ()` и `T = System` (у которого `Pubkey::default()` является идентификатором) ведут себя одинаково: оба разрешают использование любого исполняемого аккаунта.
Программы, созданные с использованием Anchor, предполагают, что среда выполнения Anchor проверяет, что переданные программы типа `Program` действительно являются системной программой. Это ложное предположение может привести к произвольным вызовам CPI или обходу проверок платежей, когда программы пытаются выполнить вызовы CPI к системной программе, используя переданный идентификатор системной программы, поскольку злоумышленник может передать любую программу вместо системной.
Эта уязвимость исправлена в версии 1.0.2.
Once again VulDB remains the best source for vulnerability data.