CVE-2026-85725: LightRAG: Plaintext Passwords Compared Without Constant-Time Function
LightRAG provides simple and fast retrieval-augmented generation. Prior to 1.5.5, verifypassword in lightrag/api/passwords.py compares plaintext AUTHACCOUNTS password values with Python's == operator. The comparison can return after the first mismatching byte, creating response-time differences based on password length and matching prefixes. A network attacker with sufficiently low-latency access can repeatedly query the /login endpoint and use the timing oracle to recover a plaintext-configured password character by character. Deployments using bcrypt-prefixed password values are not affected by this comparison path. This issue is fixed in version 1.5.5.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Upgrade
Upgrade
LightRAGto a version that resolves this vulnerability.Fixed in 1.5.5
Event History
Frequently Asked Questions
Which deployments are affected?
Deployments running LightRAG before version 1.5.5 are affected only when AUTH_ACCOUNTS contains plaintext password values. Deployments using bcrypt-prefixed password values do not use the vulnerable comparison path.
What does an attacker need to exploit this issue?
An attacker needs network access to repeatedly submit requests to the /login endpoint and sufficiently low-latency conditions to distinguish response-time differences. No credentials or user interaction are required, but exploitation has high attack complexity because timing measurements must be reliable enough to infer matching password prefixes.
What should be done if an immediate upgrade is not possible?
Replace plaintext AUTH_ACCOUNTS password values with bcrypt-prefixed password values, which are not affected by this comparison path. Upgrade to LightRAG 1.5.5 when possible.
How can I determine whether my instance is exposed?
Check the deployed LightRAG version and inspect AUTH_ACCOUNTS password values. An instance is exposed if it is earlier than 1.5.5 and has plaintext password values configured; bcrypt-prefixed values are not affected.