Перейти к содержанию

Приложение 15. Спецификация Webhook

Авторизация

Bearer token

Если администратор выбрал аутентификацию по Bearer token и указал токен в поле Secret, то AppSec.Hub при отправке webhook добавляет к запросу HTTP заголовок вида:

Authorization: Bearer <Secret>

где <Secret> - это значение токена, введенного администратором в поле Secret.

Более подробную информацию об использовании Bearer token можно найти здесь.

Basic authentication

Если администратор выбрал базовую аутентификацию (Basic authentication), то AppSec.Hub при отправке webhook добавляет к запросу HTTP заголовок вида:

Authorization: Basic <credentials>

где <credentials> - это строка, полученная преобразованием пары логин/пароль в кодировку Base64: Base64(login:password).

Более подробную информацию об использовании базовой аутентификации можно найти здесь.

Атрибуты webhook

Атрибут Обязат.
атрибут
Описание Тип
status + Статус выполненного запуска security pipeline enum {"SUCCESS", "FAILED"}
details + Пояснение к статусу, например, причина статуса “Failed” string
id + ID запуска security pipeline на сканирование long
type + Тип security pipeline, который был запущен на сканирование enum {"CODEBASE", "ARTIFACT", "INSTANCE"}
createTs + Дата и время запуска security pipeline long
duration + Длительность выполнения security pipeline в миллисекундах integer
application + Параметры приложения object
source + Параметры объекта сканирования object
qualityGates + Результат проверки Quality Gate по каждой практике list {object}
tagging Статус применения тегов. Если пропущен (или null) - это означает, что тегирование не было установлено для данного security pipeline object
summary + Статистика найденных уязвимостей object
report + Ссылки на отчеты с результатами скана object

Атрибуты приложения

Атрибут Обязат.
атрибут
Описание Тип
id + Внутренний ID приложения string
name + Имя приложения string
code + Код приложения для внешней интеграции (Public ID) string
externalId ID приложения во внешнем реестре приложений string

Атрибуты объекта сканирования

Атрибут Обязат.
атрибут
Описание Тип
codebase —* Параметры кодовой базы object
artifact —* Параметры артефакта object
instance —* Параметры инстанса object

* Хотя бы один из объектов обязательно должен присутствовать.

Атрибуты кодовой базы

Атрибут Обязат.
атрибут
Описание Тип
name + Наименование кодовой базы (в интерфейсе AppSec.Hub) string
url + URL кодовой базы (Checkout (fetch) URL) string
branch + Ветка, которая сканировалась в данном запуске security pipeline string
buildTool + Инструмент сборки string
commit Hash commit среза ветки, который сканировался в данном запуске string

Атрибуты артефакта

Атрибут Обязат.
атрибут
Описание Тип
name + Наименование артефакта (в интерфейсе AppSec.Hub) string
type + Тип (формат) артефакта enum {"MAVEN", "DOCKER", "RAW", "FILE", "NPM", "YUM"}
properties + Атрибуты артефакта, которые напрямую связаны с его типом object
checksum + Набор контрольных сумм артефакта object
url + URL доступа к артефакту в репозитории string

Properties артефакта

Maven

Атрибут Обязат.
атрибут
Описание Тип
repository + Наименование репозитория (Nexus RM) string
name + Наименование артефакта/компоненты в репозитории (Nexus RM) string
group + Наименование группы в репозитории (Nexus RM) string
extension + Расширение артефакта string
classifier Классификатор артефакта string
version + Версия артефакта string

Docker

Атрибут Обязат.
атрибут
Описание Тип
repository + Наименование репозитория (Nexus RM) string
name + Наименование образа в репозитории (Nexus RM) string
baseUrl + Hostname репозитория string
port + Порт доступа к репозиторию/образу string
version + Версия (тег) образа string

RAW

