{"id":"CVE-2019-5421","aliases":["DEBIAN-CVE-2019-5421","EUVD-2019-0372","GHSA-73rf-6mrf-759q","UBUNTU-CVE-2019-5421"],"status":"published","title":"devise Time-of-check Time-of-use Race Condition vulnerability","description":"Plataformatec Devise version 4.5.0 and earlier, using the lockable module contains a CWE-367 vulnerability in The `Devise::Models::Lockable` class, more specifically at the `#increment_failed_attempts` method. File location: lib/devise/models/lockable.rb that can result in Multiple concurrent requests can prevent an attacker from being blocked on brute force attacks. This attack appear to be exploitable via Network connectivity - brute force attacks. This vulnerability appears to have been fixed in 4.6.0 and later.","severity":{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"primary","from":"nvd"},"epss":{"day":"2026-11-09","score":0.01556,"percentile":0.75356,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-307","CWE-367"],"published":"2019-03-19T18:03:25Z","modified":"2026-10-20T10:51:39Z","fixes":[{"ecosystem":"RubyGems","package":"devise","fixed_in":["4.6.0"],"sources":["ghsa","osv"]},{"ecosystem":"Debian:12","package":"ruby-devise","fixed_in":["4.5.0-3"],"sources":["osv"]},{"ecosystem":"Ubuntu:20.04:LTS","package":"ruby-devise","fixed_in":["4.5.0-3"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"RubyGems","package":"devise","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.6.0"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"ruby-devise","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.5.0-3"}]}]},{"source":"osv","ecosystem":"RubyGems","package":"devise","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.6.0"}]}],"versions":["0.1.0","0.1.1","0.2.0","0.2.1","0.2.2","0.2.3","0.3.0","0.4.0","0.4.1","0.4.2","0.4.3","0.5.0","0.5.1","0.5.2","0.5.3","0.5.4","0.5.5","0.5.6","0.6.0","0.6.1","0.6.2","0.6.3","0.7.0","0.7.1","0.7.2","0.7.3","0.7.4","0.7.5","0.8.0","0.8.1","0.8.2","0.9.0","0.9.1","0.9.2","1.0.0","1.0.1","1.0.10","1.0.11","1.0.2","1.0.3","1.0.4","1.0.5","1.0.6","1.0.7","1.0.8","1.0.9","1.1.0","1.1.1","1.1.2","1.1.3","1.1.4","1.1.5","1.1.6","1.1.7","1.1.8","1.1.9","1.1.pre","1.1.pre2","1.1.pre3","1.1.pre4","1.1.rc0","1.1.rc1","1.1.rc2","1.2.0","1.2.1","1.2.rc","1.2.rc2","1.3.0","1.3.1","1.3.2","1.3.3","1.3.4","1.4.1","1.4.2","1.4.3","1.4.5","1.4.7","1.4.8","1.4.9","1.5.0","1.5.0.rc1","1.5.1","1.5.2","1.5.3","1.5.4","2.0.0","2.0.0.rc","2.0.0.rc2","2.0.1","2.0.2","2.0.4","2.0.5","2.0.6","2.1.0","2.1.0.rc","2.1.0.rc2","2.1.2","2.1.3","2.1.4","2.2.0","2.2.0.rc","2.2.1","2.2.2","2.2.3","2.2.4","2.2.5","2.2.6","2.2.7","2.2.8","3.0.0","3.0.0.rc","3.0.1","3.0.2","3.0.3","3.0.4","3.1.0","3.1.0.rc2","3.1.1","3.1.2","3.2.0","3.2.1","3.2.2","3.2.3","3.2.4","3.3.0","3.4.0","3.4.1","3.5.1","3.5.10","3.5.2","3.5.3","3.5.4","3.5.5","3.5.6","3.5.7","3.5.8","3.5.9","4.0.0","4.0.0.rc1","4.0.0.rc2","4.0.1","4.0.2","4.0.3","4.1.0","4.1.1","4.2.0","4.2.1","4.3.0","4.4.0","4.4.1","4.4.2","4.4.3","4.5.0"]},{"source":"osv","ecosystem":"Ubuntu:16.04:LTS","package":"gitlab","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["8.4.3+dfsg-9","8.4.3+dfsg-12","8.5.8+dfsg-5"]},{"source":"osv","ecosystem":"Ubuntu:18.04:LTS","package":"ruby-devise","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"versions":["4.2.0-1","4.3.0-1","4.4.3-1"]},{"source":"osv","ecosystem":"Ubuntu:20.04:LTS","package":"ruby-devise","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"4.5.0-3"}]}]}],"products":[{"vendor":"plataformatec","product":"devise"},{"vendor":"plataformatec","product":"devise ruby gem"}],"references":[{"url":"https://github.com/plataformatec/devise/issues/4981","tags":["x_refsource_MISC","x_transferred","Exploit","Issue Tracking","Third Party Advisory","report","web"]},{"url":"https://github.com/plataformatec/devise/pull/4996","tags":["x_refsource_MISC","x_transferred","Patch","Third Party Advisory","fix","web","report"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2019-5421","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-73rf-6mrf-759q"},{"url":"https://security-tracker.debian.org/tracker/CVE-2019-5421","tags":["advisory"]},{"url":"https://github.com/plataformatec/devise","tags":["package"]},{"url":"https://ubuntu.com/security/CVE-2019-5421","tags":["report"]},{"url":"https://www.cve.org/CVERecord?id=CVE-2019-5421","tags":["report"]}],"sources":{"cve":[{"id":"CVE-2019-5421","description":"Plataformatec Devise version 4.5.0 and earlier, using the lockable module contains a CWE-367 vulnerability in The `Devise::Models::Lockable` class, more specifically at the `#increment_failed_attempts` method. File location: lib/devise/models/lockable.rb that can result in Multiple concurrent requests can prevent an attacker from being blocked on brute force attacks. This attack appear to be exploitable via Network connectivity - brute force attacks. This vulnerability appears to have been fixed in 4.6.0 and later.","status":"published","published":"2019-04-03T14:21:37Z","modified":"2024-08-04T19:54:53.557Z","cwes":["CWE-367"],"updated_at":"2026-11-02T14:20:18.085548Z"}],"euvd":[{"id":"EUVD-2019-0372","description":"Plataformatec Devise version 4.5.0 and earlier, using the lockable module contains a CWE-367 vulnerability in The `Devise::Models::Lockable` class, more specifically at the `#increment_failed_attempts` method. File location: lib/devise/models/lockable.rb that can result in Multiple concurrent requests can prevent an attacker from being blocked on brute force attacks. This attack appear to be exploitable via Network connectivity - brute force attacks. This vulnerability appears to have been fixed in 4.6.0 and later.","status":"published","published":"2019-04-03T14:21:37Z","modified":"2024-08-04T19:54:53Z","updated_at":"2026-11-03T03:06:52.999682Z"}],"ghsa":[{"id":"GHSA-73rf-6mrf-759q","title":"devise Time-of-check Time-of-use Race Condition vulnerability","description":"Devise ruby gem before 4.6.0 when the `lockable` module is used is vulnerable to a time-of-check time-of-use (TOCTOU) race condition due to `increment_failed_attempts` within the `Devise::Models::Lockable` class not being concurrency safe.","status":"published","published":"2019-03-19T18:03:25Z","modified":"2023-01-23T20:46:52Z","cwes":["CWE-367"],"updated_at":"2026-11-02T14:36:14.033357Z"}],"nvd":[{"id":"CVE-2019-5421","description":"Plataformatec Devise version 4.5.0 and earlier, using the lockable module contains a CWE-367 vulnerability in The `Devise::Models::Lockable` class, more specifically at the `#increment_failed_attempts` method. File location: lib/devise/models/lockable.rb that can result in Multiple concurrent requests can prevent an attacker from being blocked on brute force attacks. This attack appear to be exploitable via Network connectivity - brute force attacks. This vulnerability appears to have been fixed in 4.6.0 and later.","status":"published","published":"2019-04-03T15:29:01.663Z","modified":"2026-06-17T02:37:39.607Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical","assessor":"primary"},{"version":"2.0","score":7.5,"vector":"AV:N/AC:L/Au:N/C:P/I:P/A:P","level":"high","assessor":"primary"}],"cwes":["CWE-367","CWE-307"],"updated_at":"2026-11-02T14:05:09.523883Z"}],"osv":[{"id":"CVE-2019-5421","description":"Plataformatec Devise version 4.5.0 and earlier, using the lockable module contains a CWE-367 vulnerability in The `Devise::Models::Lockable` class, more specifically at the `#increment_failed_attempts` method. File location: lib/devise/models/lockable.rb that can result in Multiple concurrent requests can prevent an attacker from being blocked on brute force attacks. This attack appear to be exploitable via Network connectivity - brute force attacks. This vulnerability appears to have been fixed in 4.6.0 and later.","status":"published","published":"2019-04-03T15:29:01.663Z","modified":"2026-10-20T10:51:39.978691281Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:44:12.675558Z"},{"id":"DEBIAN-CVE-2019-5421","description":"Plataformatec Devise version 4.5.0 and earlier, using the lockable module contains a CWE-367 vulnerability in The `Devise::Models::Lockable` class, more specifically at the `#increment_failed_attempts` method. File location: lib/devise/models/lockable.rb that can result in Multiple concurrent requests can prevent an attacker from being blocked on brute force attacks. This attack appear to be exploitable via Network connectivity - brute force attacks. This vulnerability appears to have been fixed in 4.6.0 and later.","status":"published","published":"2019-04-03T15:29:01.663Z","modified":"2026-09-21T07:03:19.951601634Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:45:32.221385Z"},{"id":"UBUNTU-CVE-2019-5421","description":"Plataformatec Devise version 4.5.0 and earlier, using the lockable module contains a CWE-367 vulnerability in The `Devise::Models::Lockable` class, more specifically at the `#increment_failed_attempts` method. File location: lib/devise/models/lockable.rb that can result in Multiple concurrent requests can prevent an attacker from being blocked on brute force attacks. This attack appear to be exploitable via Network connectivity - brute force attacks. This vulnerability appears to have been fixed in 4.6.0 and later.","status":"published","published":"2019-04-03T15:29:00Z","modified":"2025-10-24T04:47:27Z","cvss":[{"version":"3.1","score":9.8,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H","level":"critical"}],"updated_at":"2026-11-02T15:54:21.741399Z"},{"id":"GHSA-73rf-6mrf-759q","title":"devise Time-of-check Time-of-use Race Condition vulnerability","description":"Devise ruby gem before 4.6.0 when the `lockable` module is used is vulnerable to a time-of-check time-of-use (TOCTOU) race condition due to `increment_failed_attempts` within the `Devise::Models::Lockable` class not being concurrency safe.","status":"published","published":"2019-03-19T18:03:25Z","modified":"2024-11-30T05:31:04.698625Z","cwes":["CWE-367"],"updated_at":"2026-11-02T15:46:40.308826Z"}]}}
