JeecgBoot mLogin Endpoint CAPTCHA Bypass Enabling Credential Brute Force (CVE-2026-8196)
by Unknown (credited reference: xpp3901/CVE_APPLY V-009) · 2026-07-05
- Severity
- High
- CVE
- CVE-2026-8196
- Category
- web
- Affected product
- JeecgBoot (/sys/mLogin endpoint)
- Affected versions
- Not specified in source (affects instances exposing /sys/mLogin)
- Disclosed
- 2026-07-05
- Patch status
- unpatched
Tags
References
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-05 |
| Last Updated | 2026-06 |
| Author / Researcher | Unknown (credited reference: xpp3901/CVE_APPLY V-009) |
| CVE / Advisory | CVE-2026-8196 |
| Category | web |
| Severity | High |
| CVSS Score | Not specified in source |
| Status | PoC |
| Tags | jeecgboot, captcha-bypass, credential-stuffing, brute-force, missing-rate-limiting, authentication-bypass |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | JeecgBoot (/sys/mLogin endpoint) |
| Versions Affected | Not specified in source (affects instances exposing /sys/mLogin) |
| Language / Platform | Java (Spring Boot) web application |
| Authentication Required | No |
| Network Access Required | Yes |
Summary
JeecgBoot exposes a secondary login endpoint, /sys/mLogin, that accepts the same username/password credentials as the standard /sys/login endpoint but — unlike /sys/login — does not enforce a CAPTCHA challenge and applies no rate limiting or account lockout. This allows an attacker to bypass the CAPTCHA protection intended to slow down automated login attempts and perform efficient, unthrottled credential brute-forcing or credential-stuffing against /sys/mLogin, obtaining a valid JWT token on success.
Vulnerability Details
Root Cause
Inconsistent authentication controls between two functionally equivalent login endpoints: /sys/login enforces a CAPTCHA, while /sys/mLogin accepts the identical credential payload without any CAPTCHA, rate limiting, or lockout.
Attack Vector
- Identify that the target JeecgBoot instance exposes
/sys/mLoginin addition to/sys/login. - Send repeated JSON login requests to
/sys/mLoginwith candidate username/password pairs (no CAPTCHA field required). - Because there is no throttling, the attacker can iterate through a credential list (brute force or credential stuffing) far faster than the CAPTCHA-protected
/sys/loginendpoint would allow. - A successful guess returns a full JWT authentication token, granting access equivalent to a normal login.
Impact
Enables efficient, automatable brute-force and credential-stuffing attacks against user accounts, bypassing anti-automation protections and potentially leading to account takeover.
Environment / Lab Setup
Target: A JeecgBoot instance exposing /sys/mLogin and /sys/login
Attacker: Any HTTP client (exploit.py provided, using the `requests` library)
Proof of Concept
PoC Script
See
exploit.pyin this folder.
| |
exploit.py demonstrates that /sys/login enforces a CAPTCHA (test_standard_login()), while /sys/mLogin accepts the same credentials without a CAPTCHA field (mlogin()), returning a valid JWT — illustrating the bypass and its suitability for brute-force/credential-stuffing automation.
Detection & Indicators of Compromise
Signs of compromise:
- Repeated failed authentication attempts against
/sys/mLoginin rapid succession. - Successful
/sys/mLoginauthentications immediately following a burst of failures from the same source. - Traffic to
/sys/mLogindisproportionate to traffic on the CAPTCHA-protected/sys/login.
Remediation
| Action | Detail |
|---|---|
| Primary fix | Apply the same CAPTCHA requirement, rate limiting, and account lockout policy to /sys/mLogin as /sys/login, or remove/restrict the endpoint if not required |
| Interim mitigation | Block or rate-limit external access to /sys/mLogin at the reverse proxy/WAF layer |
References
Notes
Mirrored from https://github.com/HORKimhab/CVE-2026-8196 on 2026-07-05. This repository’s upstream README is a generic legal/ethics disclaimer with no independent technical writeup beyond a credit link to another researcher’s report (xpp3901/CVE_APPLY); the account has prior farm-account history, so treat with appropriate additional scrutiny even though exploit.py is functional, non-obfuscated PoC code.
| |