{"id":"CVE-2011-4138","aliases":["DEBIAN-CVE-2011-4138","DSA-2332-1","EUVD-2011-0008","GHSA-wxg3-mfph-qg9w","PYSEC-2011-3"],"status":"published","title":"Django Might Allow CSRF Requests via URL Verification","description":"The verify_exists functionality in the URLField implementation in Django before 1.2.7 and 1.3.x before 1.3.1 originally tests a URL's validity through a HEAD request, but then uses a GET request for the new target URL in the case of a redirect, which might allow remote attackers to trigger arbitrary GET requests with an unintended source IP address via a crafted Location header.","severity":{"version":"2.0","score":5,"vector":"AV:N/AC:L/Au:N/C:P/I:N/A:N","level":"medium","assessor":"primary","from":"nvd"},"epss":{"day":"2026-11-08","score":0.02406,"percentile":0.84179,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-20"],"published":"2011-10-19T10:00:00Z","modified":"2026-10-23T17:47:31Z","fixes":[{"ecosystem":"PyPI","package":"django","fixed_in":["1.2.7","1.3.1"],"sources":["ghsa","osv"]},{"ecosystem":"Debian:12","package":"python-django","fixed_in":["1.3.1-1"],"sources":["osv"]},{"ecosystem":"Debian:13","package":"python-django","fixed_in":["1.3.1-1"],"sources":["osv"]},{"ecosystem":"Debian:14","package":"python-django","fixed_in":["1.3.1-1"],"sources":["osv"]}],"affected":[{"source":"ghsa","ecosystem":"PyPI","package":"django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.2.7"}]}]},{"source":"ghsa","ecosystem":"PyPI","package":"django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.3"},{"fixed":"1.3.1"}]}]},{"source":"osv","ecosystem":"Debian:12","package":"python-django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.1-1"}]}]},{"source":"osv","ecosystem":"Debian:13","package":"python-django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.1-1"}]}]},{"source":"osv","ecosystem":"Debian:14","package":"python-django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.3.1-1"}]}]},{"source":"osv","ecosystem":"Debian:6.0","package":"python-django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.2.3-3+squeeze2"}]}],"versions":["1.2.3-3","1.2.3-3+squeeze1"],"bundled":5},{"source":"osv","ecosystem":"Debian:5.0","package":"python-django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.0.2-1+lenny3"}]}],"versions":["1.0.2-1","1.0.2-1+lenny1","1.0.2-1+lenny2"],"bundled":5},{"source":"osv","ecosystem":"PyPI","package":"django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.2.7"}]}],"versions":["1.0.1","1.0.2","1.0.3","1.0.4","1.1","1.1.1","1.1.2","1.1.3","1.1.4","1.2","1.2.1","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6"]},{"source":"osv","ecosystem":"PyPI","package":"django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"1.3"},{"fixed":"1.3.1"}]}],"versions":["1.3"]},{"source":"osv","ecosystem":"PyPI","package":"django","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"1.2.7"},{"introduced":"1.3"},{"fixed":"1.3.1"}]}],"versions":["1.0.1","1.0.2","1.0.3","1.0.4","1.1","1.1.1","1.1.2","1.1.3","1.1.4","1.2","1.2.1","1.2.2","1.2.3","1.2.4","1.2.5","1.2.6","1.3"]}],"products":[{"vendor":"djangoproject","product":"django"}],"references":[{"url":"https://hermes.opensuse.org/messages/14700881","tags":["vendor-advisory","x_refsource_SUSE","x_transferred","web"]},{"url":"http://www.debian.org/security/2011/dsa-2332","tags":["vendor-advisory","x_refsource_DEBIAN","x_transferred","advisory","web"]},{"url":"https://bugzilla.redhat.com/show_bug.cgi?id=737366","tags":["x_refsource_CONFIRM","x_transferred","Patch","fix","web","report"]},{"url":"http://secunia.com/advisories/46614","tags":["third-party-advisory","x_refsource_SECUNIA","x_transferred","advisory"]},{"url":"http://openwall.com/lists/oss-security/2011/09/11/1","tags":["mailing-list","x_refsource_MLIST","x_transferred","Patch","fix","web"]},{"url":"https://www.djangoproject.com/weblog/2011/sep/10/127/","tags":["x_refsource_CONFIRM","x_transferred","Patch","fix","article"]},{"url":"http://openwall.com/lists/oss-security/2011/09/13/2","tags":["mailing-list","x_refsource_MLIST","x_transferred","Patch","fix","web"]},{"url":"https://www.djangoproject.com/weblog/2011/sep/09/","tags":["x_refsource_CONFIRM","x_transferred","Patch","Vendor Advisory","advisory","fix","article"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2011-4138","tags":["advisory"]},{"url":"https://github.com/django/django/commit/1a76dbefdfc60e2d5954c0ba614c3d054ba9c3f0","tags":["web"]},{"url":"https://github.com/django/django/commit/7268f8af86186518821d775c530d5558fd726930","tags":["web"]},{"url":"https://github.com/pypa/advisory-database/tree/main/vulns/django/PYSEC-2011-3.yaml","tags":["web"]},{"url":"https://www.djangoproject.com/weblog/2011/sep/09","tags":["web"]},{"url":"https://www.djangoproject.com/weblog/2011/sep/10/127","tags":["web"]},{"url":"https://github.com/advisories/GHSA-wxg3-mfph-qg9w","tags":["advisory"]},{"url":"https://security-tracker.debian.org/tracker/CVE-2011-4138","tags":["advisory"]},{"url":"https://github.com/django/django","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2011-4138","description":"The verify_exists functionality in the URLField implementation in Django before 1.2.7 and 1.3.x before 1.3.1 originally tests a URL's validity through a HEAD request, but then uses a GET request for the new target URL in the case of a redirect, which might allow remote attackers to trigger arbitrary GET requests with an unintended source IP address via a crafted Location header.","status":"published","published":"2011-10-19T10:00:00Z","modified":"2024-08-07T00:01:51.12Z","updated_at":"2026-11-02T14:35:37.989579Z"}],"euvd":[{"id":"EUVD-2011-0008","description":"The verify_exists functionality in the URLField implementation in Django before 1.2.7 and 1.3.x before 1.3.1 originally tests a URL's validity through a HEAD request, but then uses a GET request for the new target URL in the case of a redirect, which might allow remote attackers to trigger arbitrary GET requests with an unintended source IP address via a crafted Location header.","status":"published","published":"2011-10-19T10:00:00Z","modified":"2024-08-07T00:01:51Z","updated_at":"2026-11-03T01:39:49.441333Z"}],"ghsa":[{"id":"GHSA-wxg3-mfph-qg9w","title":"Django Might Allow CSRF Requests via URL Verification","description":"The `verify_exists` functionality in the URLField implementation in Django before 1.2.7 and 1.3.x before 1.3.1 originally tests a URL's validity through a HEAD request, but then uses a GET request for the new target URL in the case of a redirect, which might allow remote attackers to trigger arbitrary GET requests with an unintended source IP address via a crafted Location header.","status":"published","published":"2022-05-14T03:49:36Z","modified":"2024-09-16T22:32:03Z","cvss":[{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N","level":"high"},{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N","level":"high"}],"cwes":["CWE-20"],"updated_at":"2026-11-02T14:38:03.800952Z"}],"nvd":[{"id":"CVE-2011-4138","description":"The verify_exists functionality in the URLField implementation in Django before 1.2.7 and 1.3.x before 1.3.1 originally tests a URL's validity through a HEAD request, but then uses a GET request for the new target URL in the case of a redirect, which might allow remote attackers to trigger arbitrary GET requests with an unintended source IP address via a crafted Location header.","status":"published","published":"2011-10-19T10:55:04.457Z","modified":"2026-06-16T23:34:29.8Z","cvss":[{"version":"2.0","score":5,"vector":"AV:N/AC:L/Au:N/C:P/I:N/A:N","level":"medium","assessor":"primary"}],"cwes":["CWE-20"],"updated_at":"2026-11-02T14:02:10.769216Z"}],"osv":[{"id":"GHSA-wxg3-mfph-qg9w","title":"Django Might Allow CSRF Requests via URL Verification","description":"The `verify_exists` functionality in the URLField implementation in Django before 1.2.7 and 1.3.x before 1.3.1 originally tests a URL's validity through a HEAD request, but then uses a GET request for the new target URL in the case of a redirect, which might allow remote attackers to trigger arbitrary GET requests with an unintended source IP address via a crafted Location header.","status":"published","published":"2022-05-14T03:49:36Z","modified":"2024-09-16T22:47:59.430354Z","cvss":[{"version":"3.1","score":7.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N","level":"high"},{"version":"4.0","score":8.7,"vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N","level":"high"}],"cwes":["CWE-20"],"updated_at":"2026-11-02T15:46:59.131095Z"},{"id":"CVE-2011-4138","description":"The verify_exists functionality in the URLField implementation in Django before 1.2.7 and 1.3.x before 1.3.1 originally tests a URL's validity through a HEAD request, but then uses a GET request for the new target URL in the case of a redirect, which might allow remote attackers to trigger arbitrary GET requests with an unintended source IP address via a crafted Location header.","status":"published","published":"2011-10-19T10:55:04Z","modified":"2026-04-10T03:42:03.055908Z","updated_at":"2026-11-02T15:43:58.279353Z"},{"id":"DEBIAN-CVE-2011-4138","description":"The verify_exists functionality in the URLField implementation in Django before 1.2.7 and 1.3.x before 1.3.1 originally tests a URL's validity through a HEAD request, but then uses a GET request for the new target URL in the case of a redirect, which might allow remote attackers to trigger arbitrary GET requests with an unintended source IP address via a crafted Location header.","status":"published","published":"2011-10-19T10:55:04.457Z","modified":"2026-10-23T17:47:31.245098007Z","updated_at":"2026-11-02T15:45:24.612044Z"},{"id":"DSA-2332-1","title":"python-django - several issues","status":"published","published":"2011-10-29T00:00:00Z","modified":"2026-03-09T01:19:58.237594Z","updated_at":"2026-11-02T15:46:15.108335Z"},{"id":"PYSEC-2011-3","description":"The verify_exists functionality in the URLField implementation in Django before 1.2.7 and 1.3.x before 1.3.1 originally tests a URL's validity through a HEAD request, but then uses a GET request for the new target URL in the case of a redirect, which might allow remote attackers to trigger arbitrary GET requests with an unintended source IP address via a crafted Location header.","status":"published","published":"2011-10-19T10:55:00Z","modified":"2026-06-10T17:00:52.434191453Z","updated_at":"2026-11-02T15:52:51.254177Z"}]}}
