Materialized exploit
CVE-2025-46819
MEDIUM1 public exploit(s) for this CVE, 1 materialized with their code.
For defensive research only. Only test on systems you own or have written authorization for. Unauthorized access is illegal.
Nuclei
high Verified
Source
Redis < 8.2.1 Lua Long-String Delimiter - Out-of-Bounds Read
By projectdiscovery
How to test this exploit
The Nuclei template IS the test: an executable detection rule. Install nuclei, then run it against a target you control.
nuclei -id CVE-2025-46819 -u https://your-target
Template yaml
id: CVE-2025-46819
info:
name: Redis < 8.2.1 Lua Long-String Delimiter - Out-of-Bounds Read
author: pussycat0x
severity: high
description: |
Redis is an open source, in-memory database that persists on disk. Versions 8.2.1 and below allow an authenticated user to use a specially crafted LUA script to read out-of-bound data or crash the server and subsequent denial of service. The problem exists in all versions of Redis with Lua scripting. This issue is fixed in version 8.2.2. To workaround this issue without patching the redis-server executable is to prevent users from executing Lua scripts. This can be done using ACL to block a script by restricting both the EVAL and FUNCTION command families.
impact: |
Authenticated attackers can use specially crafted Lua scripts to read out-of-bound data or crash the Redis server, causing denial of service.
reference:
- https://github.com/dwisiswant0/CVE-2025-46819
remediation: |
Update to version 8.2.2 or later.
metadata:
verified: true
max-request: 1
shodan-query: product:"redis"
tags: cve,cve2025,js,redis,network,passive,authenticated,vuln
flow: javascript(1) && javascript(2)
javascript:
- pre-condition: |
isPortOpen(Host,Port);
code: |
const redis = require('nuclei/redis');
const info = redis.GetServerInfo(Host,Port);
Export(info);
args:
Host: "{{Host}}"
Port: "6379"
matchers:
- type: dsl
dsl:
- success == true
- compare_versions(version, ' < 8.2.2')
condition: and
extractors:
- type: regex
name: version
part: response
group: 1
regex:
- redis_version:(\d+\.\d+\.\d+)
- code: |
const redis = require('nuclei/redis');
const info = redis.RunLuaScript(Host,Port,Password,Payload);
Export(info);
args:
Host: "{{Host}}"
Port: "6379"
Password: "{{passwords}}"
Payload: 'return "lua enabled"'
payloads:
passwords:
- ""
matchers:
- type: dsl
dsl:
- success == true
- contains(response, 'lua enabled')
condition: and
internal: true
# digest: 490a00463044022038c61354e8bb545b853ae78995deb3430115da9f6940ca52252e61014377f60e022047b4b429e04e7ff07164acf4e23ff03a792894bb2a3000a6bb6150543cadbf07:922c64590222798bb761d5b6d8e72950