package-lock.json - заключване на пакети JS - npm typosquatting

Печатна грешка в Package-Lock.json: Как може да открадне вашата компилация

Защо Package-Lock.JSON е важен за разработчиците

В Node.js проектите, package-lock.json не е просто допълнителен файл към package.json. Той заключва точните версии на всяка инсталирана зависимост, включително вложените. Този файл гарантира възпроизводимост в различни среди и предотвратява неочаквани промени при публикуване на нови версии на пакети. Без него, разработчиците биха рискували различно поведение в етапите на разработка, тестване и производство поради изместващи се дървета на зависимости и дори биха отворили вратата за npm typosquatting, ако грешки се промъкнат в заключващия файл.


Когато се използва правилно, package-lock.json гарантира, че всеки във вашия екип и вашите CI/CD pipeline инсталирания същия код. Но една тиха печатна грешка в този файл може да пренасочи приложението ви директно в капан.

Как печатните грешки водят до NPM типоскопиращи атаки?

Да кажем, че легитимен пакет в package.json е написано правилно, като например лодашНо неправилно въведен запис в package-lock.json, Като лодас, все още може да се промъкне във вашето дърво на зависимости, особено ако някой го е редактирал ръчно или е написал дефектен инструмент.

Атакуващите разчитат на тези печатни грешки с техника, наречена npm typosquatting. Те качват злонамерени пакети с имена, наподобяващи популярни (напр. реагирай-дом, експреси, ъглов). Ако вашият JSON за заключване на пакета съдържа подобна печатна грешка, npm инсталира пакета на атакуващия без въпроси, защото изрично сте му казали да го направи.

NPM типосквотингът не е само теоретичен. Реалните NPM типосквотинг атаки са станали новина. Един такъв пример беше Компромис от пакета „Съдебно решение“, Където зловреден код беше изпратено чрез актуализация на надежден пакет. Разликата е, че при npm typosquatting, разработчикът случайно кани атакуващия, като прави грешка в зависимостта.

Реални рискове в CI/CD Pipelines Причинени от грешки в JSON заключване на пакети

Модерен дизайн CI/CD pipelineлакомство package-lock.json като източник на истина. По време на изграждане или внедряване, pipeline работи npm ci or npm инсталиране, като и двата четат от заключващия файл. Ако има печатна грешка, злонамереният пакет се изтегля автоматично. Няма предупреждения. Няма подкани.

Това означава, че печатна грешка, допусната по време на локалната разработка, може да се разпространи тихомълком чак до етапа на тестване или дори до производството. Атакуващите могат да вградят крадци на идентификационни данни, крипто майнери или задни врати, които се активират след внедряването. Всичко това може да се случи без задействане на инструменти за сигурност, защото зависимостта е била „декларирана“ в package-lock.json.

Това не е просто грешка. Това е пробив във веригата за доставки, който само чака да се случи, а типосквотингът в NPM го прави реална заплаха.

Откриване и предотвратяване на печатни грешки в зависимостите за смекчаване на типоскопирането на NPM

Печатни грешки в package-lock.json са невидими, освен ако не ги търсите активно. Ето как да започнете:

  • Статичен анализНякои инструменти не отчитат тези проблеми, но специализирани скенери за зависимости могат. Интегрирайте инструменти, които сканират за модели на типоскопия в npm и проверяват вашите package-lock.json за несъответствия.
  • Linting LockfilesИзползвайте персонализирани правила за линтинг или плъгини за валидиране package-lock.json записи в известни списъци с безопасни данни.
  • Кодови прегледиПрегледите от колеги са от решаващо значение. Разликите в заключените файлове са шумни, но научете екипа си да ги преглежда точно като код.
  • Автоматизирани проверки: Настройвам pre-commit hooks или CI задачи за отхвърляне на непроверени или подозрителни записи в package-lock.json.

Ето един практичен пример с използване на GitHub Actions:

Това не е напълно сигурно, но сигнализира за странни имена на пакети, които биха могли да сигнализират за грешки в npm.

Защита на Node.js проекти срещу NPM типоскопиране и атаки срещу веригата за доставки

За да заключите вашето Node.js приложение и да предотвратите атаки чрез package-lock.json:

  • Строго закрепване на версиитеИзбягвайте диапазони от версии (^, ~) в package.jsonЗаключете всички зависимости към точните версии, за да намалите неочакваните актуализации и отклоненията.
  • Проверка на подписаИзползвайте инструменти като Sigstore и функциите за произход на npm, за да проверите автентичността и произхода на пакетите.
  • Непроменяеми компилации: Използвайте винаги npm ci с валидиран package-lock.json файл в производствена среда. Никога не разчитайте на npm инсталиране по време на внедряването, тъй като това може да доведе до непроверени промени.
  • Непрекъснат мониторингИзползвайте решения за мониторинг, които ви предупреждават, когато:
    • Нови пакети се появяват във вашия package-lock.json
    • Съществуващите пакети се променят неочаквано
    • Подозрителни модели (напр. имена на пакети като експреси, реагирай-дом, ъглов) са открити
  • Инструменти за одит на зависимостиИнтегрирайте автоматизирани инструменти, като например одит на npm, Сник или Ксигени във вашия CI pipeline за сканиране за уязвимости и индикатори за правописни грешки.
  • Хигиена на заключени файлове: Почерпете package-lock.json като код. Прегледайте го по време на pull requests, особено когато зависимостите се актуализират или добавят.
  • Автоматизирана Pre-Commit Проверки: Използвайте pre-commit hooks за да валидирате заключващия файл, преди да достигне контрола на версиите.

package-lock.json е ценна цел при атаки с типосквотинг на npm. Печатна грешка като реагирай-дом or лодас дава на атакуващите директен път към вашата компилация pipelineБдителността около този файл е от съществено значение за поддържане на целостта на веригата за доставки.

Така че, една-единствена печатна грешка може да провали проекта ви. Не го позволявайте!

Печатна грешка в package-lock.json не е просто небрежно кодиране; това е истински вектор на заплаха за типосквотинг в NPM. Файлът е пазител на достъпа и ако бъде компрометиран, вашият pipeline също е. Решението не е привлекателно: забавете темпото, прегледайте заключващия файл, автоматизирайте проверките и следете промените. Но си заслужава.

За да подобрите защитата си, помислете за използването на инструменти като Xygeni, които са предназначени за откриване на печатни грешки, проверка JSON за заключване на пакети файлове и да защитите целостта на пакета през цялото ви CI/CD pipelineВ ерата на отворения код доверието се печели и проверява.

инструменти за анализ на състава на софтуера SCA Tools
Приоритизирайте, отстранете и защитете софтуерните си рискове
Вземете своя безплатен акаунт.
Не е необходима кредитна карта.

Осигурете си разработка и доставка на софтуер

с продуктовия пакет Xygeni