GitHub сигнализира за зловреден код в npm от март 2026 г. Всеки, който изтегля компрометиран пакет от PyPI, Maven, RubyGems, NuGet, Go, crates.io или PHP Composer, не е получавал такова предупреждение, тъй че откриването на зловреден код от страна на GitHub наблюдаваше само една екосистема. Това се промени този месец.
Базата данни за съвети за сигурност на GitHub (GitHub’s Advisory Database) вече приема доклади за зловреден код от хранилището за компрометирани пакети на OpenSSF – публичен канал в OSV формат, който стартира през 2023 г. с над 15 000 доклада и оттогава нараства ежедневно, обхващайки тайпоскуатинг (typosquatting), пакети с конфликт на зависимости (dependency-confusion), превземане на профили и компрометирани предварително компилирани двоични файлове.
Предупрежденията на Dependabot за зловреден код, които досега работеха само с данни от npm, вече черпят информация от всички осем екосистеми в момента, в който потребителят активира тези сигнали. Самият Dependabot вече работи в над 30 милиона хранилища и повече от 34 екосистеми за пакети като цяло, което дава представа за мащаба, в който трябва да оперира този поток от данни за зловреден код.
Изграждането на осем отделни системи за откриване щеше да отнеме години. Вместо това екипът разработи един импортер, който чете канала на OpenSSF по същия начин, по който съществуващите импортери на GitHub вече четат съветите от RubySec и RustSec, и съпоставя записите.
„Нормализирането звучи скучно, докато не се сблъскате с данните. Имена на екосистеми по веригата не винаги съвпадат с нашите (хранилището казва PyPI, нашата база данни казва pip). Записите на OSV изброяват засегнатите версии като дискретни стойности, докато ние мислим в диапазони, а някои записи изобщо не посочват използваема версия. Полето за подробности често е празно, а когато няколко източника докладват за един и същ пакет, техните текстове се добавят в един общ блок. Докладите също така се оттеглят: хранилището поддържа цяла папка osv/withdrawn за съвети, които са се оказали погрешни, така че импортерът трябва да се справи с това пакетът да бъде маркиран в понеделник и отхвърлен в сряда“, споделя Анкит Кумар Хони, старши мениджър по инженерна дейност в GitHub.
Има и по-незабележим детайл: откритията на GitHub за зловреден код в npm вече се изпращат към хранилището на OpenSSF. Импортирането на този канал без филтриране би означавало повторно импортиране на собствените съвети на GitHub в затворен кръг. Решението се основава на метаданните за произход, които съдържат OSV записите: всеки запис, маркиран с „ghsa-malware“, е започнал от GitHub и се отхвърля, преди да стане нов запис в канала. След като GitHub провери това с реални данни, се оказа, че над половината от новите доклади за npm, пристигащи всеки месец, са точно от този тип повторно завъртане.
Стъпката за преглед е пропусната умишлено
Мадисън Фикорили, колега в GitHub, пише за това какво означава „прегледан“ за съветите за уязвимости: човек проверява съпоставянето на пакетите, диапазоните от версии и сериозността, преди да бъде изпратено каквото и да било.
Съветите за зловреден код пропускат тази стъпка и се публикуват автоматично, съвсем умишлено, тъй като пакет, крадящ идентификационни данни, който стои на опашка за преглед в продължение на дни, е победа за този, който го е внедрил. Новото е, че тези непрегледани съвети вече могат да задействат директно предупреждения на Dependabot – нещо, което никога не е било възможно преди това разширение.
Какво се случва, ако входящият източник се компрометира
Това споразумение е валидно само ако входящият източник остане чист, така че потокът от данни предполага, че в крайна сметка той може и да не бъде такъв. Три предпазни мерки покриват този случай. Лимит на партидата ограничава броя на съветите, които едно импортиране може да създаде; ако се превиши, процесът спира напълно, не публикува нищо и изпраща известие до екипа, тъй като импортиране с пет пъти по-голям обем от обичайния изглежда по-малко като натоварен ден и повече като компрометиран източник. Всеки импортиран съвет носи информация за произхода си до точния комит (commit) по веригата, така че един невалиден съвет може да бъде проследен до неговия източник за минути. И всяка партида може да бъде върната в първоначално състояние като едно цяло, без да се налага ръчно избиране и изтриване на грешни записи от базата данни впоследствие.
„Сигналите за зловреден код изискват съгласие: активирайте ги в настройките за сигурност на вашето хранилище, организация или предприятие. Dependabot ще съпостави вашите зависимости със съветите за зловреден код в Advisory Database, включително и със задна дата за вече съществуващи съвети, веднага след като го включите“, обяснява Хони.