summaryrefslogtreecommitdiff
path: root/.gitlab/ci/review-apps/dast.gitlab-ci.yml
blob: d0ad4d23a829278f4327eba795044a4f841a1ef5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
.dast_conf:
  tags:
    - prm
  # For scheduling dast job
  extends:
    - .reports:rules:schedule-dast
  image:
    name: "registry.gitlab.com/gitlab-org/security-products/dast:$DAST_VERSION"
  resource_group: dast_scan
  variables:
    DAST_USERNAME_FIELD: "user[login]"
    DAST_PASSWORD_FIELD: "user[password]"
    DAST_SUBMIT_FIELD: "commit"
    DAST_FULL_SCAN_ENABLED: "true"
    DAST_VERSION: 2
    GIT_STRATEGY: none
    # -Xmx is used to set the JVM memory to 6GB to prevent DAST OutOfMemoryError.
    DAST_ZAP_CLI_OPTIONS: "-Xmx6144m"
  before_script:
    - 'export DAST_WEBSITE="${DAST_WEBSITE:-$(cat environment_url.txt)}"'
    - 'export DAST_AUTH_URL="${DAST_WEBSITE}/users/sign_in"'
    - 'export DAST_PASSWORD="${REVIEW_APPS_ROOT_PASSWORD}"'
    # Help pages are excluded from scan as they are static pages.
    # profile/two_factor_auth is excluded from scan to prevent 2FA from being turned on from user profile, which will reduce coverage.
    - 'DAST_EXCLUDE_URLS="${DAST_WEBSITE}/help/.*,${DAST_WEBSITE}/-/profile/two_factor_auth,${DAST_WEBSITE}/users/sign_out"'
    # Exclude the automatically generated monitoring project from being tested due to https://gitlab.com/gitlab-org/gitlab/-/issues/260362
    - 'export DAST_EXCLUDE_URLS="${DAST_EXCLUDE_URLS},${DAST_WEBSITE}/gitlab-instance-.*"'
  needs: ["review-deploy"]
  stage: dast
  # Default job timeout set to 90m and dast rules needs 2h to so that it won't timeout.
  timeout: 2h
  # Add retry because of intermittent connection problems. See https://gitlab.com/gitlab-org/gitlab/-/issues/244313
  retry: 1
  artifacts:
    paths:
      - gl-dast-report.json  # GitLab-specific
    reports:
      dast: gl-dast-report.json
    expire_in: 1 week  # GitLab-specific
  allow_failure: true

# DAST scan with a subset of Release scan rules.
# ZAP rule details can be found at https://www.zaproxy.org/docs/alerts/

# 10019, 10021	Missing security headers
# 10023, 10024, 10025, 10037 Information Disclosure
# 10040	Secure Pages Include Mixed Content
# 10056	X-Debug-Token Information Leak
# Duration: 14 minutes 20 seconds

dast:secureHeaders-csp-infoLeak:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user1"
    DAST_ONLY_INCLUDE_RULES: "10019,10021,10023,10024,10025,10037,10040,10056"
  script:
    - /analyze

# 90023	XML External Entity Attack
# Duration: 41 minutes 20 seconds
# 90019	Server Side Code Injection
# Duration: 34 minutes 31 seconds
dast:XXE-SrvSideInj:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user2"
    DAST_ONLY_INCLUDE_RULES: "90023,90019"
  script:
    - /analyze

# 0	Directory Browsing
# 2	Private IP Disclosure
# 3	Session ID in URL Rewrite
# 7	Remote File Inclusion
# Duration: 63 minutes 43 seconds
# 90034 Cloud Metadata Potentially Exposed
# Duration: 13 minutes 48 seconds
# 90022	Application Error Disclosure
# Duration: 12 minutes 7 seconds
dast:infoLeak-fileInc-DirBrowsing:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user3"
    DAST_ONLY_INCLUDE_RULES: "0,2,3,7,90034,90022"
  script:
    - /analyze

# 10010	Cookie No HttpOnly Flag
# 10011	Cookie Without Secure Flag
# 10017	Cross-Domain JavaScript Source File Inclusion
# 10029	Cookie Poisoning
# 90033	Loosely Scoped Cookie
# 10054	Cookie Without SameSite Attribute
# Duration: 13 minutes 23 seconds
dast:insecureCookie:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user4"
    DAST_ONLY_INCLUDE_RULES: "10010,10011,10017,10029,90033,10054"
  script:
    - /analyze


# 20012	Anti-CSRF Tokens Check
# 10202	Absence of Anti-CSRF Tokens
# https://gitlab.com/gitlab-com/gl-security/appsec/appsec-team/-/issues/192

# Commented because of lot of FP's
# dast:csrfTokenCheck:
#   extends:
#     - .dast_conf
#   variables:
#     DAST_USERNAME: "user6"
#     DAST_ONLY_INCLUDE_RULES: "20012,10202"
#   script:
#     - /analyze

# 10098	Cross-Domain Misconfiguration
# 10105	Weak Authentication Method
# 40003	CRLF Injection
# 40008	Parameter Tampering
# Duration: 71 minutes 15 seconds
dast:corsMisconfig-weakauth-crlfInj:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user5"
    DAST_ONLY_INCLUDE_RULES: "10098,10105,40003,40008"
  script:
    - /analyze

# 20019 External Redirect
# 20014	HTTP Parameter Pollution
# Duration: 46 minutes 12 seconds
dast:extRedirect-paramPollution:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user6"
    DAST_ONLY_INCLUDE_RULES: "20019,20014"
  script:
    - /analyze

# 40022 SQL Injection - PostgreSQL
# Duration: 53 minutes 59 seconds
dast:sqlInjection:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user7"
    DAST_ONLY_INCLUDE_RULES: "40022"
  script:
    - /analyze

# 40014	Cross Site Scripting (Persistent)
# Duration: 21 minutes 50 seconds
dast:xss-persistent:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user8"
    DAST_ONLY_INCLUDE_RULES: "40014"
  script:
    - /analyze

# 40012 Cross Site Scripting (Reflected)
# Duration: 73 minutes 15 seconds
dast:xss-reflected:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user9"
    DAST_ONLY_INCLUDE_RULES: "40012"
  script:
    - /analyze

# 40013	Session Fixation
# Duration: 44 minutes 25 seconds
dast:sessionFixation:
  extends:
    - .dast_conf
  variables:
    DAST_USERNAME: "user10"
    DAST_ONLY_INCLUDE_RULES: "40013"
  script:
    - /analyze