SimpleHelp OIDC Authentication Bypass via Unverified JWT Signature (CVE-2026-48558)
by J4ck3LSyN · 2026-07-19
- Severity
- Critical
- CVE
- CVE-2026-48558
- Category
- web
- Affected product
- SimpleHelp — remote support / RMM (remote monitoring and management) platform, OIDC authentication flow
- Affected versions
- 5.5.15 and prior; 6.0 pre-release versions
- Disclosed
- 2026-07-19
- Patch status
- patched
Tags
References
- https://horizon3.ai/attack-research/disclosures/cve-2026-48558-simplehelp-authentication-bypass-iocs/
- https://blackpointcyber.com/blog/a-djinn-in-the-machine-taskweavers-node-js-intrusion-chain/
- https://simple-help.com/security/simplehelp-security-update-2026-05
- https://www.cisa.gov/known-exploited-vulnerabilities-catalog?field_cve=CVE-2026-48558
- https://github.com/J4ck3LSyN-Gen2/CVE-2026-48558
Archive entry
intelseclab/poc-archiveMetadata
| Field | Value |
|---|---|
| Date Added | 2026-07-19 |
| Last Updated | 2026-07-19 |
| Author / Researcher | J4ck3LSyN |
| CVE / Advisory | CVE-2026-48558 |
| Category | web |
| Severity | Critical |
| CVSS Score | 10.0 (CVSS 3.1, AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H) |
| Status | Weaponized — forges valid privileged sessions with no credentials |
| Tags | simplehelp, rmm, oidc, jwt, alg-none, cwe-347, authentication-bypass, unauthenticated, remote, kev, actively-exploited, ransomware |
| Related | N/A |
Affected Target
| Field | Value |
|---|---|
| Software / System | SimpleHelp — remote support / RMM (remote monitoring and management) platform, OIDC authentication flow |
| Versions Affected | 5.5.15 and prior; 6.0 pre-release versions |
| Language / Platform | Java-based server, attacked via crafted HTTP requests to the OIDC callback endpoint |
| Authentication Required | No |
| Network Access Required | Yes — reachability to a SimpleHelp instance with OIDC authentication configured |
Summary
When OIDC (OpenID Connect) authentication is configured on a SimpleHelp server, the server accepts identity tokens (JWTs) submitted during login without verifying their cryptographic signature. A remote, unauthenticated attacker can forge a token containing arbitrary identity claims — including group memberships — and submit it to the OIDC callback endpoint to obtain a fully authenticated, privileged Technician session, in some configurations also bypassing multi-factor authentication. Since SimpleHelp Technician access grants remote control over every managed endpoint, this single forged-token trick can cascade into compromise of an entire fleet of remotely-managed machines — CISA’s KEV listing and third-party incident response reporting confirm this is being actively exploited, including deployment of the “TaskWeaver” Node.js loader and “Djinn Stealer” malware.
Vulnerability Details
Root Cause
Tracked as CWE-347 (Improper Verification of Cryptographic Signature). SimpleHelp’s OIDC token validation logic fails to enforce JWT signature verification — a token with alg: none (no signature at all) or an invalid signature under any algorithm is still accepted. It also insufficiently validates standard claims (iss, aud, exp) in certain flows. When a Technician group is configured with “Allow group authenticated logins,” a forged token merely claiming membership in that group is enough to be granted a fully authenticated Technician session — no actual identity provider interaction, credentials, or valid signature required.
Attack Vector
- Identify the target’s OIDC callback endpoint — typically
/auth/oidc/callbackor one of several similar documented paths. - Forge a JWT with
alg: none(or an arbitrary-keyedHS256token), settingiss/audto match the server’s configured OIDC settings andgroupsto include the privileged Technician group name. - POST the forged token as
id_tokento the discovered callback endpoint. - The server accepts the token without signature verification and establishes an authenticated Technician session — no credentials or valid identity provider round-trip required.
Impact
Complete unauthenticated compromise of a SimpleHelp server’s Technician access, cascading to remote control over every endpoint the RMM instance manages: script execution, credential access, and persistent access across an entire managed fleet. Real-world exploitation has been observed deploying additional malware (TaskWeaver loader, Djinn Stealer) for follow-on access.
Environment / Lab Setup
Target: SimpleHelp <= 5.5.15 or 6.0 pre-release, with OIDC authentication configured
Attacker: Python 3 + requests + PyJWT
Setup Steps
| |
Proof of Concept
See
poc.pyin this folder — mirrored from J4ck3LSyN-Gen2/CVE-2026-48558. Verified before ingestion: read the full script — it forgesalg: none(and optionallyHS256) JWTs with attacker-choseniss/aud/sub/groupsclaims, auto-discovers the real OIDC callback path from a documented candidate list (/auth/oidc/callback,/oauth2/callback/oidc,/servlet/auth/oidc/callback, etc.), and POSTs the forged token, checking the response for session cookies and privileged-access markers. Matches the vendor’s own root-cause description exactly and cross-references Horizon3.ai’s published IOCs and the real observed TaskWeaver/Djinn Stealer post-exploitation chain. One cosmetic issue noted: the README’s warning banner contains a copy-pasted, unrelated line referencing a different CVE (a Chrome sandbox bug) from the same author’s other repository — a sloppy artifact that doesn’t affect the correctness of the actual SimpleHelp exploit logic, which is specific, accurate, and functional.
Step-by-Step Reproduction
| |
Exploit Code
| |
Expected Output
[*] Discovering OIDC callback...
[+] Candidate: https://target.example.com/auth/oidc/callback (302)
[*] Token: eyJhbGciOiJub25lIiwidHlwIjoiSldUIn0...
[*] Attacking...
[+] Status: 302
[+] Cookies: ['simplehelp_session']
[+] Likely success
[+] Success!
[+] Cookies saved
Detection & Indicators of Compromise
Remediation
| Action | Detail |
|---|---|
| Patch | Upgrade to SimpleHelp 5.5.16 (5.5 branch) or 6.0 RC2+ (6.0 branch). |
| Workaround | Disable OIDC authentication entirely until patched, or restrict server access via firewall/VPN/IP allowlisting. |
| Incident response if already compromised | Audit and remove any unexpected Technician accounts, rotate all managed-endpoint credentials, hunt for TaskWeaver/Djinn Stealer indicators on every managed endpoint. |
References
- Horizon3.ai — disclosure and IOCs
- Blackpoint Cyber — “A Djinn in the Machine”: TaskWeaver’s Node.js intrusion chain
- SimpleHelp security update 2026-05
- CISA KEV catalog entry
- Public PoC — J4ck3LSyN-Gen2/CVE-2026-48558
Notes
Surfaced via a 30-day CVE discovery sweep on 2026-07-19, anchored on CISA KEV’s dateAdded field (added 2026-06-29). Verified before ingestion per this archive’s standing rule: read poc.py in full and cross-checked its technique against the vendor’s own root-cause description and Horizon3.ai’s published IOCs — consistent and correct, aside from an unrelated copy-paste artifact in the README’s warning banner (noted above, does not affect the exploit’s validity).
| |