CVE-2026-40470
Hackage package and doc upload stored XSS vulnerability
A critical XSS vulnerability affected hackage-server and hackage.haskell.org. HTML and JavaScript files provided in source packages or via the documentation upload facility were served as-is on the main hackage.haskell.org domain. As a consequence, when a user with latent HTTP credentials browses to the package pages or documentation uploaded by a malicious package maintainer, their session can be hijacked to upload packages or documentation, amend maintainers or other package metadata, or perform any other action the user is authorised to do.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- Low
Exploit likelihood
What each source reports
CVE List Score used
9.9
Hackage package and doc upload stored XSS vulnerability
A critical XSS vulnerability affected hackage-server and hackage.haskell.org. HTML and JavaScript files provided in source packages or via the documentation upload facility were served as-is on the main hackage.haskell.org domain. As a consequence, when a user with latent HTTP credentials browses to the package pages or documentation uploaded by a malicious package maintainer, their session can be hijacked to upload packages or documentation, amend maintainers or other package metadata, or perform any other action the user is authorised to do.
- Record
CVE-2026-40470- CVSS 3.1
- 9.9 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L - Weakness
- CWE-79
- Updated
- 2026-11-02
EUVDEUVD-2026-25233
9.9
A critical XSS vulnerability affected hackage-server and hackage.haskell.org. HTML and JavaScript files provided in source packages or via the documentation upload facility were served as-is on the main hackage.haskell.org domain. As a consequence, when a user with latent HTTP credentials browses to the package pages or documentation uploaded by a malicious package maintainer, their session can be hijacked to upload packages or documentation, amend maintainers or other package metadata, or perform any other action the user is authorised to do.
- Record
EUVD-2026-25233- CVSS 3.1
- 9.9 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-hxp4-rf8g-9mwq
9.9
A critical XSS vulnerability affected hackage-server and hackage.haskell.org. HTML and...
A critical XSS vulnerability affected hackage-server and hackage.haskell.org. HTML and JavaScript files provided in source packages or via the documentation upload facility were served as-is on the main hackage.haskell.org domain. As a consequence, when a user with latent HTTP credentials browses to the package pages or documentation uploaded by a malicious package maintainer, their session can be hijacked to upload packages or documentation, amend maintainers or other package metadata, or perform any other action the user is authorised to do.
- Record
GHSA-hxp4-rf8g-9mwq- CVSS 3.1
- 9.9 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L - Weakness
- CWE-79
- Updated
- 2026-11-02
NVD
9.9
A critical XSS vulnerability affected hackage-server and hackage.haskell.org. HTML and JavaScript files provided in source packages or via the documentation upload facility were served as-is on the main hackage.haskell.org domain. As a consequence, when a user with latent HTTP credentials browses to the package pages or documentation uploaded by a malicious package maintainer, their session can be hijacked to upload packages or documentation, amend maintainers or other package metadata, or perform any other action the user is authorised to do.
- Record
CVE-2026-40470- CVSS 3.1
- 9.9 Critical
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L - Weakness
- CWE-79
- Updated
- 2026-11-02
OSVHSEC-2024-0004 No score
Hackage package and doc upload stored XSS vulnerability
Hackage package and doc upload stored XSS vulnerability
Author: Fraser Tweedale (Haskell SRT)
Executive summary
A critical XSS vulnerability affected hackage-server and
hackage.haskell.org. HTML and JavaScript files provided in source
packages or via the documentation upload facility were served
as-is on the main hackage.haskell.org domain. As a consequence,
when a user with latent HTTP credentials browses to the package
pages or documentation uploaded by a malicious package maintainer,
their session can be hijacked to upload packages or
documentation, amend maintainers or other package metadata, or
perform any other action the user is authorised to do.
This issue was discovered and reported to the Haskell Security
Response Team (SRT) in June 2024. Remediations were progressively
developed and deployed throughout 2025. The known issues have
been fully mitigated on hackage.haskell.org as of January 2026.
The mitigations involve serving user content from a sister domain.
In the case of hackage.haskell.org, this domain is
hackage-content.haskell.org.
Operators of other hackage-server instances should update to the
master branch from the upstream repository
(https://github.com/haskell/hackage-server; commit
9a1887607d9b8d1a3b8b02c990ee144c0d402b79 or later), and configure
the user content domain (new flag --user-content-uri).
Scope of the issue
Package documentation uploads
Any Hackage user can upload documentation bundles for the packages they own. Typically those are prepared by Haddock, but they may be customised or modified. Malicious code can be delivered in several ways:
- In JavaScript files loaded by an HTML page;
- In
<script>tags on an HTML page; - In action attributes (e.g.
onclick) on an HTML page.
quick-jump JavaScript
In addition to the supplied HTML pages, parts of the uploaded
documentation bundle are referenced from the main package page (and
candidate pages)—in particular, quick-jump.min.js, which
implements the "quick jump" feature, and the corresponding CSS file
(CSS can also present an XSS risk). These files are included by the
following templates:
datafiles/templates/Html/package-page.html.stdatafiles/templates/Html/candidate-page.html.st
It is loaded via a <script> tag:
<script src="$doc.baseUrl$/quick-jump.min.js" type="text/javascript"></script>
Source tarball browsing
HTML content in the source package is served as text/html or
application/xhtml+xml, depending on file extension. The browser
renders the page and executes scripts without restriction. The same
scope of exploitation arises as for documentation uploads.
Impact
Malicious scripts can use latent HTTP credentials in the browser to perform any action the user is authorised to do, without user interaction. This could include uploading new package versions, editing packaging metadata, adding new maintainers, and more.
Additionally, malicious scripts and HTML could present a counterfeit login form to the user, tricking the user into divulging their credentials. The script can then abuse the credentials in the same way as the latent credential scenario.
- CVSS vector string: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:L
- CVSS score: 9.9 (Critical)
Mitigations
This section describes the code and configuration changes to mitigate the issues.
User content domain
hackage-server was updated to serve user-uploaded content from a separate DNS domain. This includes package documentation (excluding the main package description) and source tarball browsing, for both published and candidate packages.
For the relevant resources, requests on the main domain are redirected to the user content domain via an HTTP 301 ("Moved Permanently") response status.
Doc and source tarballs uploaded prior to the deployment of these mitigations are exempted from the redirection, and remain accessible via the main domain…
- Record
HSEC-2024-0004- Updated
- 2026-11-02
Affected packages
| Package | Affected | Fixed |
|---|---|---|
hackage-serverHackage |
0.1 up to 0.6, plus listed versions 0.40.5.0 |
0.6 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-40470 is a critical vulnerability (CVSS 9.9) in hackage-server, published January 16, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.31%, the 23rd percentile. Fixed in hackage-server 0.6.
References
osv.dev/vulnerability/HSEC-2024-0004
nvd.nist.gov/vuln/detail/CVE-2026-40470
github.com/advisories/GHSA-hxp4-rf8g-9mwq
github.com/haskell/hackage-server/commit/5a0dc3357b042502fcf684ed7e2464fde1407809
github.com/haskell/hackage-server/commit/33d9ea3de9a298b21b53ba23386af2742384e627
github.com/haskell/hackage-server/commit/354a7de3b7f21ad1346677df515d8e8ec75016e6
Left out here: the rest of 1 source description. The JSON record has them.