Add latest changes from gitlab-org/gitlab@master
This commit is contained in:
parent
174dd7b6a0
commit
b965e0de0f
|
|
@ -30,6 +30,7 @@ For each scanner, an analyzer:
|
|||
|
||||
SAST supports the following official analyzers:
|
||||
|
||||
- [Advanced SAST](gitlab_advanced_sast.md)
|
||||
- [`kubesec`](https://gitlab.com/gitlab-org/security-products/analyzers/kubesec) (Kubesec)
|
||||
- [`pmd-apex`](https://gitlab.com/gitlab-org/security-products/analyzers/pmd-apex) (PMD (Apex only))
|
||||
- [`semgrep`](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) (Semgrep)
|
||||
|
|
@ -57,7 +58,7 @@ DETAILS:
|
|||
**Offering:** GitLab.com, Self-managed, GitLab Dedicated
|
||||
**Status:** Experiment
|
||||
|
||||
The GitLab Advanced SAST analyzer offers a broader and more accurate static analysis for Python,
|
||||
The GitLab Advanced SAST analyzer offers a broader and more accurate static analysis for Python, Go, Java, JavaScript and C#
|
||||
particularly by providing cross-function and cross-file taint analysis.
|
||||
|
||||
It is not enabled by default. To enable it, please follow the instructions on the [GitLab Advanced SAST page](gitlab_advanced_sast.md).
|
||||
|
|
@ -89,13 +90,14 @@ content directly. Instead, it enhances the results with additional properties, i
|
|||
|
||||
## Transition to Semgrep-based scanning
|
||||
|
||||
SAST includes a [Semgrep-based analyzer](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) that covers [multiple languages](index.md#supported-languages-and-frameworks).
|
||||
In addition to the [GitLab Advanced SAST analyzer](gitlab_advanced_sast.md), GitLab also provides a [Semgrep-based analyzer](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) that covers [multiple languages](index.md#supported-languages-and-frameworks).
|
||||
GitLab maintains the analyzer and writes [detection rules](rules.md) for it.
|
||||
These rules replace language-specific analyzers that were used in previous releases.
|
||||
|
||||
### Vulnerability translation
|
||||
|
||||
The Vulnerability Management system automatically moves vulnerabilities from the old analyzer to a new Semgrep-based finding when possible.
|
||||
The Vulnerability Management system automatically moves vulnerabilities from the old analyzer to a new Semgrep-based finding when possible. For translation to the Advanced SAST, please refer to the [Advanced SAST documentation](gitlab_advanced_sast.md).
|
||||
|
||||
When this happens, the system combines the vulnerabilities from each analyzer into a single record.
|
||||
|
||||
But, vulnerabilities may not match up if:
|
||||
|
|
|
|||
|
|
@ -21,6 +21,8 @@ repository being scanned. There are two kinds of customization:
|
|||
- Replacing predefined rules by [building a custom configuration](#build-a-custom-configuration)
|
||||
using **passthroughs**. Available only for the [Semgrep-based analyzer](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep).
|
||||
|
||||
Advanced SAST supports only modifying the behavior of **predefined rules**, not replacing predefined rules.
|
||||
|
||||
## Disable predefined rules
|
||||
|
||||
You can disable predefined rules for any SAST analyzer.
|
||||
|
|
|
|||
|
|
@ -60,23 +60,29 @@ For more information about our plans for language support in SAST, see the [cate
|
|||
| Language / framework | [Analyzer](analyzers.md) used for scanning | Minimum supported GitLab version |
|
||||
|------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------|
|
||||
| .NET (all versions, C# only) | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 15.4 |
|
||||
| .NET (all versions, C# only) | [Advanced SAST](gitlab_advanced_sast.md) | 17.3 |
|
||||
| Apex (Salesforce) | [PMD](https://gitlab.com/gitlab-org/security-products/analyzers/pmd-apex) | 12.1 |
|
||||
| C | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 14.2 |
|
||||
| C/C++ | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 16.11 |
|
||||
| Elixir (Phoenix) | [Sobelow](https://gitlab.com/gitlab-org/security-products/analyzers/sobelow) | 11.1 |
|
||||
| Go | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 14.4 |
|
||||
| Go | [Advanced SAST](gitlab_advanced_sast.md) | 17.3 |
|
||||
| Groovy<sup>1</sup> | [SpotBugs](https://gitlab.com/gitlab-org/security-products/analyzers/spotbugs) with the find-sec-bugs plugin | 11.3 (Gradle) & 11.9 (Maven, SBT) |
|
||||
| Helm Charts | [Kubesec](https://gitlab.com/gitlab-org/security-products/analyzers/kubesec) | 13.1 |
|
||||
| Java (any build system) | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 14.10 |
|
||||
| Java (Android) | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 16.11 |
|
||||
| Java (any build system) | [Advanced SAST](gitlab_advanced_sast.md) | 17.3 |
|
||||
| JavaScript | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 13.10 |
|
||||
| JavaScript | [Advanced SAST](gitlab_advanced_sast.md) | 17.3 |
|
||||
| Kotlin (Android) | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 16.11 |
|
||||
| Kotlin (General)<sup>1</sup> | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 16.11 |
|
||||
| Kubernetes manifests | [Kubesec](https://gitlab.com/gitlab-org/security-products/analyzers/kubesec) | 12.6 |
|
||||
| Node.js | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 16.11 |
|
||||
| Node.js | [Advanced SAST](gitlab_advanced_sast.md) | 17.3 |
|
||||
| Objective-C (iOS) | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 16.11 |
|
||||
| PHP | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 16.11 |
|
||||
| Python | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 13.9 |
|
||||
| Python | [Advanced SAST](gitlab_advanced_sast.md) | 17.3 |
|
||||
| React | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 13.10 |
|
||||
| Ruby | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 16.11 |
|
||||
| Ruby on Rails | [Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep) with [GitLab-managed rules](rules.md#semgrep-based-analyzer) | 16.11 |
|
||||
|
|
@ -89,7 +95,7 @@ For more information about our plans for language support in SAST, see the [cate
|
|||
<html>
|
||||
Footnotes:
|
||||
<ol>
|
||||
<li>The SpotBugs-based analyzer supports <a href="https://gradle.org/">Gradle</a>, <a href="https://maven.apache.org/">Maven</a>, and <a href="https://www.scala-sbt.org/">SBT</a>. It can also be used with variants like the <a href="https://docs.gradle.org/current/userguide/gradle_wrapper.html">Gradle wrapper</a>, <a href="https://grails.org/">Grails</a>, and the <a href="https://github.com/takari/maven-wrapper">Maven wrapper</a>. However, SpotBugs has <a href="https://gitlab.com/gitlab-org/gitlab/-/issues/350801">limitations</a> when used against <a href="https://ant.apache.org/">Ant</a>-based projects. You should use the Semgrep-based analyzer for Ant-based Java or Scala projects.</li>
|
||||
<li>The SpotBugs-based analyzer supports <a href="https://gradle.org/">Gradle</a>, <a href="https://maven.apache.org/">Maven</a>, and <a href="https://www.scala-sbt.org/">SBT</a>. It can also be used with variants like the <a href="https://docs.gradle.org/current/userguide/gradle_wrapper.html">Gradle wrapper</a>, <a href="https://grails.org/">Grails</a>, and the <a href="https://github.com/takari/maven-wrapper">Maven wrapper</a>. However, SpotBugs has <a href="https://gitlab.com/gitlab-org/gitlab/-/issues/350801">limitations</a> when used against <a href="https://ant.apache.org/">Ant</a>-based projects. You should use the Advanced SAST or Semgrep-based analyzer for Ant-based Java or Scala projects.</li>
|
||||
<li>Requires a custom ruleset and an override to the semgrep-sast CI job. See <a href="https://docs.gitlab.com/ee/user/application_security/sast/index.html#scanning-rust-applications">Scanning Rust applications</a> for an example.</li>
|
||||
</ol>
|
||||
</html>
|
||||
|
|
@ -137,12 +143,12 @@ Advanced vulnerability tracking is available in a subset of the [supported langu
|
|||
|
||||
- C, in the Semgrep-based only
|
||||
- C++, in the Semgrep-based only
|
||||
- C#, in the Semgrep-based analyzer only
|
||||
- Go, in the Semgrep-based analyzer only
|
||||
- Java, in the Semgrep-based analyzer only
|
||||
- JavaScript, in the Semgrep-based analyzer only
|
||||
- C#, in the Advanced SAST and Semgrep-based analyzer only
|
||||
- Go, in the Advanced SAST and Semgrep-based analyzer only
|
||||
- Java, in the Advanced SAST and Semgrep-based analyzer only
|
||||
- JavaScript, in the Advanced SAST and Semgrep-based analyzer only
|
||||
- PHP, in the Semgrep-based analyzer only
|
||||
- Python, in the Semgrep-based analyzer only
|
||||
- Python, in the Advanced SAST and Semgrep-based analyzer only
|
||||
- Ruby, in the Semgrep-based analyzer only
|
||||
|
||||
Support for more languages and analyzers is tracked in [this epic](https://gitlab.com/groups/gitlab-org/-/epics/5144).
|
||||
|
|
@ -187,10 +193,10 @@ include:
|
|||
- template: Jobs/SAST.gitlab-ci.yml
|
||||
```
|
||||
|
||||
A FIPS-compliant image is only available for the Semgrep-based analyzer.
|
||||
A FIPS-compliant image is only available for the Advanced SAST and Semgrep-based analyzer.
|
||||
|
||||
WARNING:
|
||||
To use SAST in a FIPS-compliant manner, you must [exclude other analyzers from running](analyzers.md#customize-analyzers). If you use a FIPS-enabled image to run Semgrep in [a runner with non-root user](https://docs.gitlab.com/runner/install/kubernetes.html#running-with-non-root-user), you must update the `run_as_user` attribute under `runners.kubernetes.pod_security_context` to use the ID of `gitlab` user [created by the image](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep/-/blob/a5d822401014f400b24450c92df93467d5bbc6fd/Dockerfile.fips#L58), which is `1000`.
|
||||
To use SAST in a FIPS-compliant manner, you must [exclude other analyzers from running](analyzers.md#customize-analyzers). If you use a FIPS-enabled image to run Advanced SAST or Semgrep in [a runner with non-root user](https://docs.gitlab.com/runner/install/kubernetes.html#running-with-non-root-user), you must update the `run_as_user` attribute under `runners.kubernetes.pod_security_context` to use the ID of `gitlab` user [created by the image](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep/-/blob/a5d822401014f400b24450c92df93467d5bbc6fd/Dockerfile.fips#L58), which is `1000`.
|
||||
|
||||
## Output
|
||||
|
||||
|
|
@ -262,6 +268,8 @@ To configure SAST for a project you can:
|
|||
|
||||
You can enable SAST across many projects by [enforcing scan execution](../index.md#enforce-scan-execution).
|
||||
|
||||
To configure Advanced SAST (for Ultimate tier) please also follow these [instructions](gitlab_advanced_sast.md#configuration).
|
||||
|
||||
### Configure SAST in your CI/CD YAML
|
||||
|
||||
To enable SAST, you [include](../../../ci/yaml/index.md#includetemplate)
|
||||
|
|
@ -614,6 +622,34 @@ all [custom variables](../../../ci/variables/index.md#define-a-cicd-variable-in-
|
|||
to the underlying SAST analyzer images if
|
||||
[the SAST vendored template](#configuration) is used.
|
||||
|
||||
### Exclude code from analysis
|
||||
|
||||
You can mark individual lines, or blocks, of code to be excluded from being analyzed for
|
||||
vulnerabilities. You should manage all vulnerabilities through Vulnerability Management, or adjust the scanned file paths
|
||||
using `SAST_EXCLUDED_PATHS` before using this method of finding-by-finding comment annotation.
|
||||
|
||||
When using the Semgrep-based analyzer, the following options are also available:
|
||||
|
||||
- Ignore a line of code - add `// nosemgrep:` comment to the end of the line (the prefix is according to the development language).
|
||||
|
||||
Java example:
|
||||
|
||||
```java
|
||||
vuln_func(); // nosemgrep
|
||||
```
|
||||
|
||||
Python example:
|
||||
|
||||
```python
|
||||
vuln_func(); # nosemgrep
|
||||
```
|
||||
|
||||
- Ignore a line of code for specific rule - add `// nosemgrep: RULE_ID` comment at the end of the line (the prefix is according to the development language).
|
||||
|
||||
- Ignore a file or directory - create a `.semgrepignore` file in your repository's root directory or your project's working directory and add patterns for files and folders there.
|
||||
|
||||
For more details see [Semgrep documentation](https://semgrep.dev/docs/ignoring-files-folders-code).
|
||||
|
||||
## Running SAST in an offline environment
|
||||
|
||||
For self-managed GitLab instances in an environment with limited, restricted, or intermittent access
|
||||
|
|
@ -642,6 +678,7 @@ import the following default SAST analyzer images from `registry.gitlab.com` int
|
|||
[local Docker container registry](../../packages/container_registry/index.md):
|
||||
|
||||
```plaintext
|
||||
registry.gitlab.com/security-products/gitlab-advanced-sast:1
|
||||
registry.gitlab.com/security-products/kubesec:5
|
||||
registry.gitlab.com/security-products/pmd-apex:5
|
||||
registry.gitlab.com/security-products/semgrep:5
|
||||
|
|
|
|||
|
|
@ -0,0 +1,20 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module GitlabSubscriptions
|
||||
module InternalApiHelpers
|
||||
def internal_api(path)
|
||||
"/api/#{::API::API.version}/internal/gitlab_subscriptions/#{path}"
|
||||
end
|
||||
|
||||
def internal_api_headers
|
||||
{ 'X-Customers-Dot-Internal-Token' => 'internal-api-token' }
|
||||
end
|
||||
|
||||
def stub_internal_api_authentication
|
||||
allow(GitlabSubscriptions::API::Internal::Auth)
|
||||
.to receive(:verify_api_request)
|
||||
.with(hash_including(**internal_api_headers))
|
||||
.and_return(['decoded-token'])
|
||||
end
|
||||
end
|
||||
end
|
||||
Loading…
Reference in New Issue