{"id":"GHSA-x4vh-j75g-268g","summary":"NocoDB's Refresh Tokens Not Revoked on Password Reset","details":"### Summary\nThe password reset flow did not revoke existing refresh tokens, allowing an attacker with a previously stolen refresh token to continue minting valid JWTs after the victim resets their password.\n\n### Details\n`passwordReset()` in `users.service.ts` updated `token_version` (invalidating JWTs) but did not call `UserRefreshToken.deleteAllUserToken()`. The `refreshToken()` method only checked token existence, not `token_version`. Both `passwordChange()` and `signOut()` correctly deleted all refresh tokens.\n\n### Impact\nAn attacker who previously obtained a refresh token retains access after password reset until the token expires.\n\n### Credit\nThis issue was reported by [@bugbunny-research](https://github.com/bugbunny-research) (bugbunny.ai).","aliases":["CVE-2026-28396"],"modified":"2026-03-04T15:17:06.274906Z","published":"2026-03-02T19:53:17Z","database_specific":{"github_reviewed":true,"github_reviewed_at":"2026-03-02T19:53:17Z","nvd_published_at":"2026-03-02T17:16:34Z","cwe_ids":["CWE-613"],"severity":"MODERATE"},"references":[{"type":"WEB","url":"https://github.com/nocodb/nocodb/security/advisories/GHSA-x4vh-j75g-268g"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-28396"},{"type":"PACKAGE","url":"https://github.com/nocodb/nocodb"},{"type":"WEB","url":"https://github.com/nocodb/nocodb/releases/tag/0.301.3"}],"affected":[{"package":{"name":"nocodb","ecosystem":"npm","purl":"pkg:npm/nocodb"},"ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"0.301.3"}]}],"database_specific":{"last_known_affected_version_range":"\u003c= 0.301.2","source":"https://github.com/github/advisory-database/blob/main/advisories/github-reviewed/2026/03/GHSA-x4vh-j75g-268g/GHSA-x4vh-j75g-268g.json"}}],"schema_version":"1.9.0","severity":[{"type":"CVSS_V4","score":"CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N/E:U"}]}