Skip to content

CSRF token fixation in fastify-passport

Moderate severity GitHub Reviewed Published Apr 21, 2023 in fastify/fastify-passport • Updated Nov 9, 2023

Package

npm @fastify/passport (npm)

Affected versions

< 1.1.0
>= 2.0.0, < 2.3.0

Patched versions

1.1.0
2.3.0

Description

The CSRF protection enforced by the @fastify/csrf-protection library, when combined with @fastify/passport, can be bypassed by network and same-site attackers.

Details

fastify/csrf-protection implements the synchronizer token pattern (using plugins @fastify/session and @fastify/secure-session) by storing a random value used for CSRF token generation in the _csrf attribute of a user's session.

The @fastify/passport library does not clear the session object upon authentication, preserving the _csrf attribute between pre-login and authenticated sessions. Consequently, CSRF tokens generated before authentication are still valid. Network and same-site attackers can thus obtain a CSRF token for their pre-session, fixate that pre-session in the victim's browser via cookie tossing, and then perform a CSRF attack after the victim authenticates.

Fix

As a solution, newer versions of @fastify/passport include the configuration options

  • clearSessionOnLogin (default: true) and
  • clearSessionIgnoreFields (default: ['session'])

to clear all the session attributes by default, preserving those explicitly defined in clearSessionIgnoreFields.

Credits

References

@mcollina mcollina published to fastify/fastify-passport Apr 21, 2023
Published to the GitHub Advisory Database Apr 21, 2023
Reviewed Apr 21, 2023
Published by the National Vulnerability Database Apr 21, 2023
Last updated Nov 9, 2023

Severity

Moderate
6.5
/ 10

CVSS base metrics

Attack vector
Network
Attack complexity
Low
Privileges required
None
User interaction
Required
Scope
Unchanged
Confidentiality
None
Integrity
High
Availability
None
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:N

Weaknesses

CVE ID

CVE-2023-29020

GHSA ID

GHSA-2ccf-ffrj-m4qw

Credits

Checking history
See something to contribute? Suggest improvements for this vulnerability.