Атрибут Обязат.
атрибут
Описание Тип
repository + Наименование репозитория (Nexus RM) string
name + Наименование артефакта/компоненты в репозитории (Nexus RM) string
relativeUrl + Относительный URL с указанием версии артефакта и номера сборки string
extension + Расширение артефакта string
version Версия артефакта string
build Номер сборки string

File

Атрибут Обязат.
атрибут
Описание Тип
relativeUrl + Относительный URL с указанием версии артефакта и номера сборки string
version Версия артефакта string
build Номер сборки string

NPM

Атрибут Обязат.
атрибут
Описание Тип
repository + Наименование репозитория (Nexus RM) string
name + Наименование пакета NPM в репозитории (Nexus RM) string
version + Версия пакета string

YUM

Атрибут Обязат.
атрибут
Описание Тип
repository + Наименование репозитория (Nexus RM) string
name + Наименование артефакта в репозитории (Nexus RM) string
relativeUrl + Относительный URL с указанием версии артефакта и номера сборки string
extension + Расширение артефакта string
version Версия артефакта string
build Номер сборки string

PyPi

Атрибут Обязат.
атрибут
Описание Тип
repository + Наименование репозитория (Nexus RM) string
name + Наименование артефакта в репозитории (Nexus RM) string
version Версия артефакта string

Атрибуты контрольной суммы

Атрибут Обязат.
атрибут
Описание Тип
md5 —* Контрольная сумма по формату MD5 string
sha1 —* Контрольная сумма по формату SHA1 string
sha256 —* Контрольная сумма по формату SHA256 string
sha512 —* Контрольная сумма по формату SHA512 string

* Хотя бы один из атрибутов обязательно должен присутствовать.

Атрибуты инстанса

Атрибут Обязат.
атрибут
Описание Тип
name + Наименование стенда с развернутым приложением string
url + URL развернутого приложения string
stage + Стадия разработки, на которой используется стенд для тестирования enum {"DEV", "FT", "IT", "UAT", "PROD"}

Атрибуты Quality Gate

Атрибут Обязат.
атрибут
Описание Тип
practice + ID применявшейся практики enum {"SAST", "SCA", "DAST"}
status + Результат проверки QG. Если указано:
N/A - QG либо не был указан в security pipeline, либо проверки данной практикой не выполнялись
enum {"PASSED", "FAILED", "N/A"}
violations - Список нарушений, которые стали причиной status: FAILED list {string}

Атрибуты тегирования

Атрибут Обязат.
атрибут
Описание Тип
status + Статус установки тега на артефакт:
APPLIED - теги установлены;
FAILED - тегирование завершилось с ошибкой
enum {"APPLIED", "FAILED"}
artifact + Параметры артефакта object
tags + Список установленных (или назначенных на установку) тегов list {string}

Статистика найденных уязвимостей

Атрибут Обязат.
атрибут
Описание Тип
new + Статистика по категории "новые уязвимости" (были детектированы только в текущем скане) object
repeated + Статистика по категории "повторные уязвимости" object
fixed + Статистика по категории "исправленные уязвимости" object
total + Статистика по категории "все открытые уязвимости" object

Статистика по категории найденных уязвимостей

Атрибут Обязат.
атрибут
Описание Тип
critical + Количество уязвимостей с уровнем серьезности Critical integer
high + Количество уязвимостей с уровнем серьезности High integer
medium + Количество уязвимостей с уровнем серьезности Medium integer
low + Количество уязвимостей с уровнем серьезности Low integer

Атрибуты отчета

Атрибут Обязат.
атрибут
Описание Тип
raw + Ссылка на список уязвимостей, найденных в данном сканировании string
pdf Ссылка на отчёт в формате PDF string
excel Ссылка на отчёт в формате Excel string

Примеры

Успешное сканирование кодовой базы

