CSRF token fixation in fastify-passport
Moderate severity
GitHub Reviewed
Published
Apr 21, 2023
in
fastify/fastify-passport
•
Updated Nov 9, 2023
Package
Affected versions
< 1.1.0
>= 2.0.0, < 2.3.0
Patched versions
1.1.0
2.3.0
Description
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
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 optionsclearSessionOnLogin (default: true)
andclearSessionIgnoreFields (default: ['session'])
to clear all the session attributes by default, preserving those explicitly defined in
clearSessionIgnoreFields
.Credits
References