{"api_version":"1","generated_at":"2026-08-04T20:51:59+00:00","cve":"CVE-2026-15920","urls":{"html":"https://cve.report/CVE-2026-15920","api":"https://cve.report/api/cve/CVE-2026-15920.json","docs":"https://cve.report/api","cve_org":"https://www.cve.org/CVERecord?id=CVE-2026-15920","nvd":"https://nvd.nist.gov/vuln/detail/CVE-2026-15920"},"summary":{"title":"Potential cross-site scripting via URLField values in the admin","description":"An issue was discovered in Django 5.2 before 5.2.17 and 6.0 before 6.0.8.\n`django.contrib.admin.utils.display_for_field()` renders `URLField` values as clickable links in the admin without validating the URL. A value stored with an unsafe scheme is displayed as a link on changelist and read-only admin pages, which allows cross-site scripting against staff users who click the link.\r\nExploitation requires the unsafe value to already be stored in the database. `URLField` validation through a `ModelForm` or the admin rejects unsafe schemes, so this affects applications that persist `URLField` data without running model validation, for example through direct queryset writes, deserialization, or bulk import of untrusted input.\nDjango would like to thank Egor Saltykov for reporting this issue.","state":"PUBLISHED","assigner":"DSF","published_at":"2026-08-04 17:16:46","updated_at":"2026-08-04 18:16:45"},"problem_types":["CWE-83","CWE-83 CWE-83: Improper Neutralization of Script in Attributes in a Web Page"],"metrics":[{"version":"4.0","source":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","type":"Secondary","score":"5.1","severity":"MEDIUM","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","data":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":5.1,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"NONE","userInteraction":"ACTIVE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"LOW","subIntegrityImpact":"LOW","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}},{"version":"4.0","source":"CNA","type":"DECLARED","score":"5.1","severity":"MEDIUM","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","data":{"baseScore":5.1,"baseSeverity":"MEDIUM","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","version":"4.0"}},{"version":"3.1","source":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","type":"Secondary","score":"6.1","severity":"MEDIUM","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","data":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","baseScore":6.1,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","privilegesRequired":"NONE","userInteraction":"REQUIRED","scope":"CHANGED","confidentialityImpact":"LOW","integrityImpact":"LOW","availabilityImpact":"NONE"}},{"version":"3.1","source":"CNA","type":"DECLARED","score":"6.1","severity":"MEDIUM","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","data":{"baseScore":6.1,"baseSeverity":"MEDIUM","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","version":"3.1"}}],"references":[{"url":"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a","name":"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a","refsource":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/django/django/commit/13debb622a32720bda1bccda7622fd14fbf3931b","name":"https://github.com/django/django/commit/13debb622a32720bda1bccda7622fd14fbf3931b","refsource":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.djangoproject.com/weblog/2026/aug/04/security-releases/","name":"https://www.djangoproject.com/weblog/2026/aug/04/security-releases/","refsource":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/django/django/commit/47511a21026cdd721d8fbf8571cc079bc38bb46d","name":"https://github.com/django/django/commit/47511a21026cdd721d8fbf8571cc079bc38bb46d","refsource":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://groups.google.com/g/django-announce","name":"https://groups.google.com/g/django-announce","refsource":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://docs.djangoproject.com/en/dev/releases/security/","name":"https://docs.djangoproject.com/en/dev/releases/security/","refsource":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://github.com/django/django/commit/b9adb81339cc418f8f56b1050cca6dfec3ab6349","name":"https://github.com/django/django/commit/b9adb81339cc418f8f56b1050cca6dfec3ab6349","refsource":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","tags":[],"title":"","mime":"","httpstatus":"","archivestatus":"0"},{"url":"https://www.cve.org/CVERecord?id=CVE-2026-15920","name":"CVE Program record","refsource":"CVE.ORG","tags":["canonical"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-15920","name":"NVD vulnerability detail","refsource":"NVD","tags":["canonical","analysis"]}],"affected":[{"source":"CNA","vendor":"djangoproject","product":"Django","version":"affected 6.0 6.0.8 python","platforms":[]},{"source":"CNA","vendor":"djangoproject","product":"Django","version":"unaffected 6.0.8 python","platforms":[]},{"source":"CNA","vendor":"djangoproject","product":"Django","version":"affected 5.2 5.2.17 python","platforms":[]},{"source":"CNA","vendor":"djangoproject","product":"Django","version":"unaffected 5.2.17 python","platforms":[]}],"timeline":[{"source":"CNA","time":"2026-07-13T00:00:00.000Z","lang":"en","value":"Initial report received."},{"source":"CNA","time":"2026-07-21T00:00:00.000Z","lang":"en","value":"Vulnerability confirmed."},{"source":"CNA","time":"2026-08-04T10:00:00.000Z","lang":"en","value":"Security release issued."}],"solutions":[],"workarounds":[],"exploits":[],"credits":[{"source":"CNA","value":"Egor Saltykov","lang":"en"},{"source":"CNA","value":"Natalia Bidart","lang":"en"},{"source":"CNA","value":"Natalia Bidart","lang":"en"}],"nvd_cpes":[],"vendor_comments":[],"enrichments":{"kev":null,"epss":null,"legacy_qids":[]},"source_records":{"cve_program":{"containers":{"adp":[{"metrics":[{"other":{"content":{"id":"CVE-2026-15920","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"role":"CISA Coordinator","timestamp":"2026-08-04T17:16:24.319084Z","version":"2.0.3"},"type":"ssvc"}}],"providerMetadata":{"dateUpdated":"2026-08-04T17:21:13.428Z","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","shortName":"CISA-ADP"},"title":"CISA ADP Vulnrichment"}],"cna":{"affected":[{"collectionURL":"https://pypi.org/project/Django/","defaultStatus":"unaffected","packageName":"django","product":"Django","repo":"https://github.com/django/django/","vendor":"djangoproject","versions":[{"lessThan":"6.0.8","status":"affected","version":"6.0","versionType":"python"},{"status":"unaffected","version":"6.0.8","versionType":"python"},{"lessThan":"5.2.17","status":"affected","version":"5.2","versionType":"python"},{"status":"unaffected","version":"5.2.17","versionType":"python"}]}],"credits":[{"lang":"en","type":"reporter","value":"Egor Saltykov"},{"lang":"en","type":"remediation developer","value":"Natalia Bidart"},{"lang":"en","type":"coordinator","value":"Natalia Bidart"}],"datePublic":"2026-08-04T10:00:00.000Z","descriptions":[{"lang":"en","supportingMedia":[{"base64":false,"type":"text/html","value":"<p>An issue was discovered in Django 5.2 before 5.2.17 and 6.0 before 6.0.8.</p><p><code>django.contrib.admin.utils.display_for_field()</code> renders <code>URLField</code> values as clickable links in the admin without validating the URL. A value stored with an unsafe scheme is displayed as a link on changelist and read-only admin pages, which allows cross-site scripting against staff users who click the link.</p><p>Exploitation requires the unsafe value to already be stored in the database. <code>URLField</code> validation through a <code>ModelForm</code> or the admin rejects unsafe schemes, so this affects applications that persist <code>URLField</code> data without running model validation, for example through direct queryset writes, deserialization, or bulk import of untrusted input.</p><p>Django would like to thank Egor Saltykov for reporting this issue.</p>"}],"value":"An issue was discovered in Django 5.2 before 5.2.17 and 6.0 before 6.0.8.\n`django.contrib.admin.utils.display_for_field()` renders `URLField` values as clickable links in the admin without validating the URL. A value stored with an unsafe scheme is displayed as a link on changelist and read-only admin pages, which allows cross-site scripting against staff users who click the link.\r\nExploitation requires the unsafe value to already be stored in the database. `URLField` validation through a `ModelForm` or the admin rejects unsafe schemes, so this affects applications that persist `URLField` data without running model validation, for example through direct queryset writes, deserialization, or bulk import of untrusted input.\nDjango would like to thank Egor Saltykov for reporting this issue."}],"impacts":[{"capecId":"CAPEC-244","descriptions":[{"lang":"en","value":"CAPEC-244: XSS Targeting URI Placeholders"}]}],"metrics":[{"other":{"content":{"namespace":"https://docs.djangoproject.com/en/dev/internals/security/#security-issue-severity-levels","value":"moderate"},"type":"Django severity rating"}},{"cvssV3_1":{"baseScore":6.1,"baseSeverity":"MEDIUM","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","version":"3.1"}},{"cvssV4_0":{"baseScore":5.1,"baseSeverity":"MEDIUM","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N","version":"4.0"}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-83","description":"CWE-83: Improper Neutralization of Script in Attributes in a Web Page","lang":"en","type":"CWE"}]}],"providerMetadata":{"dateUpdated":"2026-08-04T15:48:40.537Z","orgId":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","shortName":"DSF"},"references":[{"name":"Django security archive","tags":["vendor-advisory"],"url":"https://docs.djangoproject.com/en/dev/releases/security/"},{"name":"Django releases announcements","tags":["mailing-list"],"url":"https://groups.google.com/g/django-announce"},{"tags":["patch"],"url":"https://github.com/django/django/commit/47511a21026cdd721d8fbf8571cc079bc38bb46d"},{"tags":["patch"],"url":"https://github.com/django/django/commit/5a260d309a4c8010c2ebda24eb758a5d95e2508a"},{"tags":["patch"],"url":"https://github.com/django/django/commit/13debb622a32720bda1bccda7622fd14fbf3931b"},{"tags":["patch"],"url":"https://github.com/django/django/commit/b9adb81339cc418f8f56b1050cca6dfec3ab6349"},{"name":"Django security releases issued: 6.0.8 and 5.2.17","tags":["vendor-advisory"],"url":"https://www.djangoproject.com/weblog/2026/aug/04/security-releases/"}],"source":{"discovery":"EXTERNAL"},"timeline":[{"lang":"en","time":"2026-07-13T00:00:00.000Z","value":"Initial report received."},{"lang":"en","time":"2026-07-21T00:00:00.000Z","value":"Vulnerability confirmed."},{"lang":"en","time":"2026-08-04T10:00:00.000Z","value":"Security release issued."}],"title":"Potential cross-site scripting via URLField values in the admin","x_generator":{"engine":"cvelib 1.8.0"}}},"cveMetadata":{"assignerOrgId":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","assignerShortName":"DSF","cveId":"CVE-2026-15920","datePublished":"2026-08-04T15:48:40.537Z","dateReserved":"2026-07-15T20:32:49.882Z","dateUpdated":"2026-08-04T17:21:13.428Z","state":"PUBLISHED"},"dataType":"CVE_RECORD","dataVersion":"5.2"},"nvd":{"publishedDate":"2026-08-04 17:16:46","lastModifiedDate":"2026-08-04 18:16:45","problem_types":["CWE-83","CWE-83 CWE-83: Improper Neutralization of Script in Attributes in a Web Page"],"metrics":{"cvssMetricV40":[{"source":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","type":"Secondary","cvssData":{"version":"4.0","vectorString":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:A/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","baseScore":5.1,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","attackRequirements":"NONE","privilegesRequired":"NONE","userInteraction":"ACTIVE","vulnConfidentialityImpact":"NONE","vulnIntegrityImpact":"NONE","vulnAvailabilityImpact":"NONE","subConfidentialityImpact":"LOW","subIntegrityImpact":"LOW","subAvailabilityImpact":"NONE","exploitMaturity":"NOT_DEFINED","confidentialityRequirement":"NOT_DEFINED","integrityRequirement":"NOT_DEFINED","availabilityRequirement":"NOT_DEFINED","modifiedAttackVector":"NOT_DEFINED","modifiedAttackComplexity":"NOT_DEFINED","modifiedAttackRequirements":"NOT_DEFINED","modifiedPrivilegesRequired":"NOT_DEFINED","modifiedUserInteraction":"NOT_DEFINED","modifiedVulnConfidentialityImpact":"NOT_DEFINED","modifiedVulnIntegrityImpact":"NOT_DEFINED","modifiedVulnAvailabilityImpact":"NOT_DEFINED","modifiedSubConfidentialityImpact":"NOT_DEFINED","modifiedSubIntegrityImpact":"NOT_DEFINED","modifiedSubAvailabilityImpact":"NOT_DEFINED","Safety":"NOT_DEFINED","Automatable":"NOT_DEFINED","Recovery":"NOT_DEFINED","valueDensity":"NOT_DEFINED","vulnerabilityResponseEffort":"NOT_DEFINED","providerUrgency":"NOT_DEFINED"}}],"cvssMetricV31":[{"source":"6a34fbeb-21d4-45e7-8e0a-62b95bc12c92","type":"Secondary","cvssData":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N","baseScore":6.1,"baseSeverity":"MEDIUM","attackVector":"NETWORK","attackComplexity":"LOW","privilegesRequired":"NONE","userInteraction":"REQUIRED","scope":"CHANGED","confidentialityImpact":"LOW","integrityImpact":"LOW","availabilityImpact":"NONE"},"exploitabilityScore":2.8,"impactScore":2.7}],"ssvcV203":[{"source":"134c704f-9b21-4f2e-91b3-4a467353bcc0","ssvcData":{"timestamp":"2026-08-04T17:16:24.319084Z","id":"CVE-2026-15920","options":[{"exploitation":"none"},{"automatable":"no"},{"technicalImpact":"partial"}],"role":"CISA Coordinator","version":"2.0.3"}}]},"configurations":[]},"legacy_mitre":{"record":{"CveYear":"2026","CveId":"15920","Ordinal":"1","Title":"Potential cross-site scripting via URLField values in the admin","CVE":"CVE-2026-15920","Year":"2026"},"notes":[{"CveYear":"2026","CveId":"15920","Ordinal":"1","NoteData":"An issue was discovered in Django 5.2 before 5.2.17 and 6.0 before 6.0.8.\n`django.contrib.admin.utils.display_for_field()` renders `URLField` values as clickable links in the admin without validating the URL. A value stored with an unsafe scheme is displayed as a link on changelist and read-only admin pages, which allows cross-site scripting against staff users who click the link.\r\nExploitation requires the unsafe value to already be stored in the database. `URLField` validation through a `ModelForm` or the admin rejects unsafe schemes, so this affects applications that persist `URLField` data without running model validation, for example through direct queryset writes, deserialization, or bulk import of untrusted input.\nDjango would like to thank Egor Saltykov for reporting this issue.","Type":"Description","Title":"Potential cross-site scripting via URLField values in the admin"}]}}}