{
    "status": "SUCCESS",
    "details": "QG is  passed. Scan is finished.",
    "id": 960,
    "type": "CODEBASE",
    "createTs": 1596601348251,
    "duration": 52643,
    "application": {
        "id": 48,
        "name": "DVJA",
        "code": "DVJA",
        "externalId": ""
    },
    "source": {
        "codebase": {
            "name": "dvja-master",
            "url": "https://github.com/appsecco/dvja.git",
            "branch": "master",
            "buildTool": "maven",
            "commit": "709d658dc5b6d6afcd46049c2f332ee3f515a67d"
        }
    },
    "qualityGates": [{
        "practice": "SAST",
        "status": "PASSED",
        "violations": null
    }, {
        "practice": "SCA",
        "status": "N/A",
        "violations": null
    }, {
        "practice": "DAST",
        "status": "N/A",
        "violations": null
    }],
    "tagging": {
        "status": "APPLIED",
        "artifact": {
            "name": "dvja-war",
            "type": "MAVEN",
            "properties": {
                "repository": "maven-releases",
                "name": "dvja",
                "group": "com.appsecco",
                "extension": "war",
                "version": "1.0"
            },
            "checksum": {
                "sha512": "dedaa748ae1b0ee3d843dda8bed2ec7acc51ad42506a9fde387b4a9b638196cafcd0da37183beb5d1a947b263aaf7328dfbbe32a86c3a8b53a564fd27ec33b55",
                "sha256": "5a78b5b999cb6b63f050266b10dc088cf7117eab504049a6d8d02ad857d160c0",
                "sha1": "0bc46ca00ebb64f6da77bf6622fcd204451fedd6",
                "md5": "efa317f19c70cbcd60aded38de811bb0"
            },
            "url": "https://nexus.your.company.com/repository/maven-releases/com/appsecco/dvja/1.0/dvja-1.0.war"
        },
        "tags": ["QG_SAST_FAIL"]
    },
    "summary": {
        "new": {
            "critical": 0,
            "high": 0,
            "medium": 0,
            "low": 0
        },
        "repeated": {
            "critical": 0,
            "high": 2,
            "medium": 5,
            "low": 89
        },
        "total": {
            "critical": 0,
            "high": 2,
            "medium": 5,
            "low": 89
        },
        "fixed": {
            "critical": 0,
            "high": 0,
            "medium": 0,
            "low": 0
        }
    },
    "report": {
        "raw": "https://hub.your.company.com/#/appprofile/48/issues?scanId=960"
    }
}

Неудачное сканирование кодовой базы

{
    "status": "FAILED",
    "details": "QG is not passed. Scan is finished. One ore more QG checks are not passed",
    "id": 960,
    "type": "CODEBASE",
    "createTs": 1596601348251,
    "duration": 52643,
    "application": {
        "id": 48,
        "name": "DVJA",
        "code": "DVJA",
        "externalId": ""
    },
    "source": {
        "codebase": {
            "name": "dvja-master",
            "url": "https://github.com/appsecco/dvja.git",
            "branch": "master",
            "buildTool": "maven",
            "commit": "709d658dc5b6d6afcd46049c2f332ee3f515a67d"
        }
    },
    "qualityGates": [{
        "practice": "SAST",
        "status": "FAILED",
        "violations": ["Number of ALL SAST issues with HIGH severity (2) exceeds the limit (0)"]
    }, {
        "practice": "SCA",
        "status": "N/A",
        "violations": null
    }, {
        "practice": "DAST",
        "status": "N/A",
        "violations": null
    }],
    "tagging": {
        "status": "APPLIED",
        "artifact": {
            "name": "dvja-war",
            "type": "MAVEN",
            "properties": {
                "mavenArtifactType": "war",
                "repositoryName": "maven-releases",
                "mavenArtifact": "dvja",
                "group": "com.appsecco",
                "version": "1.0"
            },
            "checksum": {
                "sha512": "dedaa748ae1b0ee3d843dda8bed2ec7acc51ad42506a9fde387b4a9b638196cafcd0da37183beb5d1a947b263aaf7328dfbbe32a86c3a8b53a564fd27ec33b55",
                "sha256": "5a78b5b999cb6b63f050266b10dc088cf7117eab504049a6d8d02ad857d160c0",
                "sha1": "0bc46ca00ebb64f6da77bf6622fcd204451fedd6",
                "md5": "efa317f19c70cbcd60aded38de811bb0"
            },
            "url": "https://nexus.your.company.com/repository/maven-releases/com/appsecco/dvja/1.0/dvja-1.0.war"
        },
        "tags": ["QG_SAST_FAIL"]
    },
    "summary": {
        "new": {
            "critical": 0,
            "high": 0,
            "medium": 0,
            "low": 0
        },
        "repeated": {
            "critical": 0,
            "high": 2,
            "medium": 5,
            "low": 89
        },
        "total": {
            "critical": 0,
            "high": 2,
            "medium": 5,
            "low": 89
        },
        "fixed": {
            "critical": 0,
            "high": 0,
            "medium": 0,
            "low": 0
        }
    },
    "report": {
        "raw": "https://hub.your.company.com/#/appprofile/48/issues?scanId=960"
    }
}

