CVSS-оценка уязвимостей в коде BSL

·
  • cvss
  • безопасность
  • sec

Каждая SEC-находка в массовом анализе получает CVSS 3.1 base score, severity и vector. Объективный приоритет уязвимостей по индустриальному стандарту.

Аудит безопасности BSL находит много чего: использование Выполнить(), пароли в коде, пустые блоки Попытка, передача недоверенных данных в чувствительные операции. Но без приоритизации список из ста находок выглядит одинаково страшно. Ребята из инфобеза в крупных компаниях привыкли работать с CVSS, и хотят видеть тот же стандарт в отчётах по 1С.

С сегодняшнего дня каждая SEC-находка в массовом анализе сопровождается CVSS 3.1 Base Score, severity и vector string.

Что добавилось

Раньше находка выглядела так:

{
  "rule_id": "SEC013",
  "object": "Документ.Заказ.МодульОбъекта",
  "line": 42,
  "message": "SQL injection через прямую конкатенацию"
}

Теперь поле дополнено CVSS-данными:

{
  "rule_id": "SEC013",
  "object": "Документ.Заказ.МодульОбъекта",
  "line": 42,
  "message": "SQL injection через прямую конкатенацию",
  "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
  "cvss_base_score": 9.8,
  "severity": "Critical"
}

Vector string привязан к каждому правилу в YAML-метадате. Score вычисляется из vector по формуле CVSS 3.1 Base Score (без Temporal и Environmental). Severity это стандартное соответствие: 0.0 None, 0.1-3.9 Low, 4.0-6.9 Medium, 7.0-8.9 High, 9.0-10.0 Critical.

Почему 3.1, а не 4.0

CVSS 4.0 уже опубликован, но в индустриальной практике пока остаётся 3.1: NVD продолжает выдавать оценки в 3.1, БДУ ФСТЭК тоже на 3.1. Большинство статанализаторов и SIEM-систем настроены на парсинг 3.1-вектора. Переход на 4.0 имеет смысл когда сменится потребитель, не раньше.

Отдельный момент: 4.0 выкинул Confidentiality/Integrity/Availability в пользу более гранулярных метрик, и для большинства SEC-находок в 1С-коде новых полей пока нечем заполнить осмысленно.

Соответствие правил CVE и CWE

Каждое SEC-правило размечено CWE-кодом. Это позволяет связать находку с публичной классификацией:

Правило CWE Описание
SEC006 CWE-22 Path traversal через ВнешнийФайл
SEC013 CWE-89 SQL injection через прямую конкатенацию
TNT001-TNT007 CWE-20 / CWE-79 Передача недоверенного ввода в операции

Сопоставление ведётся в коде, не из внешней базы. Это значит что отчёт работает офлайн и не зависит от доступности NVD или MITRE.

SARIF-вывод

В SARIF-файле каждая находка получает дополнительное свойство security-severity со значением CVSS Base Score. GitHub Code Scanning читает это поле и автоматически расставляет приоритет на вкладке Security. Никаких дополнительных настроек на стороне CI не требуется.

properties:
  security-severity: "9.8"
  cvss_vector: "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
  cwe: "CWE-89"

Запуск

CVSS-оценка включается автоматически при --build-bulkanalysis. Отдельного флага не требуется. Если в каком-то правиле vector ещё не размечен, score просто не появится в выводе, но сама находка останется как раньше с base severity по уровню правила.