Уязвимости указывают на потенциальные угрозы безопасности в дереве зависимостей.
Команда для проверки уязвимостей в репозитории:
npm audit -- json>report.json
При этом будет создан файл report.json со всей подробной информацией о найденных уязвимостях.
Как проанализировать этот отчет?
Рассмотрим следующий раздел с уязвимостью критической серьезности:
"1089656": { "findings": [ { "version": "1.10.0", "paths": [ "react-scripts>react-dev-utils>immer" ] } ], "metadata": null, "vulnerable_versions": "<9.0.6", "module_name": "immer", "severity": "critical", "github_advisory_id": "GHSA-33f9-j839-rf8h", "cves": [ "CVE-2021-23436" ], "access": "public", "patched_versions": ">=9.0.6", "cvss": { "score": 9.8, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H" }, "updated": "2023-02-01T05:06:18.000Z", "recommendation": "Upgrade to version 9.0.6 or later", "cwe": [ "CWE-843", "CWE-1321" ], "found_by": null, "deleted": null, "id": 1089656, "references": "- https://nvd.nist.gov/vuln/detail/CVE-2021-23436\n- https://github.com/immerjs/immer/commit/fa671e55ee9bd42ae08cc239102b665a23958237\n- https://snyk.io/vuln/SNYK-JS-IMMER-1540542\n- https://snyk.io/vuln/SNYK-JAVA-ORGWEBJARSNPM-1579266\n- https://github.com/advisories/GHSA-33f9-j839-rf8h", "created": "2021-09-02T17:17:37.000Z", "reported_by": null, "title": "Prototype Pollution in immer", "npm_advisory_id": null, "overview": "This affects the package immer before 9.0.6. A type confusion vulnerability can lead to a bypass of CVE-2020-28477 when the user-provided keys used in the path parameter are arrays. In particular, this bypass is possible because the condition (p === \"__proto__\" || p === \"constructor\") in applyPatches_ returns false if p is ['__proto__'] (or ['constructor']). The === operator (strict equality operator) returns false if the operands have different type.", "url": "https://github.com/advisories/GHSA-33f9-j839-rf8h" },
- имя_модуля: указывает имя модуля, для которого была обнаружена уязвимость.
Примечание. Это также может быть дочерняя зависимость пакета родительского уровня. - пути: помогает определить имя родительского пакета, от которого этот модуль является зависимостью.
- рекомендация: указан минимальный номер версии, до которого необходимо обновить этот модуль, чтобы устранить уязвимость.
- серьезность: указывает уровень серьезности уязвимости, т. е. критический, высокий, средний или низкий.
Действия по устранению уязвимости:
Шаг 1:
Найдите последнюю версию родительского пакета на npm и обновите ее до нее. Например, в этом случае:
npm install [email protected]
При обновлении до последней версии убедитесь, что это не приведет к критическим изменениям. В этом случае требуется миграция пакета на последнюю версию.
Шаг 2:
Если уязвимость не устранена даже после обновления и миграции родительского пакета до последней версии, функция переопределяет(разрешениядля Yarn) предложенной версией с помощью npm Audit можно использовать
Пример:
"overrides": { "glob-parent": "5.1.2", "nth-check": "2.0.1", "semver":"^7.3.5", "word-wrap":"^1.2.4", "tough-cookie":"^4.1.3" },
Эта функция переопределяет версию модуля, указанную во время разрешения зависимостей.
Примечание. Минимальная версия npm для использования этой функции – 8.3.
Шаг 3:
Если в самой последней версии пакета уязвимость не устранена, лучше всего найти альтернативные пакеты для того же варианта использования.