Неудачное сканирование образа docker

{
    "status": "FAILED",
    "details": "QG is not passed. Scan is finished. One ore more QG checks are not passed",
    "id": 958,
    "type": "ARTIFACT",
    "createTs": 1596601348251,
    "duration": 52643,
    "application": {
        "id": 48,
        "name": "DVJA",
        "code": "DVJA",
        "externalId": ""
    },
    "source": {
        "artifact": {
            "name": "java-web-project.docker",
            "type": "DOCKER",
            "properties": {
                "baseUrl": "nexus.your.company.com",
                "port": "443",
                "repository": "docker-private",
                "name": "java-web-project",
                "version": "1.17"
            },
            "checksum": {
                "sha512": "dedaa748ae1b0ee3d843dda8bed2ec7acc51ad42506a9fde387b4a9b638196cafcd0da37183beb5d1a947b263aaf7328dfbbe32a86c3a8b53a564fd27ec33b55",
                "sha256": "5a78b5b999cb6b63f050266b10dc088cf7117eab504049a6d8d02ad857d160c0",
                "sha1": "0bc46ca00ebb64f6da77bf6622fcd204451fedd6",
                "md5": "efa317f19c70cbcd60aded38de811bb0"
            },
            "url": "https://nexus.your.company.com/repository/docker-private/v2/java-web-project/manifests/1.17"
        }
    },
    "qualityGates": [{
            "practice": "SAST",
            "status": "N/A",
            "violations": null
        }, {
            "practice": "SCA",
            "status": "FAILED",
            "violations": ["Number of ALL SCA Security issues with HIGH severity (15) exceeds the limit (0)", "Number of ALL SCA Security issues with CRITICAL severity (29) exceeds the limit (0)"]
        }, {
            "practice": "DAST",
            "status": "N/A",
            "violations": null
        }
    ],
    "tagging": {
        "status": "APPLIED",
        "artifact": {
            "name": "java-web-project.docker",
            "type": "DOCKER",
            "properties": {
                "baseUrl": "nexus.your.company.com",
                "port": "443",
                "repository": "docker-private",
                "name": "java-web-project",
                "version": "1.17"
            },
            "checksum": {
                "sha512": "dedaa748ae1b0ee3d843dda8bed2ec7acc51ad42506a9fde387b4a9b638196cafcd0da37183beb5d1a947b263aaf7328dfbbe32a86c3a8b53a564fd27ec33b55",
                "sha256": "5a78b5b999cb6b63f050266b10dc088cf7117eab504049a6d8d02ad857d160c0",
                "sha1": "0bc46ca00ebb64f6da77bf6622fcd204451fedd6",
                "md5": "efa317f19c70cbcd60aded38de811bb0"
            },
            "url": "https://nexus.your.company.com/repository/docker-private/v2/java-web-project/manifests/1.17"
        },
        "tags": ["QG_SCA_FAIL"]
    },
    "summary": {
        "new": {
            "critical": 29,
            "high": 15,
            "medium": 6,
            "low": 86
        },
        "repeated": {
            "critical": 0,
            "high": 0,
            "medium": 0,
            "low": 0
        },
        "fixed": {
            "critical": 0,
            "high": 0,
            "medium": 0,
            "low": 0
        },
        "total": {
            "critical": 29,
            "high": 15,
            "medium": 6,
            "low": 86
        }
    },
    "report": {
        "raw": "https://hub.your.company.com/#/appprofile/48/issues?scanId=958"
    }
}

