{"id":"CVE-2021-46898","aliases":["EUVD-2023-0062","GHSA-9x43-5qcq-h79q","PYSEC-2023-211","openSUSE-SU-2023:0384-1","openSUSE-SU-2024:0017-1"],"status":"published","title":"Django Grappelli Open Redirect vulnerability","description":"views/switch.py in django-grappelli (aka Django Grappelli) before 2.15.2 attempts to prevent external redirection with startswith(\"/\") but this does not consider a protocol-relative URL (e.g., //example.com) attack.","severity":{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"primary","from":"nvd"},"epss":{"day":"2026-11-10","score":0.00555,"percentile":0.4663,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-601"],"published":"2023-10-22T00:00:00Z","modified":"2026-10-20T10:55:11Z","fixes":[{"ecosystem":"PyPI","package":"django-grappelli","fixed_in":["2.15.2"],"sources":["ghsa","osv"]},{"ecosystem":"SUSE:Package Hub 15 SP4","package":"python-django-grappelli","fixed_in":["2.14.4-bp154.2.3.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Leap 15.4","package":"python-django-grappelli","fixed_in":["2.14.4-bp154.2.3.1"],"sources":["osv"]},{"ecosystem":"SUSE:Package Hub 15 SP5","package":"python-django-grappelli","fixed_in":["2.14.4-bp155.3.3.1"],"sources":["osv"]},{"ecosystem":"openSUSE:Leap 15.5","package":"python-django-grappelli","fixed_in":["2.14.4-bp155.3.3.1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"django-grappelli","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.15.2"}]}]},{"source":"osv","ecosystem":"PyPI","package":"django-grappelli","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.15.2"}]}],"versions":["1.3","2.1","2.1.1","2.10.1","2.10.2","2.10.3","2.10.4","2.11.1","2.11.2","2.12.1","2.12.2","2.12.3","2.12.4","2.13.1","2.13.2","2.13.3","2.13.4","2.14.1","2.14.2","2.14.3","2.14.4","2.15.1","2.2","2.3","2.3.1","2.3.2","2.3.3","2.3.4","2.3.5","2.3.6","2.3.7","2.3.8","2.3.9","2.4.0","2.4.1","2.4.10","2.4.11","2.4.12","2.4.2","2.4.3","2.4.4","2.4.5","2.4.6","2.4.7","2.4.8","2.4.9","2.5.0","2.5.1","2.5.2","2.5.3","2.5.4","2.5.5","2.5.6","2.5.7","2.6.1","2.6.2","2.6.3","2.6.4","2.6.5","2.7.1","2.7.2","2.7.3","2.8.1","2.8.2","2.8.3","2.9.1"]},{"source":"osv","ecosystem":"PyPI","package":"django-grappelli","ranges":[{"type":"GIT","events":[{"introduced":"0"},{"fixed":"4ca94bcda0fa2720594506853d85e00c8212968f"}]},{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.15.2"}]}],"versions":["1.3","2.1","2.1.1","2.10.1","2.10.2","2.10.3","2.10.4","2.11.1","2.11.2","2.12.1","2.12.2","2.12.3","2.12.4","2.13.1","2.13.2","2.13.3","2.13.4","2.14.1","2.14.2","2.14.3","2.14.4","2.15.1","2.2","2.3","2.3.1","2.3.2","2.3.3","2.3.4","2.3.5","2.3.6","2.3.7","2.3.8","2.3.9","2.4.0","2.4.1","2.4.10","2.4.11","2.4.12","2.4.2","2.4.3","2.4.4","2.4.5","2.4.6","2.4.7","2.4.8","2.4.9","2.5.0","2.5.1","2.5.2","2.5.3","2.5.4","2.5.5","2.5.6","2.5.7","2.6.1","2.6.2","2.6.3","2.6.4","2.6.5","2.7.1","2.7.2","2.7.3","2.8.1","2.8.2","2.8.3","2.9.1","2.11.3"]},{"source":"osv","ecosystem":"SUSE:Package Hub 15 SP4","package":"python-django-grappelli","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.14.4-bp154.2.3.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Leap 15.4","package":"python-django-grappelli","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.14.4-bp154.2.3.1"}]}]},{"source":"osv","ecosystem":"SUSE:Package Hub 15 SP5","package":"python-django-grappelli","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.14.4-bp155.3.3.1"}]}]},{"source":"osv","ecosystem":"openSUSE:Leap 15.5","package":"python-django-grappelli","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"2.14.4-bp155.3.3.1"}]}]}],"products":[{"vendor":"vonautomatisch","product":"django_grappelli"}],"references":[{"url":"https://github.com/sehmaschine/django-grappelli/issues/975","tags":["x_transferred","Exploit","Issue Tracking","report","web"]},{"url":"https://github.com/sehmaschine/django-grappelli/pull/976","tags":["x_transferred","Patch","fix","web"]},{"url":"https://github.com/sehmaschine/django-grappelli/commit/4ca94bcda0fa2720594506853d85e00c8212968f","tags":["x_transferred","Patch","fix","web"]},{"url":"https://github.com/sehmaschine/django-grappelli/compare/2.15.1...2.15.2","tags":["x_transferred","Release Notes","advisory","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2021-46898","tags":["advisory"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/django-grappelli/PYSEC-2023-211.yaml","tags":["web"]},{"url":"https://github.com/advisories/GHSA-9x43-5qcq-h79q","tags":["advisory"]},{"url":"https://github.com/sehmaschine/django-grappelli","tags":["package"]},{"url":"https://lists.opensuse.org/archives/list/security-announce@lists.opensuse.org/thread/FVC472DTXM3I3SVFJZ3UKZVVBMB6XYMZ/","tags":["advisory"]},{"url":"https://bugzilla.suse.com/1216481","tags":["report"]},{"url":"https://www.suse.com/security/cve/CVE-2021-46898","tags":["web"]},{"url":"https://lists.opensuse.org/archives/list/security-announce@lists.opensuse.org/thread/3GF4HWC4HAGFXA56AYL7TL7B3KA2SM45/","tags":["advisory"]}],"sources":{"cve":[{"id":"CVE-2021-46898","description":"views/switch.py in django-grappelli (aka Django Grappelli) before 2.15.2 attempts to prevent external redirection with startswith(\"/\") but this does not consider a protocol-relative URL (e.g., //example.com) attack.","status":"published","published":"2023-10-22T00:00:00Z","modified":"2024-09-16T13:11:11.083Z","updated_at":"2026-11-02T14:33:02.930115Z"}],"euvd":[{"id":"EUVD-2023-0062","description":"views/switch.py in django-grappelli (aka Django Grappelli) before 2.15.2 attempts to prevent external redirection with startswith(\"/\") but this does not consider a protocol-relative URL (e.g., //example.com) attack.","status":"published","published":"2023-10-22T00:00:00Z","modified":"2024-09-16T13:11:11Z","updated_at":"2026-11-03T00:55:55.02611Z"}],"ghsa":[{"id":"GHSA-9x43-5qcq-h79q","title":"Django Grappelli Open Redirect vulnerability","description":"views/switch.py in django-grappelli (aka Django Grappelli) before 2.15.2 attempts to prevent external redirection with startswith(\"/\") but this does not consider a protocol-relative URL (e.g., //example.com) attack.","status":"published","published":"2023-10-22T21:36:10Z","modified":"2024-09-13T20:12:08Z","cvss":[{"version":"4.0","score":5.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","level":"medium"},{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"cwes":["CWE-601"],"updated_at":"2026-11-02T14:38:02.773864Z"}],"nvd":[{"id":"CVE-2021-46898","description":"views/switch.py in django-grappelli (aka Django Grappelli) before 2.15.2 attempts to prevent external redirection with startswith(\"/\") but this does not consider a protocol-relative URL (e.g., //example.com) attack.","status":"published","published":"2023-10-22T19:15:08.297Z","modified":"2026-06-17T04:15:46.98Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium","assessor":"primary"}],"cwes":["CWE-601"],"updated_at":"2026-11-02T14:07:07.764332Z"}],"osv":[{"id":"CVE-2021-46898","description":"views/switch.py in django-grappelli (aka Django Grappelli) before 2.15.2 attempts to prevent external redirection with startswith(\"/\") but this does not consider a protocol-relative URL (e.g., //example.com) attack.","status":"published","published":"2023-10-22T19:15:08.297Z","modified":"2026-10-20T10:55:11.749662853Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"}],"updated_at":"2026-11-02T15:44:22.18434Z"},{"id":"GHSA-9x43-5qcq-h79q","title":"Django Grappelli Open Redirect vulnerability","description":"views/switch.py in django-grappelli (aka Django Grappelli) before 2.15.2 attempts to prevent external redirection with startswith(\"/\") but this does not consider a protocol-relative URL (e.g., //example.com) attack.","status":"published","published":"2023-10-22T21:36:10Z","modified":"2024-09-13T20:24:36.552132Z","cvss":[{"version":"3.1","score":6.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","level":"medium"},{"version":"4.0","score":5.3,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","level":"medium"}],"cwes":["CWE-601"],"updated_at":"2026-11-02T15:46:44.225359Z"},{"id":"openSUSE-SU-2023:0384-1","title":"Security update for python-django-grappelli","description":"This update for python-django-grappelli fixes the following issues:\n\nUpdate to 2.14.4:\n\n- CVE-2021-46898: Fixed views/switch.py vulnerable to protocol-relative URL attacks (boo#1216481)\n- Fixed: Redirect with switch user.\n- Improved: Remove extra filtering in AutocompleteLookup.\n- Improved: Added import statement with URLs for quickstart docs.\n- Improved: Added additional blocks with inlines to allow override.\n- Fixed: Compatibility with Django 3.1.\n- Fixed: Docs about adding Grappelli documentation URLS.\n","status":"published","published":"2023-11-30T10:47:42Z","modified":"2026-02-04T04:32:07.465075Z","updated_at":"2026-11-02T16:58:33.135986Z"},{"id":"openSUSE-SU-2024:0017-1","title":"Security update for python-django-grappelli","description":"This update for python-django-grappelli fixes the following issues:\n\nUpdate to 2.14.4:\n\n- CVE-2021-46898: Fixed views/switch.py vulnerable to protocol-relative URL attacks (boo#1216481)\n- Fixed: Redirect with switch user.\n- Improved: Remove extra filtering in AutocompleteLookup.\n- Improved: Added import statement with URLs for quickstart docs.\n- Improved: Added additional blocks with inlines to allow override.\n- Fixed: Compatibility with Django 3.1.\n- Fixed: Docs about adding Grappelli documentation URLS.\n","status":"published","published":"2024-01-11T15:01:09Z","modified":"2026-02-04T04:18:17.986442Z","updated_at":"2026-11-02T16:58:33.135986Z"},{"id":"PYSEC-2023-211","description":"views/switch.py in django-grappelli (aka Django Grappelli) before 2.15.2 attempts to prevent external redirection with startswith(\"/\") but this does not consider a protocol-relative URL (e.g., //example.com) attack.","status":"published","published":"2023-10-22T19:15:00Z","modified":"2026-06-10T17:00:48.8891435Z","updated_at":"2026-11-02T15:52:53.837392Z"}]}}
