Skip to content

Commit 3277f28

Browse files
committed
cookie: restrict the SameSite options for the state and csrf cookies
Signed-off-by: Hans Zandbelt <[email protected]>
1 parent c889f14 commit 3277f28

File tree

3 files changed

+15
-5
lines changed

3 files changed

+15
-5
lines changed

auth_openidc.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@
601601
# OIDCCookieSameSite Strict None
602602
#
603603
# When not defined the default is On (Lax).
604-
#OIDCCookieSameSite On|Off|Strict|Lax|None|Disabled [On|Off|Lax|None|Disabled] [On|Off|Strict|Lax|None|Disabled]
604+
#OIDCCookieSameSite On|Off|Strict|Lax|None|Disabled [Lax|None|Disabled] [Strict|Lax|None|Disabled]
605605

606606
# Specify the names of cookies to pick up from the browser and send along on backchannel
607607
# calls to the OP and AS endpoints. This can be used for load-balancing purposes.

src/cfg/cfg.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -587,17 +587,20 @@ const char *oidc_cmd_cookie_same_site_session_set(cmd_parms *cmd, void *m, const
587587
&cfg->cookie_same_site_session);
588588
if ((rv == NULL) && (arg2 != NULL)) {
589589
static const oidc_cfg_option_t state_options[] = {
590-
{OIDC_SAMESITE_COOKIE_NONE, OIDC_SAMESITE_COOKIE_OFF_STR},
591-
{OIDC_SAMESITE_COOKIE_LAX, OIDC_SAMESITE_COOKIE_ON_STR},
592590
{OIDC_SAMESITE_COOKIE_DISABLED, OIDC_SAMESITE_COOKIE_DISABLED_STR},
593591
{OIDC_SAMESITE_COOKIE_NONE, OIDC_SAMESITE_COOKIE_NONE_STR},
594592
{OIDC_SAMESITE_COOKIE_LAX, OIDC_SAMESITE_COOKIE_LAX_STR}};
595593
rv = oidc_cfg_parse_option_ignore_case(cmd->pool, state_options, OIDC_CFG_OPTIONS_SIZE(state_options),
596594
arg2, &cfg->cookie_same_site_state);
597595
}
598596
if ((rv == NULL) && (arg3 != NULL)) {
599-
rv = oidc_cfg_parse_option_ignore_case(cmd->pool, options, OIDC_CFG_OPTIONS_SIZE(options), arg3,
600-
&cfg->cookie_same_site_discovery_csrf);
597+
static const oidc_cfg_option_t csrf_options[] = {
598+
{OIDC_SAMESITE_COOKIE_DISABLED, OIDC_SAMESITE_COOKIE_DISABLED_STR},
599+
{OIDC_SAMESITE_COOKIE_NONE, OIDC_SAMESITE_COOKIE_NONE_STR},
600+
{OIDC_SAMESITE_COOKIE_LAX, OIDC_SAMESITE_COOKIE_LAX_STR},
601+
{OIDC_SAMESITE_COOKIE_STRICT, OIDC_SAMESITE_COOKIE_STRICT_STR}};
602+
rv = oidc_cfg_parse_option_ignore_case(cmd->pool, csrf_options, OIDC_CFG_OPTIONS_SIZE(csrf_options),
603+
arg3, &cfg->cookie_same_site_discovery_csrf);
601604
}
602605
return OIDC_CONFIG_DIR_RV(cmd, rv);
603606
}

test/test_cfg.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,14 @@ START_TEST(test_cmd_cookie_same_site) {
150150
ck_assert_int_eq(oidc_cfg_cookie_same_site_state_get(cfg), OIDC_SAMESITE_COOKIE_NONE);
151151
ck_assert_int_eq(oidc_cfg_cookie_same_site_discovery_csrf_get(cfg), OIDC_SAMESITE_COOKIE_NONE);
152152

153+
ck_assert_ptr_null(oidc_cmd_cookie_same_site_session_set(cmd, NULL, "Disabled", NULL, NULL));
154+
ck_assert_int_eq(oidc_cfg_cookie_same_site_session_get(cfg), OIDC_SAMESITE_COOKIE_DISABLED);
155+
ck_assert_int_eq(oidc_cfg_cookie_same_site_state_get(cfg), OIDC_SAMESITE_COOKIE_DISABLED);
156+
ck_assert_int_eq(oidc_cfg_cookie_same_site_discovery_csrf_get(cfg), OIDC_SAMESITE_COOKIE_DISABLED);
157+
153158
ck_assert_ptr_nonnull(oidc_cmd_cookie_same_site_session_set(cmd, NULL, "InvalidValue", NULL, NULL));
159+
ck_assert_ptr_nonnull(oidc_cmd_cookie_same_site_session_set(cmd, NULL, "Strict", "On", NULL));
160+
ck_assert_ptr_nonnull(oidc_cmd_cookie_same_site_session_set(cmd, NULL, "Strict", "Lax", "Off"));
154161

155162
ck_assert_ptr_null(oidc_cmd_cookie_same_site_session_set(cmd, NULL, "Strict", "None", NULL));
156163
ck_assert_int_eq(oidc_cfg_cookie_same_site_session_get(cfg), OIDC_SAMESITE_COOKIE_STRICT);

0 commit comments

Comments
 (0)