I'm reporting a confirmed exploitation of the Next.js RSC vulnerability (patched in v3.0.2) on a Umami v2.19.0 instance running Next.js 15.4.7.
Incident Summary
Our production instance was actively targeted and exploited through the Next.js vulnerability. The attack was detected through application logs showing multiple exploitation attempts.
Attack Patterns Observed
Server Action Exploitation:
Multiple attempts to invoke non-existent Server Actions
Ugh got bite by this too. Whats extremely sad on my side is I had a note
# TODO: Investigate why Umami doesn't work on a readonly Alpine container.
"readonlyRootFilesystem": false
In our container which would have stopped this dead. I'll go research what blockers I hit with the container writing to random areas to see if they can be fixed with volumes, parameters, configuration or changes.
So I dug into this why I disabled Read Only and it was because prisma downloads the "engine" at runtime during migrations. This writes into x area and causes the container to crash out because read only.
Error: Schema engine exited. Error: Could not find schema-engine binary. Searched in:
- /app/node_modules/.pnpm/@prisma+engines@6.7.0/node_modules/@prisma/engines/schema-engine-linux-musl-openssl-3.0.x
So I thought about this and made a change to our Dockerfile that we deploy into ECS.
FROM ghcr.io/umami-software/umami:postgresql-v2 AS base# Force Prisma CLI to run at build-time so it fetches enginesRUN cd /app \&& pnpm prisma -v \&& pnpm prisma generateFROM base AS deploy
So just by tricking prisma ahead of time causes my Docker image to be built with the engines inside of it. This means I don't have that outbound network call (or write to IO). This in 24h of testing has worked. I run a readonly Umami container to defend against these type of attacks.
I have Umami also running in a container and just noticed that it was running at +1000% in docker stats. I since updated it to v2.20.1.
Given that it was in a docker container, is there a risk it could have affected the host system? Do I need to change the HASH_SALT or any other precautions, or is it sufficient to just replace the container?
Activity
MichaelBelgium commentedon Dec 5, 2025
Your server is compromised. Thanks to nextjs and RCE.
I've had the same, version 2 needs to update nextjs asap #3833 (comment)
franciscao633 commentedon Dec 6, 2025
Sigh,.. Thanks will do a v2 release asap.
allefrodrigo commentedon Dec 6, 2025
Security Incident Report - Next.js CVE Exploitation Confirmed
I'm reporting a confirmed exploitation of the Next.js RSC vulnerability (patched in v3.0.2) on a Umami v2.19.0 instance running Next.js 15.4.7.
Incident Summary
Our production instance was actively targeted and exploited through the Next.js vulnerability. The attack was detected through application logs showing multiple exploitation attempts.
Attack Patterns Observed
Server Action Exploitation:
x-action-redirect)Remote Code Execution Attempts:
curlandwgetDatabase Access Attempts:
region,country)Mitigation
Fortunately, the container environment limited the attack surface:
Impact Assessment
Potentially compromised: Static assets served to end users (e.g.,
script.js) during the attack window.Action taken:
Recommendation
Anyone running Umami < v3.0.2 with Next.js 15.4.x should treat their instance as potentially compromised and:
script.js)mikecao commentedon Dec 6, 2025
v2 is now updated.
iBotPeaches commentedon Dec 7, 2025
Ugh got bite by this too. Whats extremely sad on my side is I had a note
In our container which would have stopped this dead. I'll go research what blockers I hit with the container writing to random areas to see if they can be fixed with volumes, parameters, configuration or changes.
urania-dev commentedon Dec 7, 2025
yep. same.
iBotPeaches commentedon Dec 10, 2025
So I dug into this why I disabled Read Only and it was because prisma downloads the "engine" at runtime during migrations. This writes into x area and causes the container to crash out because read only.
So I thought about this and made a change to our Dockerfile that we deploy into ECS.
So just by tricking prisma ahead of time causes my Docker image to be built with the engines inside of it. This means I don't have that outbound network call (or write to IO). This in 24h of testing has worked. I run a readonly Umami container to defend against these type of attacks.
Hope that helps someone.
MatthK commentedon Dec 10, 2025
I have Umami also running in a container and just noticed that it was running at +1000% in docker stats. I since updated it to v2.20.1.
Given that it was in a docker container, is there a risk it could have affected the host system? Do I need to change the HASH_SALT or any other precautions, or is it sufficient to just replace the container?
mikecao commentedon Dec 11, 2025
@MatthK you should at the very least cycle all your env variables