CodeIgniter Shield Vulnerable to SameSite Attackers Bypassing the CSRF Protection
### Impact
This vulnerability may allow SameSite Attackers
https://canitakeyoursubdomain.name/ to bypass the CodeIgniter4 CSRF protection
https://codeigniter4.github.io/userguide/libraries/security.html mechanism with CodeIgniter Shield.
For this attack to succeed, the attacker must have direct (or indirect, e.g., XSS) control over a subdomain site (e.g., `https://a.example.com/`) of the target site (e.g., `http://example.com/`).
This vulnerability exists whether `Config\Security::$csrfProtection` is `'cookie'` or `'session'`.
It is also exploitable whether `Config\Security::$regenerate` is `true` or `false`.
### Patches
Upgrade to **CodeIgniter v4.2.3 or later** and **Shield v1.0.0-beta.2 or later**.
### Workarounds
Do all of the following:
- set `Config\Security::$csrfProtection` to `'session'`
- remove old session data right after login (immediately after ID and password match)
- regenerate CSRF token right after login (immediately after ID and password match)
### References
- CodeIgniter4 CSRF Protection
https://codeigniter4.github.io/userguide/libraries/security.html
- SameSite Attacks
https://canitakeyoursubdomain.name/
- SameSite Cookies
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie/SameSite
- The great SameSite confusion
https://jub0bs.com/posts/2021-01-29-great-samesite-confusion/
### For more information
If you have any questions or comments about this advisory:
* Open an issue or discussion in codeigniter4/shield
https://github.com/codeigniter4/shield
* Email us at [security@codeigniter.com](mailto:security@codeigniter.com)