Skip to content

Commit a406493

Browse files
committed
fix(iast): cookie vulnerability cardinality issues
1 parent 2d8fabd commit a406493

File tree

2 files changed

+60
-0
lines changed

2 files changed

+60
-0
lines changed

ddtrace/appsec/_iast/taint_sinks/insecure_cookie.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ class NoSameSite(VulnerabilityBase):
4848
def asm_check_cookies(cookies: Optional[Dict[str, str]]) -> None:
4949
if not cookies:
5050
return
51+
5152
if asm_config._iast_enabled and is_iast_request_enabled():
5253
try:
5354
for cookie_key, cookie_value in cookies.items():

tests/appsec/iast/taint_sinks/test_insecure_cookie.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import logging
12
import uuid
23

34
import pytest
@@ -121,6 +122,7 @@ def test_nosamesite_cookies_strict_no_error(iast_context_defaults):
121122
("csrftoken", True),
122123
("session", True),
123124
("sessionid", True),
125+
("session_id", True),
124126
("a" * 31, False),
125127
("b" * 32, False),
126128
("c" * 33, True),
@@ -148,6 +150,7 @@ def test_insecure_cookies_exclusions(iast_context_defaults, cookie_name, exclude
148150
[
149151
("session", False),
150152
("sessionid", False),
153+
("session_id", False),
151154
("I love Heavy Metal", False),
152155
("Dovahkiin, Dovahkiin naal ok zin los vahriin!!", False),
153156
("Classic Rock is the best", False),
@@ -194,6 +197,62 @@ def test_insecure_cookies_deduplication_defaults(iast_context_defaults):
194197
_end_iast_context_and_oce()
195198

196199

200+
@pytest.mark.parametrize(
201+
"regex",
202+
[
203+
("INVALID"),
204+
("\n"),
205+
],
206+
)
207+
def test_insecure_cookies_exclusions_env_var_invalid_regex(iast_context_defaults, regex):
208+
with override_global_config(
209+
dict(
210+
_iast_cookie_filter_pattern=regex,
211+
)
212+
):
213+
_start_iast_context_and_oce()
214+
cookies = [
215+
{"session_id": "bar"},
216+
{"sessionid": "bar"},
217+
{"valid": "bar"},
218+
]
219+
for cookie in cookies:
220+
asm_check_cookies(cookie)
221+
222+
span_report = _get_span_report()
223+
224+
assert span_report is None
225+
226+
_end_iast_context_and_oce()
227+
228+
229+
@pytest.mark.skip_iast_check_logs
230+
@pytest.mark.parametrize(
231+
"regex",
232+
[
233+
("|*"),
234+
("\|||\\\\\\\\\\"),
235+
],
236+
)
237+
def test_insecure_cookies_exclusions_env_var_invalid_regex_with_exception(iast_context_defaults, caplog, regex):
238+
with override_global_config(
239+
dict(
240+
_iast_cookie_filter_pattern=regex,
241+
_iast_debug=True
242+
)
243+
), caplog.at_level(logging.DEBUG):
244+
_start_iast_context_and_oce()
245+
cookies = {"session_id": "bar"}
246+
asm_check_cookies(cookies)
247+
248+
span_report = _get_span_report()
249+
250+
assert span_report is None
251+
252+
_end_iast_context_and_oce()
253+
assert any("[IAST] Propagation error. [IAST] error in asm_check_cookies" in record.message for record in caplog.records)
254+
255+
197256
def test_insecure_cookies_deduplication(iast_context_deduplication_enabled):
198257
_end_iast_context_and_oce()
199258
for num_vuln_expected in [1, 0, 0]:

0 commit comments

Comments
 (0)