
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2025-12925 is a Missing Authorization vulnerability in rymcu/forest, a modern knowledge community backend built with SpringBoot, Shiro, MyBatis, JWT, and Redis. The flaw affects the UserDicController.java file (functions getAll, addDic, getAllDic/editDic, and deleteDic) in all versions up to and including commit de53ce79db9faa2efc4e79ce1077a302c42a1224 (≤ v1.0). Because forest operates on a rolling release model, there are no discrete version numbers for affected or patched releases. It carries a CVSS v3.1 base score of 9.8 (Critical) (Feedly, GitHub Issue). The vulnerability was reported on October 23, 2025, and published on November 10, 2025.
The root cause is CWE-862 (Missing Authorization) and CWE-284 (Improper Access Control): none of the four REST endpoints in UserDicController.java carry any authentication or authorization annotations (e.g., @RequiresPermissions, @RequiresRoles, or token validation), unlike other controllers in the same codebase such as ArticleController (GitHub Issue). The vulnerable endpoints are:
GET /api/v1/lucene/dic/getAll — unauthenticated dictionary enumerationPOST /api/v1/lucene/dic/addDic/{dic} — unauthenticated dictionary entry creationPUT /api/v1/lucene/dic/editDic — unauthenticated dictionary entry modificationDELETE /api/v1/lucene/dic/deleteDic/{id} — unauthenticated dictionary entry deletionEach write operation also triggers writeUserDic(), which rewrites the lucene/userDic/userDic.dic file on disk and calls Dictionary.getSingleton().updateUserDict() to reload the Lucene tokenizer in real time. No input validation or rate limiting is applied. The vulnerability was discovered via static analysis using the IRify tool (GitHub Issue).
An unauthenticated remote attacker can read, create, modify, and delete entries in the system-wide Lucene user dictionary, which directly affects full-text search across all platform features including article search, user search, portfolio search, and tag recognition (GitHub Issue). Integrity impacts include search result manipulation (injecting competitor terms, spam, or offensive content), while availability impacts include denial of service through dictionary flooding (exhausting disk space), rapid file rewrites (I/O spikes), or deletion of all entries to break search functionality. Confidentiality is also affected, as the getAll endpoint exposes proprietary business terminology and custom search terms without authentication (Feedly).
A proof-of-concept is publicly available in the GitHub issue report, demonstrating unauthenticated HTTP requests to all four vulnerable endpoints (GitHub Issue). No authentication, special privileges, or user interaction are required, making exploitation trivial from any network location. There is no evidence of active in-the-wild exploitation at this time, and the vulnerability is not listed in the CISA KEV catalog. The EPSS score is approximately 0.038% (0.000380), indicating a currently low probability of widespread exploitation (Feedly).
/api/v1/lucene/dic/getAll).GET /api/v1/lucene/dic/getAll?page=0&rows=100 HTTP/1.1
Host: <target>
Accept: application/jsonPOST /api/v1/lucene/dic/addDic/malicious_term HTTP/1.1
Host: <target>This triggers a file system write to lucene/userDic/userDic.dic and a live Lucene dictionary reload.PUT /api/v1/lucene/dic/editDic HTTP/1.1
Host: <target>
Content-Type: application/json
{"id":1,"dic":"manipulated_term"}DELETE /api/v1/lucene/dic/deleteDic/<id> HTTP/1.1
Host: <target>/api/v1/lucene/dic/getAll; unauthenticated POST requests to /api/v1/lucene/dic/addDic/<term>; unauthenticated PUT requests to /api/v1/lucene/dic/editDic; unauthenticated DELETE requests to /api/v1/lucene/dic/deleteDic/<id>; high-volume repeated requests to any of these endpoints from a single IP.lucene/userDic/userDic.dic; unusual growth in the lucene/userDic/ directory; new or modified dictionary files with unfamiliar or spam content./api/v1/lucene/dic/* endpoints without authentication tokens or session cookies; Java stack traces related to UserDicServiceImpl.writeUserDic() or Dictionary.getSingleton().updateUserDict() during unexpected times.Update rymcu/forest to the latest commit after de53ce79db9faa2efc4e79ce1077a302c42a1224, which addresses this issue as tracked in the GitHub repository (GitHub Issue). As an immediate workaround, add @RequiresRoles(value = "admin") annotations to all four endpoints in UserDicController.java and implement input validation (length limits, character allowlists) on the addDic and editDic endpoints. Additionally, apply network-level access controls (e.g., firewall rules or API gateway policies) to restrict access to the /api/v1/lucene/dic/* endpoints to trusted administrative IP ranges only, and implement rate limiting to mitigate DoS risk.
RedPacket Security flagged the vulnerability via social media shortly after publication (RedPacket Security). Red Hat's security advisory page also indexed the CVE (Red Hat). No significant broader media coverage or notable researcher commentary beyond the initial disclosure has been identified.
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."