Digital exposure report
gitlab.com
High exposure. Significant weaknesses put the brand, customers and email at risk.
Scanned: 2026-11-15 19:22 UTC
Full coverage: every applicable check was assessed.
What to do first
- 1.
Limit what scripts your pages are allowed to run
This adds one layer of protection against injected scripts.
Who can fix it: Your website developer or web host
How to verify after the fix
curl -sIL https://gitlab.com/ | grep -i "Content-Security-Policy"
- 2.
Turn on DNS signing for your domain
Signing helps resolvers detect forged answers about your domain.
Who can fix it: Your domain registrar or DNS provider
How to verify after the fix
dig +short DS gitlab.com
A starting point, not a security guarantee.
What this grade means
- Tested hostname
- gitlab.com
- Website request
- GET https://gitlab.com/ → https://about.gitlab.com/
- Scan time
- 2026-11-15 19:22:32 UTC
- Grading method
- Version 2How grading works
- Unverified or excluded checks
- None. Every applicable check was assessed.
This is a snapshot of the public configuration checks listed in this report. It does not verify the site's owner, business legitimacy, application security, or absence of vulnerabilities. It is not a security certification.
Score by category
| Email security | 29/30 | Spoofing email from this domain is hard. |
| Encryption & certificate | 25/25 | Traffic to the site is encrypted and the certificate is valid. |
| Browser protections | 7/30 | Several browser hardening headers are missing, which removes layers of protection against script injection and framing. |
| DNS infrastructure | 8/15 | The domain's infrastructure works, but recommended hardening is missing. |
Fix priorities
- 1.MediumClickjacking protection · Hardening gap+5
- 2.MediumDNSSEC — signed DNS records · Hardening gap+7
- 3.MediumCSP — protection from script injection · Hardening gap+8
- 4.LowX-Content-Type-Options · Hardening gap+4
- 5.LowReferrer-Policy · Hardening gap+3
- 6.LowPermissions-Policy · Hardening gap+2
Findings
SPF — who may send mail for the domain
Passed · Severity: OK · 9/10An authorized sender list is defined; mail from other servers is flagged as suspicious.
~all (softfail) — acceptable when combined with enforced DMARC. 1 of 10 DNS lookups.
v=spf1 include:%{i}._ip.%{h}._ehlo.%{d}._spf.vali.email ~all$ dig +short TXT gitlab.com
DMARC — anti-spoofing policy
Passed · Severity: OK · 15/15Forged email in the company's name is blocked by mail servers.
Policy p=reject.
v=DMARC1; p=reject; pct=100; rua=mailto:dmarc_agg@vali.email;
$ dig +short TXT _dmarc.gitlab.com
DKIM — digital signature on email
Passed · Severity: OK · 5/5A DKIM public key is published. On its own this doesn't prove outgoing mail is signed or aligned with your From domain.
DKIM public key found for selector: google, k1, mail. Confirm signing with dkim=pass in a sent message's Authentication-Results.
google._domainkey: v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCA5+ebKcaMAURa2i9I+RHKoGlcO+/bd3tr… k1._domainkey: k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDbNrX2cY/GUKIFx2G/1I00ftdAj713WP9AQ1xir85i8… mail._domainkey: v=DKIM1;k=rsa;p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQSga8sIidjqKTlTWBfV6KoUvJm7InbqtfNX…
$ dig +short TXT google._domainkey.gitlab.com
MX — inbound mail routing
Passed · Severity: OK · unscoredMail exchangers are published for the domain.
5 MX record(s). This shows where inbound mail is routed, not whether mail is sent from the domain.
1 aspmx.l.google.com 10 alt3.aspmx.l.google.com 10 alt4.aspmx.l.google.com 5 alt1.aspmx.l.google.com 5 alt2.aspmx.l.google.com
$ dig +short MX gitlab.com
HTTPS available
Passed · Severity: OK · 10/10The site loads over an encrypted connection.
https://gitlab.com/ returned HTTP 200 (final URL: https://about.gitlab.com/). Client-side certificate validation passed.
HTTP 200 Final URL: https://about.gitlab.com/
$ curl -sIL https://gitlab.com/
HTTP → HTTPS redirect
Passed · Severity: OK · 7/7Visitors arriving at an unencrypted address are automatically sent to the secure version.
HTTP 301 → https://gitlab.com/
HTTP 301 Location: https://gitlab.com/
$ curl -sI http://gitlab.com/ | grep -iE "^(HTTP|location)"
SSL/TLS certificate validity
Passed · Severity: OK · 8/8The certificate was accepted by a validating TLS client at scan time.
Live TLS handshake succeeded. Latest issuance in CT logs: Sectigo, expiring 2027-05-12 (178 days). CT shows issued certificates, not necessarily the one served — confirm dates with the verify command.
Live TLS handshake: certificate accepted CT logs (context only, not scored): Issuer: Sectigo Valid from: 2026-10-26 Valid until: 2027-05-12 Names: auth.gitlab.com, customers.gitlab.com, email.customers.gitlab.com, gitlab.com, gprd.gitlab.com, www.gitlab.com Based on Certificate Transparency logs; may not reflect the certificate currently served.
$ echo | openssl s_client -connect gitlab.com:443 -servername gitlab.com 2>/dev/null | openssl x509 -noout -issuer -dates
HSTS — enforce encryption in the browser
Passed · Severity: OK · 7/8Browsers are told to always use an encrypted connection to the site.
max-age=31536000 (365 days), no includeSubDomains. ≥ 180 days recommended.
Strict-Transport-Security: max-age=31536000
$ curl -sIL https://gitlab.com/ | grep -i "Strict-Transport-Security"
CSP — protection from script injection
Failed · Severity: Medium · Hardening gap · 0/8Missing Content-Security-Policy header: this removes one layer of protection against script injection.
No Content-Security-Policy header found.
Content-Security-Policy: (missing)
$ curl -sIL https://gitlab.com/ | grep -i "Content-Security-Policy"
- First publish Content-Security-Policy-Report-Only — it blocks nothing, it only reports.
- Collect violations for a week or two and tune the policy to your legitimate sources.
- Switch to the Content-Security-Policy header and replace 'unsafe-inline' with a nonce or hash.
/* Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'; frame-ancestors 'self'
Safety: This change is made in your server/CDN settings. Test on staging before production. An overly strict CSP will break scripts — that's why you start in Report-Only mode.
Clickjacking protection
Failed · Severity: Medium · Hardening gap · 0/5Missing X-Frame-Options / frame-ancestors: this removes one layer of protection against clickjacking.
No valid X-Frame-Options and no frame-ancestors in the CSP.
X-Frame-Options: (missing)
$ curl -sIL https://gitlab.com/ | grep -i "X-Frame-Options"
- Add X-Frame-Options: SAMEORIGIN (or DENY if the site is never embedded anywhere).
- Also set frame-ancestors in the CSP — the modern alternative.
/* X-Frame-Options: SAMEORIGIN
Safety: This change is made in your server/CDN settings. Test on staging before production. If partners embed the site in an iframe, add them to frame-ancestors instead of using DENY.
X-Content-Type-Options
Failed · Severity: Low · Hardening gap · 0/4The browser may interpret files as code unintentionally.
Missing X-Content-Type-Options: nosniff header (MIME sniffing).
X-Content-Type-Options: (missing)
$ curl -sIL https://gitlab.com/ | grep -i "X-Content-Type-Options"
- Add X-Content-Type-Options: nosniff to every response.
/* X-Content-Type-Options: nosniff
Safety: This change is made in your server/CDN settings. Test on staging before production.
Referrer-Policy
Failed · Severity: Low · Hardening gap · 0/3Internal URLs (including parameters) may leak to external sites.
Referrer-Policy is missing; the browser will use its default.
Referrer-Policy: (missing)
$ curl -sIL https://gitlab.com/ | grep -i "Referrer-Policy"
- Set Referrer-Policy: strict-origin-when-cross-origin.
/* Referrer-Policy: strict-origin-when-cross-origin
Safety: This change is made in your server/CDN settings. Test on staging before production.
Permissions-Policy
Needs attention · Severity: Low · Hardening gap · 0/2Access to sensitive features like the camera and location isn't restricted.
Missing Permissions-Policy header.
Permissions-Policy: (missing)
$ curl -sIL https://gitlab.com/ | grep -i "Permissions-Policy"
- Disable browser features the site doesn't need (camera, microphone, geolocation).
/* Permissions-Policy: camera=(), microphone=(), geolocation=()
Safety: This change is made in your server/CDN settings. Test on staging before production. Don't disable a feature the site actually uses.
Software version disclosure
Passed · Severity: OK · unscoredThe server doesn't disclose software versions.
No version numbers found in the Server / X-Powered-By headers.
server: cloudflare x-powered-by: (missing)
$ curl -sIL https://gitlab.com/ | grep -iE "^(server|x-powered-by)"
DNSSEC — signed DNS records
Needs attention · Severity: Medium · Hardening gap · 0/7The domain's records aren't signed, so in some scenarios users could be redirected to a forged server.
No DS record is published at the parent zone, so there's no DNSSEC chain of trust for this zone.
AD = false DS gitlab.com: NODATA
$ dig +short DS gitlab.com
- Enable DNSSEC at your DNS provider (one click at most providers).
- Copy the DS record your provider generates to your domain registrar.
- Wait for propagation and verify with DNSViz.
dig +dnssec gitlab.com SOA delv gitlab.com
Safety: DNS changes are made only at your DNS provider. This tool only reads public data and changes nothing on the domain. A wrong DS record at the registrar will make the domain stop resolving — copy it exactly from the provider.
CAA — who may issue certificates
Passed · Severity: OK · 5/5Only authorized certificate authorities can issue certificates for the domain.
CAA records: 0 iodef "mailto:security@gitlab.com" | 0 issue "amazon.com" | 0 issue "amazonaws.com" | 0 issue "amazontrust.com" | 0 issue "awstrust.com" | 0 issue "comodoca.com" | 0 issue "digicert.com; cansignhttpexchanges=yes" | 0 issue "globalsign.com" | 0 issue "letsencrypt.org" | 0 issue "pki.goog; cansignhttpexchanges=yes" | 0 issue "sectigo.com" | 0 issue "ssl.com" | 0 issuewild "comodoca.com" | 0 issuewild "digicert.com; cansignhttpexchanges=yes" | 0 issuewild "letsencrypt.org" | 0 issuewild "pki.goog; cansignhttpexchanges=yes" | 0 issuewild "ssl.com"
0 iodef "mailto:security@gitlab.com" 0 issue "amazon.com" 0 issue "amazonaws.com" 0 issue "amazontrust.com" 0 issue "awstrust.com" 0 issue "comodoca.com" 0 issue "digicert.com; cansignhttpexchanges=yes" 0 issue "globalsign.com" 0 issue "letsencrypt.org" 0 issue "pki.goog; cansignhttpexchanges=yes" 0 issue "sectigo.com" 0 issue "ssl.com" 0 issuewild "comodoca.com" 0 issuewild "digicert.com; cansignhttpexchanges=yes" 0 issuewild "letsencrypt.org" 0 issuewild "pki.goog; cansignhttpexchanges=yes" 0 issuewild "ssl.com"
$ dig +short CAA gitlab.com
DNS server redundancy
Passed · Severity: OK · 3/3The domain is served by several DNS servers, so one server failing won't take it down.
2 NS servers.
diva.ns.cloudflare.com jermaine.ns.cloudflare.com
$ dig +short NS gitlab.com
Indicative alignment
Best-practice mapping of public findings to common frameworks. Passive scanning tests public configuration only; it doesn't prove compliance or a violation.
- Google & Yahoo sender rulesNo gaps observed
- PCI DSS v4.02 observed gaps
- NIS2 / vendor due diligence1 observed gaps
- SOC 2 / ISO 27001 baseline3 observed gaps
Indicative alignment only, based on public configuration. It doesn't establish whether a framework applies to you, and it isn't legal advice, an audit or a certification.
Public DNS records
| A | gitlab.com | 172.65.251.78 |
| AAAA | gitlab.com | 2606:4700:90:0:f22e:fbec:5bed:a9b9 |
| MX | gitlab.com | 1 aspmx.l.google.com | 10 alt3.aspmx.l.google.com | 10 alt4.aspmx.l.google.com | 5 alt1.aspmx.l.google.com | 5 alt2.aspmx.l.google.com |
| NS | gitlab.com | diva.ns.cloudflare.com | jermaine.ns.cloudflare.com |
| TXT | gitlab.com | MS=ms60523131 | MS=ms83893381 | _globalsign-domain-verification=4azHJ7gL04Dr8r2VR0txu7OrWg7uZpU6v7LOHVP1b3 | adobe-idp-site-verification=5a5e001556a2c0595ed571d2a1f7b5f8a749a00742853e035eb909bdd31622b8 | apple-domain-verification=UNUD9vY0Jp9z5TjO | asv=3f763643512ad5bdcc0d42caea1b3951 | atlassian-domain-verification=jDVDxUSCDYQHl7am9SOdsXCrPMLIsqNVali02wn0GxbAt6Pd2xqePpvkMeP5Gx4k | decagon-domain-verification-cmrbvs=Lb6bOM0iABwwrWBstDaKWS3U8 | docusign=1a7d6818-2cf5-4956-a9fb-c3d2e9a578dd | drift-domain-verification=fa583cfff88c496bcc62651057550656a98ab3e689c314255a1a6ae848e3e56d | gitlab-pages-verification-code=5228e61c992af7e65f5f5160f0587fb4 | google-site-verification=6Cb3PPpoMp6-xRavXf2HZz03s7pplQeG5MiUaPGIu_Q | google-site-verification=QiG7NTIWpedorFi71mMN7OVe2Fo_yA6RclsxO8stOa8 | google-site-verification=XDRo7LEOqv6OV0RfGDFh7G2XgpzdycygGJBqde334q4 | google-site-verification=iWR2UGQb3MvVY83zY47ZFrGFVFLG6ADfpjqchlQjnok | google-site-verification=lnPjOx5EAxmESH8FSn4colWVMAxe18K4ZIopDB1IEDY | google-site-verification=uT9dAMjaTlnkbC0VnN5flFWp0Bsze7zHObWjZwkd2p8 | google-site-verification=vPPg6DGiVgf5vhzQg5zGISLao6-07-lVzzpqvmCFe5Y | jamf-site-verification=nRPNM9HJGzWzUkvBtgvBrg | mgverify=2dd945066758840fe3bfbd9ccf90e2c6000458f13345baa576338880dcc86658 | mgverify=9549a96a4bc9886fbf483bcd56872eaf2b5b9e690d264024041cf446664cb114 | onetrust-domain-verification=84b59aa2659244d486b0b86f5db073dd | onetrust-domain-verification=af5b5fda116e45a9b4c4abcd9e571923 | openai-domain-verification=dv-Uq90dak9n7LidGh0WsdFOOUu | serval-domain-verification-rahzqw=w9adwbCM3CJ9BrXnAleSWuMqz | smartsheet-site-validation=wTADkxxpf97DU9ZxO4RuFpZJyRvP7MRm | stripe-verification=E331E16D59119AEFB547211475C2E225C1BF6EB8CB885D300536B2852EAD3D74 | uber-domain-verification=38ba2b7b-5ae3-4694-9701-086b20ea3d36 | v=MCPv1; k=ed25519; p=MmZM6XexKcX4jiWqHtn3M0av9Q7HDmonAdP6PqktwX0= | v=spf1 include:%{i}._ip.%{h}._ehlo.%{d}._spf.vali.email ~all | verification_token=8FqT6wRlbrh3HQcHHiKudS5Ru | zapier-domain-verification-challenge=a1d665be-8176-4ada-9707-4332dfa7a2cc |
| TXT | _dmarc.gitlab.com | v=DMARC1; p=reject; pct=100; rua=mailto:dmarc_agg@vali.email; |
| CAA | gitlab.com | 0 iodef "mailto:security@gitlab.com" | 0 issue "amazon.com" | 0 issue "amazonaws.com" | 0 issue "amazontrust.com" | 0 issue "awstrust.com" | 0 issue "comodoca.com" | 0 issue "digicert.com; cansignhttpexchanges=yes" | 0 issue "globalsign.com" | 0 issue "letsencrypt.org" | 0 issue "pki.goog; cansignhttpexchanges=yes" | 0 issue "sectigo.com" | 0 issue "ssl.com" | 0 issuewild "comodoca.com" | 0 issuewild "digicert.com; cansignhttpexchanges=yes" | 0 issuewild "letsencrypt.org" | 0 issuewild "pki.goog; cansignhttpexchanges=yes" | 0 issuewild "ssl.com" |
| DS | gitlab.com | — |