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": "SEC009",
  "object": "Документ.Заказ.МодульОбъекта",
  "line": 42,
  "message": "Конкатенация переменных в текст запроса (строка 42): используйте Запрос.УстановитьПараметр()"
}

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

{
  "rule_id": "SEC009",
  "object": "Документ.Заказ.МодульОбъекта",
  "line": 42,
  "message": "Конкатенация переменных в текст запроса (строка 42): используйте Запрос.УстановитьПараметр()",
  "cvss_vector": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:L",
  "cvss_base_score": 8.3,
  "severity": "High"
}

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С-коде новых полей пока нечем заполнить осмысленно.

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

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

Правило CWE Описание
SEC006 CWE-863 Доступ к данным без проверки прав (IDOR)
SEC009 CWE-943 Инъекция в язык запросов 1С (конкатенация в текст запроса)
SEC013 CWE-532 Чувствительные данные в журнале регистрации
TNT001-TNT007 CWE-78, CWE-94, CWE-22, CWE-918, CWE-943, CWE-532 Передача недоверенного ввода в чувствительные операции (taint-анализ)

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

SARIF-вывод

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

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

Запуск

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