Уязвимости указывают на потенциальные угрозы безопасности в дереве зависимостей.

Команда для проверки уязвимостей в репозитории:

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:

Если в самой последней версии пакета уязвимость не устранена, лучше всего найти альтернативные пакеты для того же варианта использования.