Неудачное сканирование артефакта maven

{
    "status": "FAILED",
    "details": "QG is not passed. Scan is finished. One ore more QG checks are not passed",
    "id": 958,
    "type": "ARTIFACT",
    "createTs": 1596601348251,
    "duration": 52643,
    "application": {
        "id": 48,
        "name": "DVJA",
        "code": "DVJA",
        "externalId": ""
    },
    "source": {
        "artifact": {
            "name": "dvja-war",
            "type": "MAVEN",
            "properties": {
                "repository": "maven-releases",
                "name": "dvja",
                "group": "com.appsecco",
                "extension": "war",
                "version": "1.0"
            },
            "checksum": {
                "sha512": "dedaa748ae1b0ee3d843dda8bed2ec7acc51ad42506a9fde387b4a9b638196cafcd0da37183beb5d1a947b263aaf7328dfbbe32a86c3a8b53a564fd27ec33b55",
                "sha256": "5a78b5b999cb6b63f050266b10dc088cf7117eab504049a6d8d02ad857d160c0",
                "sha1": "0bc46ca00ebb64f6da77bf6622fcd204451fedd6",
                "md5": "efa317f19c70cbcd60aded38de811bb0"
            },
            "url": "https://nexus.your.company.com/repository/maven-releases/com/appsecco/dvja/1.0/dvja-1.0.war"
        }
    },
    "qualityGates": [{
            "practice": "SAST",
            "status": "N/A",
            "violations": null
        }, {
            "practice": "SCA",
            "status": "FAILED",
            "violations": ["Number of ALL SCA Security issues with HIGH severity (15) exceeds the limit (0)", "Number of ALL SCA Security issues with CRITICAL severity (29) exceeds the limit (0)"]
        }, {
            "practice": "DAST",
            "status": "N/A",
            "violations": null
        }
    ],
    "tagging": {
        "status": "APPLIED",
        "artifact": {
            "name": "dvja-war",
            "type": "MAVEN",
            "properties": {
                "repository": "maven-releases",
                "name": "dvja",
                "group": "com.appsecco",
                "extension": "war",
                "version": "1.0"
            },
            "checksum": {
                "sha512": "dedaa748ae1b0ee3d843dda8bed2ec7acc51ad42506a9fde387b4a9b638196cafcd0da37183beb5d1a947b263aaf7328dfbbe32a86c3a8b53a564fd27ec33b55",
                "sha256": "5a78b5b999cb6b63f050266b10dc088cf7117eab504049a6d8d02ad857d160c0",
                "sha1": "0bc46ca00ebb64f6da77bf6622fcd204451fedd6",
                "md5": "efa317f19c70cbcd60aded38de811bb0"
            },
            "url": "https://nexus.your.company.com/repository/maven-releases/com/appsecco/dvja/1.0/dvja-1.0.war"
        },
        "tags": ["QG_SCA_FAIL"]
    },
    "summary": {
        "new": {
            "critical": 29,
            "high": 15,
            "medium": 6,
            "low": 86
        },
        "repeated": {
            "critical": 0,
            "high": 0,
            "medium": 0,
            "low": 0
        },
        "fixed": {
            "critical": 0,
            "high": 0,
            "medium": 0,
            "low": 0
        },
        "total": {
            "critical": 29,
            "high": 15,
            "medium": 6,
            "low": 86
        }
    },
    "report": {
        "raw": "https://hub.your.company.com/#/appprofile/48/issues?scanId=958"
    }
}
К началу