← Назад к вопросам

Какие уязвимости показывает npm audit?

2.2 Middle🔥 162 комментариев
#Node.js и JavaScript#Безопасность

Комментарии (2)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

npm audit: типы уязвимостей и их анализ

npm audit — встроенный инструмент Node.js для проверки безопасности зависимостей. Вот подробный анализ типов уязвимостей, которые он выявляет.

Как работает npm audit

npm audit
npm audit --json              # JSON формат для парсинга
npm audit fix                 # Автоматическое исправление
npm audit fix --force         # Принудительное обновление
npm audit --audit-level=high  # Только high/critical уязвимости

Типы уязвимостей

1. Уязвимости безопасности (Security Vulnerabilities)

Наиболее критичные, связаны с взломом:

# Пример вывода npm audit
┌─────────────────────────────────────────────────────────┐
│ Critical  │ Expression injection in lodash               │
│ Package   │ lodash                                        │
│ Severity  │ critical                                      │
│ CVE       │ CVE-2021-23337                               │
│ GHSA      │ GHSA-35jh-r3h4-6jhm                          │
│ More info │ https://nvd.nist.gov/vuln/detail/CVE-...     │
└─────────────────────────────────────────────────────────┘

Типичные примеры:

  • Injection attacks — SQL injection, command injection
  • Authentication bypass — обход авторизации
  • Crypto flaws — слабые криптографические алгоритмы
  • Denial of Service — crash через специальный input

2. Уровни серьезности (Severity Levels)

CRITICAL  (критична) — немедленное обновление
HIGH      (высокая)  — обновить в ближайшее время
MODERATE  (средняя)  — обновить в нормальном режиме
LOW       (низкая)   — обновить при возможности

3. Уязвимости в зависимостях (Transitive Dependencies)

npm audit находит проблемы не только прямых зависимостей:

{
  "name": "my-app",
  "dependencies": {
    "express": "4.18.0"  // прямая зависимость
  }
}

// npm audit найдет уязвимости:
// express → body-parser → qs (уязвимость в qs!)

4. Специфические типы уязвимостей

Deserialization attacks:

// Опасно: может выполнить код при десериализации
const pickle = require('pickle');
pickle.loads(userInput);  // УЯЗВИМО!

Command injection:

// Опасно: пользовательский ввод в shell команду
exec(`ffmpeg -i ${filename}`);  // УЯЗВИМО!

Path traversal:

// Опасно: доступ к файлам вне каталога
fs.readFile(`./uploads/${userPath}`);  // УЯЗВИМО!

Regular expression DoS (ReDoS):

// Опасно: регулярное выражение может зависнуть
/^(a+)+$/.test(longString);  // УЯЗВИМО!

Prototype pollution:

// Опасно: загрязнение Object.prototype
Object.assign({}, userInput);  // может быть опасно

Практический пример npm audit

$ npm audit

added 150 packages in 5s

78 vulnerabilities found
0 critical, 6 high, 25 moderate, 47 low

Run "npm audit fix" to fix 23 of them.
24 vulnerabilities require manual review. Run "npm audit fix --force" to address them.

┌─────────────────────────────────────────────────────────┐
│ High     │ Regular Expression Denial of Service          │
│ Package  │ minimatch                                     │
│ Severity │ high                                          │
│ Fix in   │ 3.1.0                                         │
│ More     │ https://nvd.nist.gov/vuln/detail/CVE-...      │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│ Moderate │ Uncontrolled Resource Consumption             │
│ Package  │ lodash                                         │
│ Severity │ moderate                                      │
│ Fix in   │ 4.17.21                                       │
│ More     │ https://nvd.nist.gov/vuln/detail/CVE-...      │
└─────────────────────────────────────────────────────────┘

Исправление уязвимостей

Автоматическое исправление:

npm audit fix  # Обновляет до совместимой версии

Принудительное исправление:

npm audit fix --force  # Может сломать совместимость!

Ручное исправление:

# 1. Проверь, какая версия нужна
npm show lodash versions

# 2. Обнови в package.json
npm install lodash@4.17.21

# 3. Проверь, что тесты прошли
npm test

Игнорирование уязвимостей (не рекомендуется):

{
  "npm": {
    "audit": {
      "auditConfig": {
        "ignoredAdvisories": [1088996, 1088997]
      }
    }
  }
}

Интеграция с CI/CD

В GitHub Actions для автоматической проверки:

name: Security Audit

on: [push, pull_request]

jobs:
  audit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
      - run: npm ci
      - run: npm audit --audit-level=moderate

CVE и GHSA

npm audit использует две базы данных уязвимостей:

  • CVE (Common Vulnerabilities and Exposures) — официальная база
  • GHSA (GitHub Security Advisory) — от GitHub Security Lab
# Найти информацию о конкретной уязвимости
curl https://api.github.com/advisories/GHSA-35jh-r3h4-6jhm

Реальные примеры из production

1. lodash ReDoS (2021)

Severity: high
Package: lodash < 4.17.21
Issue: Regular expression denial of service

2. Minimatch ReDoS (2021)

Severity: high
Package: minimatch < 3.0.5
Issue: Regular expression backtracking

3. axios SSRF (2020)

Severity: high
Package: axios < 0.21.2
Issue: Server-Side Request Forgery

Лучшие практики

  1. Регулярно запускай npm audit

    npm audit  # После каждого npm install
    
  2. Устанавливай критичные уязвимости немедленно

    npm audit fix  # В production готовиться к этому
    
  3. Обновляй зависимости регулярно

    npm update  # Раз в неделю/месяц
    npm outdated  # Посмотри какие версии устарели
    
  4. Используй dependabot или Snyk

    • Автоматические PR для обновлений
    • Сканирование каждого commit
    • Уведомления о новых уязвимостях
  5. Минимизируй зависимости

    • Удаляй неиспользуемые пакеты
    • Выбирай пакеты с меньшим deque дерево
    • Регулярно аудитируй node_modules
  6. Тестируй после обновлений

    npm audit fix
    npm test
    npm run build
    

На практике

На production приходилось:

  • Откладывать релизы из-за конфликтов обновлений
  • Форсировать обновления для критичных уязвимостей
  • Боротся с зависимостями, которые не обновлялись давно
  • Использовать Snyk для более детального анализа

Главный вывод: npm audit — это начало, но нужна комплексная стратегия безопасности.