CVE-2015-2317
Django cross-site scripting (XSS) attack via user-supplied redirect URLs
CVE-2015-2317 is a medium vulnerability (CVSS 4.3) in Djangoproject Django, published September 3, 2014. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 4.97%, the 92nd percentile. Fixed in django 1.4.20.
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
Exploit likelihood
What each source reports
NVD Score used
4.3
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
- Record
CVE-2015-2317- CVSS 2.0
- 4.3 Medium
AV:N/AC:M/Au:N/C:N/I:P/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
CVE List No score
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
- Record
CVE-2015-2317- Updated
- 2026-11-02
EUVDEUVD-2015-0018 No score
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
- Record
EUVD-2015-0018- Updated
- 2026-11-03
GitHub AdvisoriesGHSA-7fq8-4pv5-5w5c
5.3
Django cross-site scripting (XSS) attack via user-supplied redirect URLs
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
- Record
GHSA-7fq8-4pv5-5w5c- CVSS 4.0
- 5.3 Medium
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 - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
OSVGHSA-7fq8-4pv5-5w5c
5.3
Django cross-site scripting (XSS) attack via user-supplied redirect URLs
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
- Record
GHSA-7fq8-4pv5-5w5c- CVSS 4.0
- 5.3 Medium
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 - CVSS 3.1
- 6.1 Medium
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N - Weakness
- CWE-79
- Updated
- 2026-11-02
OSV No score
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
- Record
CVE-2015-2317- Updated
- 2026-11-02
Show 10 moreShow less
OSVDEBIAN-CVE-2015-2317 No score
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
- Record
DEBIAN-CVE-2015-2317- Updated
- 2026-11-02
OSVMGASA-2015-0127 No score
Updated python-django packages fix security vulnerabilities
Updated python-django and python-django14 packages fix security vulnerabilities:
The ModelAdmin.readonly_fields attribute in the Django admin allows displaying model fields and model attributes. While the former were correctly escaped, the latter were not. Thus untrusted content could be injected into the admin, presenting an exploitation vector for XSS attacks (CVE-2015-2241).
Django relies on user input in some cases to redirect the user to an "on success" URL. The security checks for these redirects accepted URLs with leading control characters and so considered URLs like \x08javascript:... safe. This issue doesn't affect Django currently, however, if a developer relies on is_safe_url() to provide safe redirect targets and puts such a URL into a link, they could suffer from an XSS attack as some browsers such as Google Chrome ignore control characters at the start of a URL in an anchor href (CVE-2015-2317).
Note that the CVE-2015-2241 issue does not affect python-django14 directly, but client code using it may be affected. Please see the March 9th upstream advisory for more information on this.
- Record
MGASA-2015-0127- Updated
- 2026-11-02
OSVPYSEC-2015-9 No score
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
- Record
PYSEC-2015-9- Updated
- 2026-11-02
OSVSUSE-SU-2015:0563-1 No score
Security update for python-django
python-django was updated to 1.5.10 fixing bugs and security issues:
* Prevented reverse() from generating URLs pointing to other hosts to
prevent phishing attacks. (bnc#893087, CVE-2014-0480)
* Removed O(n) algorithm when uploading duplicate file names to fix
file upload denial of service. (bnc#893088, CVE-2014-0481)
* Modified RemoteUserMiddleware to logout on REMOTE_USE change to
prevent session hijacking. (bnc#893089, CVE-2014-0482)
* Prevented data leakage in contrib.admin via query string
manipulation. (bnc#893090, CVE-2014-0483)
Security Issues:
* CVE-2014-0480
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0480>
* CVE-2014-0481
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0481>
* CVE-2014-0482
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0482>
* CVE-2014-0483
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0483>
- Record
SUSE-SU-2015:0563-1- Updated
- 2026-11-02
OSVSUSE-SU-2015:0694-1 No score
Security update for python-Django
python-Django has been updated to fix two vulnerabilities:
* URLs starting with control characters could have allowed XSS
(cross-site-scripting) attacks via user-supplied redirect URLs
(CVE-2015-2317)
* An infinite loop possibility could be triggered in the strip_tags()
function, which allowed denial of service attacks (CVE-2015-2316)
Security Issues:
* CVE-2015-2316
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-2316>
* CVE-2015-2317
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2015-2317>
- Record
SUSE-SU-2015:0694-1- Updated
- 2026-11-02
OSVSUSE-SU-2015:0695-1 No score
Security update for python-django
python-django was updated to 1.5.10 fixing bugs and security issues:
* Prevented reverse() from generating URLs pointing to other hosts to
prevent phishing attacks. (bnc#893087, CVE-2014-0480)
* Removed O(n) algorithm when uploading duplicate file names to fix
file upload denial of service. (bnc#893088, CVE-2014-0481)
* Modified RemoteUserMiddleware to logout on REMOTE_USE change to
prevent session hijacking. (bnc#893089, CVE-2014-0482)
* Prevented data leakage in contrib.admin via query string
manipulation. (bnc#893090, CVE-2014-0483)
Security Issues:
* CVE-2014-0480
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0480>
* CVE-2014-0481
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0481>
* CVE-2014-0482
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0482>
* CVE-2014-0483
<http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0483>
- Record
SUSE-SU-2015:0695-1- Updated
- 2026-11-02
OSVSUSE-SU-2015:1109-1 No score
Security update for python-Django
python-django was updated to 1.6.11 to fix security issues and non-security bugs.
The following vulnerabilities were fixed:
- Made is_safe_url() reject URLs that start with control characters to mitigate possible XSS attack via user-supplied redirect URLs (bnc#923176, CVE-2015-2317)
- Fixed an infinite loop possibility in strip_tags() (bnc#923172, CVE-2015-2316)
- WSGI header spoofing via underscore/dash conflation (bnc#913053, CVE-2015-0219)
- Mitigated possible XSS attack via user-supplied redirect URLs
- Denial-of-service attack against
django.views.static.serve(bnc#913056, CVE-2015-0221) - Database denial-of-service with
ModelMultipleChoiceField(bnc#913055, CVE-2015-0222)
The update also contains fixes for non-security bugs, functional and stability issues.
- Record
SUSE-SU-2015:1109-1- Updated
- 2026-11-02
OSVSUSE-SU-2015:1112-1 No score
Security update for python-Django
python-django was updated to 1.6.11 to fix security issues and non-security bugs.
The following vulnerabilities were fixed:
- Made is_safe_url() reject URLs that start with control characters to mitigate possible XSS attack via user-supplied redirect URLs (bnc#923176, CVE-2015-2317)
- Fixed an infinite loop possibility in strip_tags() (bnc#923172, CVE-2015-2316)
- WSGI header spoofing via underscore/dash conflation (bnc#913053, CVE-2015-0219)
- Mitigated possible XSS attack via user-supplied redirect URLs
- Denial-of-service attack against
django.views.static.serve(bnc#913056, CVE-2015-0221) - Database denial-of-service with
ModelMultipleChoiceField(bnc#913055, CVE-2015-0222)
The update also contains fixes for non-security bugs, functional and stability issues.
- Record
SUSE-SU-2015:1112-1- Updated
- 2026-11-02
OSVUBUNTU-CVE-2015-2317 No score
The utils.http.is_safe_url function in Django before 1.4.20, 1.5.x, 1.6.x before 1.6.11, 1.7.x before 1.7.7, and 1.8.x before 1.8c1 does not properly validate URLs, which allows remote attackers to conduct cross-site scripting (XSS) attacks via a control character in a URL, as demonstrated by a \x08javascript: URL.
- Record
UBUNTU-CVE-2015-2317- Updated
- 2026-11-02
OSVUSN-2539-1 No score
python-django vulnerabilities
Andrey Babak discovered that Django incorrectly handled strip_tags. A remote attacker could possibly use this issue to cause Django to enter an infinite loop, resulting in a denial of service. This issue only affected Ubuntu 14.04 LTS and Ubuntu 14.10. (CVE-2015-2316)
Daniel Chatfield discovered that Django incorrectly handled user-supplied redirect URLs. A remote attacker could possibly use this issue to perform a cross-site scripting attack. (CVE-2015-2317)
- Record
USN-2539-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
djangoPyPI |
before 1.4.20 | 1.4.20 |
djangoPyPI |
1.5 up to 1.6.11 | 1.6.11 |
djangoPyPI |
1.7 up to 1.7.7 | 1.7.7 |
djangoPyPI |
1.8a1 up to 1.8c1 | 1.8c1 |
python-djangoDebian:12 |
before 1.7.7-1 | 1.7.7-1 |
python-djangoDebian:13 |
before 1.7.7-1 | 1.7.7-1 |
python-djangoDebian:14 |
before 1.7.7-1 | 1.7.7-1 |
python-djangoDebian:6.0 |
before 1.2.3-3+squeeze13, plus listed versions 1.2.3-31.2.3-3+squeeze11.2.3-3+squeeze101.2.3-3+squeeze111.2.3-3+squeeze12 Show 7 moreShow less1.2.3-3+squeeze21.2.3-3+squeeze31.2.3-3+squeeze51.2.3-3+squeeze61.2.3-3+squeeze71.2.3-3+squeeze81.2.3-3+squeeze9 |
1.2.3-3+squeeze13 |
python-djangoDebian:7 |
before 1.4.5-1+deb7u11, plus listed versions 1.4.5-11.4.5-1+deb7u11.4.5-1+deb7u101.4.5-1+deb7u11~bpo60+11.4.5-1+deb7u2 Show 10 moreShow less1.4.5-1+deb7u31.4.5-1+deb7u41.4.5-1+deb7u4~bpo60+11.4.5-1+deb7u51.4.5-1+deb7u61.4.5-1+deb7u71.4.5-1+deb7u7~bpo60+11.4.5-1+deb7u81.4.5-1+deb7u8~bpo60+11.4.5-1+deb7u9 |
1.4.5-1+deb7u11 |
djangoPyPI |
before 1.4.20, plus listed versions 1.0.11.0.21.0.31.0.41.1 Show 40 moreShow less1.1.11.1.21.1.31.1.41.21.2.11.2.21.2.31.2.41.2.51.2.61.2.71.31.3.11.3.21.3.31.3.41.3.51.3.61.3.71.41.4.11.4.101.4.111.4.121.4.131.4.141.4.151.4.161.4.171.4.181.4.191.4.21.4.31.4.41.4.51.4.61.4.71.4.81.4.9 |
1.4.20 |
Show 8 moreShow less
| Package | Affected | Fixed |
|---|---|---|
djangoPyPI |
1.5 up to 1.6.11, plus listed versions 1.5.11.5.101.5.111.5.121.5.2 Show 18 moreShow less1.5.31.5.41.5.51.5.61.5.71.5.81.5.91.61.6.11.6.101.6.21.6.31.6.41.6.51.6.61.6.71.6.81.6.9 |
1.6.11 |
djangoPyPI |
1.7 up to 1.7.7, plus listed versions 1.7.11.7.21.7.31.7.41.7.51.7.6 |
1.7.7 |
djangoPyPI |
1.8a1 up to 1.8c1, plus listed versions 1.8b11.8b2 |
1.8c1 |
python-djangoMageia:4 |
before 1.5.9-1.2.mga4 | 1.5.9-1.2.mga4 |
python-django14Mageia:4 |
before 1.4.20-1.mga4 | 1.4.20-1.mga4 |
djangoPyPI |
before 1.4.20, 1.5 up to 1.6.11, 1.7 up to 1.7.7, 1.8a0 up to 1.8c1, plus listed versions 1.0.11.0.21.0.31.0.41.1 Show 45 moreShow less1.1.11.1.21.1.31.1.41.21.2.11.2.21.2.31.2.41.2.51.2.61.2.71.31.3.11.3.21.3.31.3.41.3.51.3.61.3.71.41.4.11.4.101.4.111.4.121.4.131.4.141.4.151.4.161.4.171.4.181.4.191.4.21.4.31.4.41.4.51.4.61.4.71.4.81.4.91.5.11.5.101.5.111.5.121.5.2 |
1.4.201.6.111.7.71.8c1 |
python-DjangoSUSE:Enterprise Storage 1.0 |
before 1.6.11-4.1 | 1.6.11-4.1 |
python-djangoUbuntu:14.04:LTS |
before 1.6.1-2ubuntu0.8, plus listed versions 1.5.4-1ubuntu11.6-11.6.1-11.6.1-21.6.1-2ubuntu0.1 Show 5 moreShow less1.6.1-2ubuntu0.21.6.1-2ubuntu0.31.6.1-2ubuntu0.41.6.1-2ubuntu0.51.6.1-2ubuntu0.6 |
1.6.1-2ubuntu0.8 |
History
| When | Changed | Sources |
|---|---|---|
| 2026-11-03 | aliases | EUVD |
| 2026-11-02 | created | CVE List, GitHub Advisories, NVD, OSV |
References
ubuntu.com/usn/usn-2539-1
securityfocus.com/bid/73319
debian.org/security/2015/dsa-3204
lists.fedoraproject.org/pipermail/package-announce/2015-April/155421.html
lists.opensuse.org/opensuse-updates/2015-09/msg00035.html
oracle.com/technetwork/topics/security/bulletinapr2015-2511959.html
Show 47 moreShow less
mandriva.com/security/advisories?name=MDVSA-2015:195
lists.opensuse.org/opensuse-updates/2015-04/msg00001.html
lists.fedoraproject.org/pipermail/package-announce/2015-June/160263.html
djangoproject.com/weblog/2015/mar/18/security-releases
nvd.nist.gov/vuln/detail/CVE-2015-2317
web.archive.org/web/20200228131706/http://www.securityfocus.com/bid/73319
github.com/django/django/commit/2342693b31f740a422abf7267c53b4e7bc487c1b
github.com/django/django/commit/2a4113dbd532ce952308992633d802dc169a75f1
github.com/django/django/commit/5510f070711540aaa8d3707776cd77494e688ef9
github.com/django/django/commit/770427c2896a078925abfca2317486b284d22f04
github.com/pypa/advisory-database/tree/main/vulns/django/PYSEC-2015-9.yaml
github.com/advisories/GHSA-7fq8-4pv5-5w5c
security-tracker.debian.org/tracker/CVE-2015-2317
github.com/django/django
advisories.mageia.org/MGASA-2015-0127.html
bugs.mageia.org/show_bug.cgi?id=15528
djangoproject.com/weblog/2015/mar/09/security-releases
suse.com/support/update/announcement/2015/suse-su-20150563-1
bugzilla.suse.com/893087
bugzilla.suse.com/893088
bugzilla.suse.com/893089
bugzilla.suse.com/893090
bugzilla.suse.com/913053
bugzilla.suse.com/913054
bugzilla.suse.com/913055
bugzilla.suse.com/913056
bugzilla.suse.com/914706
bugzilla.suse.com/923176
suse.com/security/cve/CVE-2014-0480
suse.com/security/cve/CVE-2014-0481
suse.com/security/cve/CVE-2014-0482
suse.com/security/cve/CVE-2014-0483
suse.com/security/cve/CVE-2015-0219
suse.com/security/cve/CVE-2015-0220
suse.com/security/cve/CVE-2015-0221
suse.com/security/cve/CVE-2015-0222
suse.com/security/cve/CVE-2015-2316
suse.com/security/cve/CVE-2015-2317
suse.com/support/update/announcement/2015/suse-su-20150694-1
bugzilla.suse.com/923172
suse.com/support/update/announcement/2015/suse-su-20150695-1
suse.com/support/update/announcement/2015/suse-su-20151109-1
suse.com/support/update/announcement/2015/suse-su-20151112-1
ubuntu.com/security/CVE-2015-2317
ubuntu.com/security/notices/USN-2539-1
cve.org/CVERecord?id=CVE-2015-2317
ubuntu.com/security/CVE-2015-2316
Left out here: 27 versions. The JSON record has them.