mirror of
https://gitlab.com/gitlab-org/gitlab-foss.git
synced 2025-08-03 16:04:30 +00:00
291 lines
10 KiB
Markdown
291 lines
10 KiB
Markdown
---
|
|
stage: Security Risk Management
|
|
group: Security Insights
|
|
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://handbook.gitlab.com/handbook/product/ux/technical-writing/#assignments
|
|
title: Vulnerability Findings API
|
|
---
|
|
|
|
{{< details >}}
|
|
|
|
- Tier: Ultimate
|
|
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
|
|
|
|
{{< /details >}}
|
|
|
|
{{< alert type="note" >}}
|
|
|
|
This API resource is renamed from Vulnerabilities to Vulnerability Findings because the Vulnerabilities are reserved
|
|
for serving [Vulnerability objects](https://gitlab.com/gitlab-org/gitlab/-/issues/13561).
|
|
To fix any broken integrations with the former Vulnerabilities API, change the `vulnerabilities` URL part to be
|
|
`vulnerability_findings`.
|
|
|
|
{{< /alert >}}
|
|
|
|
Every API call to vulnerability findings must be [authenticated](rest/authentication.md).
|
|
|
|
If a user does not have permission to
|
|
[use the Project Security Dashboard](../user/permissions.md#project-members-permissions),
|
|
any request for vulnerability findings of this project returns a `403 Forbidden` status code.
|
|
|
|
{{< alert type="warning" >}}
|
|
|
|
This API is in the process of being deprecated and considered unstable.
|
|
The response payload may be subject to change or breakage
|
|
across GitLab releases. Use the
|
|
[GraphQL API](graphql/reference/_index.md#queryvulnerabilities) instead. For more information, see [GraphQL examples](vulnerabilities.md#replace-vulnerability-rest-api-with-graphql)
|
|
|
|
{{< /alert >}}
|
|
|
|
## Vulnerability findings pagination
|
|
|
|
By default, `GET` requests return 20 results at a time because the API results
|
|
are paginated.
|
|
|
|
Read more on [pagination](rest/_index.md#pagination).
|
|
|
|
## List project vulnerability findings
|
|
|
|
List all of a project's vulnerability findings.
|
|
|
|
```plaintext
|
|
GET /projects/:id/vulnerability_findings
|
|
GET /projects/:id/vulnerability_findings?report_type=sast
|
|
GET /projects/:id/vulnerability_findings?report_type=container_scanning
|
|
GET /projects/:id/vulnerability_findings?report_type=sast,dast
|
|
GET /projects/:id/vulnerability_findings?scope=all
|
|
GET /projects/:id/vulnerability_findings?scope=dismissed
|
|
GET /projects/:id/vulnerability_findings?severity=high
|
|
GET /projects/:id/vulnerability_findings?pipeline_id=42
|
|
```
|
|
|
|
| Attribute | Type | Required | Description |
|
|
| ------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
|
| `id` | integer/string | yes | The ID or [URL-encoded path of the project](rest/_index.md#namespaced-paths) which the authenticated user is a member of. |
|
|
| `report_type` | string array | no | Returns vulnerability findings belonging to specified report type. Valid values: `sast`, `dast`, `dependency_scanning`, or `container_scanning`. Defaults to all. |
|
|
| `scope` | string | no | Returns vulnerability findings for the given scope: `all` or `dismissed`. Defaults to `dismissed`. |
|
|
| `severity` | string array | no | Returns vulnerability findings belonging to specified severity level: `info`, `unknown`, `low`, `medium`, `high`, or `critical`. Defaults to all. |
|
|
| `pipeline_id` | integer/string | no | Returns vulnerability findings belonging to specified pipeline. |
|
|
|
|
```shell
|
|
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/4/vulnerability_findings"
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
[
|
|
{
|
|
"id": null,
|
|
"report_type": "sast",
|
|
"name": "Possible command injection",
|
|
"severity": "high",
|
|
"scanner": {
|
|
"external_id": "brakeman",
|
|
"name": "Brakeman",
|
|
"vendor": "GitLab"
|
|
},
|
|
"identifiers": [
|
|
{
|
|
"external_type": "brakeman_warning_code",
|
|
"external_id": "14",
|
|
"name": "Brakeman Warning Code 14",
|
|
"url": "https://brakemanscanner.org/docs/warning_types/command_injection/"
|
|
}
|
|
],
|
|
"uuid": "ad5e3be3-a193-55f5-a200-bc12865fb09c",
|
|
"create_jira_issue_url": null,
|
|
"false_positive": true,
|
|
"create_vulnerability_feedback_issue_path": "/root/test-false-positive/-/vulnerability_feedback",
|
|
"create_vulnerability_feedback_merge_request_path": "/root/test-false-positive/-/vulnerability_feedback",
|
|
"create_vulnerability_feedback_dismissal_path": "/root/test-false-positive/-/vulnerability_feedback",
|
|
"project": {
|
|
"id": 2,
|
|
"name": "Test False Positive",
|
|
"full_path": "/root/test-false-positive",
|
|
"full_name": "Administrator / Test False Positive"
|
|
},
|
|
"dismissal_feedback": null,
|
|
"issue_feedback": null,
|
|
"merge_request_feedback": null,
|
|
"description": null,
|
|
"links": [],
|
|
"location": {
|
|
"file": "app/controllers/users_controller.rb",
|
|
"start_line": 42,
|
|
"class": "UsersController",
|
|
"method": "list_users"
|
|
},
|
|
"remediations": [
|
|
null
|
|
],
|
|
"solution": null,
|
|
"evidence": null,
|
|
"request": null,
|
|
"response": null,
|
|
"evidence_source": null,
|
|
"supporting_messages": [],
|
|
"assets": [],
|
|
"details": {},
|
|
"state": "detected",
|
|
"scan": {
|
|
"type": "sast",
|
|
"status": "success",
|
|
"start_time": "2021-09-02T20:55:48",
|
|
"end_time": "2021-09-02T20:55:48"
|
|
},
|
|
"blob_path": "/root/test-false-positive/-/blob/dfd75607752a839bbc9c7362d111effaa470fecd/app/controllers/users_controller.rb#L42"
|
|
}
|
|
]
|
|
```
|
|
|
|
## Replace Vulnerability Findings REST API with GraphQL
|
|
|
|
To prepare for the [upcoming deprecation](https://gitlab.com/groups/gitlab-org/-/epics/5118) of
|
|
the Vulnerability Findings REST API endpoint, use the examples below to perform the equivalent operations
|
|
with the GraphQL API.
|
|
|
|
### GraphQL - Project vulnerability findings
|
|
|
|
Use [`Pipeline.securityReportFindings`](graphql/reference/_index.md#pipelinesecurityreportfindings).
|
|
|
|
```graphql
|
|
query VulnerabilityFindings {
|
|
project(fullPath: "gitlab-examples/security/security-reports") {
|
|
pipelines(first:1) {
|
|
nodes {
|
|
securityReportFindings(first:1) {
|
|
nodes {
|
|
title
|
|
severity
|
|
state
|
|
scanner {
|
|
externalId
|
|
name
|
|
vendor
|
|
}
|
|
identifiers {
|
|
externalType
|
|
externalId
|
|
name
|
|
url
|
|
}
|
|
uuid
|
|
falsePositive
|
|
description
|
|
location {
|
|
... on VulnerabilityLocationSast {
|
|
file
|
|
startLine
|
|
endLine
|
|
vulnerableClass
|
|
vulnerableMethod
|
|
blobPath
|
|
}
|
|
|
|
... on VulnerabilityLocationContainerScanning {
|
|
dependency {
|
|
package {
|
|
name
|
|
}
|
|
version
|
|
}
|
|
image
|
|
operatingSystem
|
|
}
|
|
|
|
... on VulnerabilityLocationDependencyScanning {
|
|
file
|
|
blobPath
|
|
dependency {
|
|
version
|
|
}
|
|
}
|
|
}
|
|
remediations {
|
|
diff
|
|
summary
|
|
}
|
|
solution
|
|
evidence {
|
|
request {
|
|
body
|
|
headers {
|
|
name
|
|
value
|
|
}
|
|
method
|
|
url
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
Example response:
|
|
|
|
```json
|
|
{
|
|
"data": {
|
|
"project": {
|
|
"pipelines": {
|
|
"nodes": [
|
|
{
|
|
"securityReportFindings": {
|
|
"nodes": [
|
|
{
|
|
"title": "Deserialization of Untrusted Data",
|
|
"severity": "CRITICAL",
|
|
"state": "CONFIRMED",
|
|
"scanner": {
|
|
"externalId": "gemnasium",
|
|
"name": "Gemnasium",
|
|
"vendor": "GitLab"
|
|
},
|
|
"identifiers": [
|
|
{
|
|
"externalType": "gemnasium",
|
|
"externalId": "b60c2d6b-9083-4a97-a1b2-f7dc79bff74c",
|
|
"name": "Gemnasium-b60c2d6b-9083-4a97-a1b2-f7dc79bff74c",
|
|
"url": "https://gitlab.com/gitlab-org/security-products/gemnasium-db/-/blob/master/gem/activerecord/CVE-2022-32224.yml"
|
|
},
|
|
{
|
|
"externalType": "cve",
|
|
"externalId": "CVE-2022-32224",
|
|
"name": "CVE-2022-32224",
|
|
"url": "https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-32224"
|
|
},
|
|
{
|
|
"externalType": "ghsa",
|
|
"externalId": "GHSA-3hhc-qp5v-9p2j",
|
|
"name": "GHSA-3hhc-qp5v-9p2j",
|
|
"url": "https://github.com/advisories/GHSA-3hhc-qp5v-9p2j"
|
|
}
|
|
],
|
|
"uuid": "c9e40395-72cd-54f5-962f-e1d52c0dffab",
|
|
"falsePositive": false,
|
|
"description": "A possible escalation to RCE vulnerability exists when using YAML serialized columns in Active Record < 7.0.3.1, <6.1.6.1, <6.0.5.1 and <5.2.8.1 which could allow an attacker, that can manipulate data in the database (via means like SQL injection), the ability to escalate to an RCE.",
|
|
"location": {
|
|
"file": "dependency-scanning-files/Gemfile.lock",
|
|
"blobPath": null,
|
|
"dependency": {
|
|
"version": "5.0.0"
|
|
}
|
|
},
|
|
"remediations": [],
|
|
"solution": "Upgrade to versions 5.2.8.1, 6.0.5.1, 6.1.6.1, 7.0.3.1 or above.",
|
|
"evidence": null
|
|
}
|
|
]
|
|
}
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
}
|
|
```
|