Tool Reviews

GitLab Ultimate Security Features: Built-In Security Done Pragmatically

A review of GitLab Ultimate's security scanning features covering SAST, DAST, dependency scanning, container scanning, and how integrated security compares to best-of-breed tools.

Shadab Khan
Application Security Engineer
5 min read

GitLab's pitch for security is straightforward: instead of buying separate tools for SAST, SCA, container scanning, and DAST, use the ones built into GitLab. The appeal is obvious. Fewer tools to manage, fewer integrations to maintain, and security findings that live alongside the code in a single platform. The question is whether "good enough" integrated security is actually good enough.

What You Get

GitLab Ultimate (the top tier) includes:

  • SAST: Static analysis powered by Semgrep, SpotBugs, Gosec, and other open source analyzers
  • Dependency Scanning: SCA using Gemnasium (GitLab's analyzer) and retire.js
  • Container Scanning: Image analysis using Trivy
  • DAST: Dynamic application security testing
  • Secret Detection: Credential scanning in code and commit history
  • License Compliance: Open source license policy enforcement
  • Fuzz Testing: Coverage-guided and API fuzzing

Each feature is implemented as a CI/CD job that runs in your GitLab pipeline. Results appear in merge requests as a security report widget and aggregate in the Security Dashboard at the project and group levels.

The Integration Advantage

The biggest advantage of GitLab's approach is workflow integration. Security findings appear directly in merge requests. Developers see vulnerabilities in the same interface where they review code. There is no context switching to a separate security dashboard, no separate login, no additional tool to learn.

The merge request security widget shows new findings introduced by the branch, which is the right scoping for developer feedback. You see what your code changed, not the accumulated debt of the entire project. This diff-based approach prevents the "wall of findings" problem that causes developers to ignore security tools.

GitLab's vulnerability management workflow is built into the issue tracker. You can create issues from vulnerabilities, track remediation status, and link fixes back to the original finding. For teams that live in GitLab, this is genuinely seamless.

Dependency Scanning Quality

GitLab's dependency scanning uses Gemnasium, their internally-developed analyzer, supplemented by data from the GitLab Advisory Database. The advisory database aggregates data from NVD, GitHub Advisories, and community submissions.

Detection quality is reasonable for mainstream ecosystems. In our testing across JavaScript, Python, and Java projects, GitLab's dependency scanning caught approximately 85% of what Snyk found. The 15% gap was primarily in advisory coverage for less common packages and in remediation guidance quality.

Where GitLab falls short is in the developer experience around fixes. Snyk generates fix PRs. GitLab tells you about the vulnerability and leaves remediation to the developer. For teams with strong security engineering, this is fine. For teams where developers need guidance, the gap matters.

Container Scanning

GitLab uses Trivy under the hood for container scanning. This is a smart choice because Trivy is the strongest open source container scanner available. The detection quality is essentially Trivy's detection quality, which is excellent.

The integration adds GitLab-specific features: automatic scanning of images built in CI, vulnerability deduplication between container and dependency scans, and inclusion in the security dashboard.

One limitation: GitLab's container scanning only processes images built in the pipeline. If you pull third-party images that are not built in CI, you need separate scanning. Most organizations have a mix of self-built and third-party images.

SAST Quality

GitLab's SAST has improved significantly since they adopted Semgrep as the primary analyzer for many languages. Previous versions used a mix of open source tools with inconsistent quality. The Semgrep-based analysis provides reasonable coverage for common vulnerability patterns.

The SAST quality is adequate for catching common issues: SQL injection, cross-site scripting, hardcoded credentials, and insecure cryptography. It does not match the depth of dedicated SAST tools like Checkmarx or CodeQL for complex data flow vulnerabilities, but it catches the low-hanging fruit that represents the majority of real-world exploits.

Security Dashboard

The Security Dashboard provides project-level and group-level views of all security findings. You can filter by scanner type, severity, status, and project. The dashboard tracks vulnerability trends over time, which is useful for measuring program progress.

The group-level dashboard is particularly valuable for security teams overseeing multiple projects. It provides the "how are we doing across the organization" view that standalone tools often lack or charge extra for.

However, the dashboard is not as sophisticated as dedicated vulnerability management platforms. Advanced features like risk-based prioritization, SLA tracking, and automated triage workflows are limited compared to tools like Snyk or Veracode.

Pricing Considerations

GitLab Ultimate costs $99 per user per month. For an organization with 100 developers, that is roughly $120,000 annually. This includes all security features plus GitLab's other premium features (portfolio management, compliance, advanced CI/CD).

Compared to buying separate tools: Snyk Team at $25,000-75,000 plus a SAST tool at $50,000-150,000 plus a DAST tool at $30,000-100,000 adds up to more than GitLab Ultimate in many scenarios. The consolidated cost argument is real.

The catch is that GitLab Ultimate only makes economic sense if you are also using GitLab for source control and CI/CD. If you are on GitHub or Bitbucket, adopting GitLab just for security features is not practical.

The Verdict

GitLab Ultimate's security features are good enough for many organizations. Not best-in-class in any single category, but competent across the board. The integration advantage is real and should not be underestimated. Security tools that developers actually see and use are more valuable than superior tools that get ignored.

For organizations with mature security programs and specific needs (deep SAST analysis, comprehensive SCA with reachability, advanced container security), supplement GitLab's built-in features with dedicated tools where the gaps matter most.

How Safeguard.sh Helps

Safeguard.sh extends GitLab's built-in security with deeper supply chain analysis. While GitLab provides scanning at the pipeline level, Safeguard.sh manages the full SBOM lifecycle, tracks vulnerabilities across your software portfolio over time, and provides the cross-project correlation that GitLab's per-project model does not address. For GitLab users who need to meet SBOM compliance requirements or want organizational-level supply chain visibility, Safeguard.sh adds the dedicated supply chain security layer that a general-purpose DevOps platform cannot prioritize.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.