Skip to content

CVE-2026-48558: Verified Reproduction

CVE-2026-48558: SimpleHelp OIDC authentication accepts unsigned/forged ID tokens, enabling remote authentication bypass and possible MFA bypass in versions 5.5.15 and earlier and 6.0 prereleases prior to the fixed release.

CVE-2026-48558 is verified against SimpleHelp · other (commercial, Java-based server application). Affected versions: SimpleHelp 5.5.15 and earlier; 6.0 prerelease versions before 6.0 RC2. Fixed in 5.5.16; 6.0 RC2 / 6.0 prerelease (20260327-150806). Vulnerability class: Auth Bypass. This critical reproduction includes runnable sandbox proof, artifacts, and a plain-text agent view under REPRO-2026-00222.

REPRO-2026-00222 SimpleHelp · other (commercial, Java-based server application) Auth Bypass Jul 4, 2026 CVE entry .txt
Severity
CRITICAL
CVSS
9.5
Confidence
HIGH
Reproduced in
94m 25s
Tool calls
550
Spend
$37.97
01 · Overview

What Is CVE-2026-48558?

CVE-2026-48558 is a critical authentication bypass (CWE-347, CVSS 9.5) in SimpleHelp's OpenID Connect (OIDC) login flow, which fails to verify the cryptographic signature on submitted ID tokens, letting an unauthenticated remote attacker forge a fully authenticated technician session. Pruva reproduced it (reproduction REPRO-2026-00222).

02 · Severity & CVSS

CVE-2026-48558 Severity & CVSS Score

CVE-2026-48558 is rated critical severity, with a CVSS base score of 9.5 out of 10.

CRITICAL threat level
9.5 / 10 CVSS base
Weakness CWE-347 (Improper Verification of Cryptographic Signature)

Critical — the most severe class — typically remotely exploitable with severe impact. Treat as an emergency.

03 · Affected Versions

Affected SimpleHelp Versions

SimpleHelp · other (commercial, Java-based server application) versions SimpleHelp 5.5.15 and earlier; 6.0 prerelease versions before 6.0 RC2 are affected.

How to Reproduce CVE-2026-48558

$ pruva-verify REPRO-2026-00222
or curl -O https://www.pruva.dev/api/v1/reproductions/REPRO-2026-00222/artifacts/bundle/repro/reproduction_steps.sh && chmod +x reproduction_steps.sh && ./reproduction_steps.sh
Run in a VM or disposable container. This exploits a real vulnerability.
06 · Proof of Reproduction

Proof of Reproduction for CVE-2026-48558

Authorization bypass — reproduced
  • reached the target end-to-end
  • full exploit chain demonstrated
  • on the real production code path
  • high confidence
  • the upstream fix blocks the same trigger
Trigger

forged OIDC ID token with alg:none, bogus signature, and attacker technician claims

Attack chain
  1. HTTPS /auth/v1/account/oidc_get to real /oidc callback with server-issued state
Runnable proof: reproduction_steps.sh
Captured evidence: fixed idp
How the agent worked 1,351 events · 550 tool calls · 1h 34m
1h 34mDuration
550Tool calls
349Reasoning steps
1,351Events
11Dead-ends
Agent activity over 1h 34m
Support
12
Hypothesis
2
Repro
907
Judge
65
Variant
112
Coding
247
0:0094:25

Root Cause and Exploit Chain for CVE-2026-48558

Versions: SimpleHelp 5.5.15 and earlier, and 6.0 prerelease builds before the fixed release.
  • Affected versions: SimpleHelp 5.5.15 and earlier, and 6.0 prerelease builds before the fixed release.
  • Patched versions tested: SimpleHelp 5.5.16 (SimpleHelp-linux-amd64.tar.gz, SHA256 9360af980277e1ef4330eb1ed08d981c9dfdcc4e25d87ed0552a47f5ebd5161a).
  • Risk level and consequences: Critical. A remote unauthenticated attacker can authenticate as a group-authenticated technician using forged identity claims. A technician account can access the SimpleHelp technician console and, depending on group permissions and deployment, remote support / remote access capabilities.

Impact Parity

  • Disclosed/claimed maximum impact: Remote authentication/authorization bypass via forged OIDC token, yielding an authenticated technician session and potential MFA bypass.
  • Reproduced impact from this run: Full remote API/OIDC authentication bypass on the real SimpleHelp 5.5.15 server. The script obtains a legitimate pending OIDC state from the product API, submits a forged ID token through the genuine /oidc callback, and observes FULLY_AUTHENTICATED status for the attacker-controlled technician identity.
  • Parity: full
  • Not demonstrated: Post-auth remote-control actions against managed endpoints were not performed; the reproduced impact stops at a concrete authenticated technician session and technician-console page access.

Root Cause

The vulnerable SimpleHelp OIDC implementation parses JWT claims from the ID token but does not cryptographically verify the token signature before using those claims for technician authentication. Runtime/class evidence shows that SimpleHelp 5.5.15 includes utils/oauth/oidc/IDToken.class and OIDC callback classes, but no IDTokenVerifier class. The patched 5.5.16 build adds utils/oauth/oidc/IDTokenVerifier.class and related JWKS caching classes, and its callback rejects the same forged token.

The key behavioral difference is:

  • 5.5.15 vulnerable: The forged token reaches OIDCAuthenticator, is parsed into an IDToken, passes group-authentication logic, registers a new anonymous/group-authenticated technician, and registers a session token.
  • 5.5.16 patched: The same forged token causes the callback to fail closed; the status endpoint remains UNAUTHENTICATED.

No public fix commit hash was provided in the ticket because SimpleHelp is a commercial binary distribution; the script anchors the negative control to the vendor fixed 5.5.16 release identified in the advisory.

Reproduction Steps

  1. Run bundle/repro/reproduction_steps.sh.
  2. The script:
    • Verifies/downloads the official SimpleHelp 5.5.15 and 5.5.16 Linux server tarballs.
    • Extracts clean vulnerable and patched server instances.
    • Initializes each real SimpleHelp server through the first-launch path.
    • Configures a real OIDC authentication provider and a non-admin Technicians technician group that allows group-authenticated/OIDC-created logins.
    • Starts a local fake OIDC IdP that returns a JWT with alg: none and a bogus signature segment.
    • Requests a real OIDC authorization URL from https://127.0.0.1/auth/v1/account/oidc_get, preserving the server-issued state.
    • Delivers the forged token through the genuine https://127.0.0.1/oidc?code=...&state=... callback.
    • Checks https://127.0.0.1/auth/v1/account/status as the post-login authorization proof.
    • Repeats the same flow against patched 5.5.16 as the negative control.
  3. Expected evidence:
    • Vulnerable flow: status_after_body contains "state":"FULLY_AUTHENTICATED" and the forged identity (Forged Attacker, attacker, attacker@example.com).
    • Patched flow: callback contains Login Failed and status remains "state":"UNAUTHENTICATED".

Evidence

Primary evidence files:

  • bundle/logs/reproduction_steps.log — full script stdout/stderr for the successful run.
  • bundle/logs/vuln_flow.json — vulnerable HTTP/API/OIDC flow result.
  • bundle/logs/patched_flow.json — patched negative-control flow result.
  • bundle/logs/vuln_idp.log — fake IdP requests and the forged ID token returned to the product.
  • bundle/logs/patched_idp.log — same forged-token IdP interaction for patched version.
  • bundle/logs/vuln_runtime_tail.log — vulnerable server runtime log excerpts.
  • bundle/logs/patched_runtime_tail.log — patched server runtime log excerpts.
  • bundle/logs/class_comparison.log — class-level fix comparison showing IDTokenVerifier absent in 5.5.15 and present in 5.5.16.
  • bundle/repro/runtime_manifest.json — runtime evidence manifest written by the reproduction script.

Key excerpts from the successful run:

// bundle/logs/vuln_flow.json
"status_after_body": "{\"state\":\"FULLY_AUTHENTICATED\",\"user\":{\"uniqueID\":480346,\"displayName\":\"Forged Attacker\",\"username\":\"attacker\",\"emailAddress\":\"attacker@example.com\",\"isOnline\":true},\"code\":1}"
// bundle/logs/patched_flow.json
"callback_contains_login_failed": true,
"status_after_body": "{\"state\":\"UNAUTHENTICATED\",\"code\":0}"
// bundle/logs/vuln_runtime_tail.log
[OIDCAuthenticator] Received OIDC response (...)
[ProxyServerAuthentication] Group authenticated technician via group 'Technicians'
[ServerConfig] Registering technician login for attacker / (Technicians)
[Server Config] Configuration save requested (Forged Attacker - attacker [(Technicians)] [New Anon])
[ProxyServerAuthentication] Registering session token for Forged Attacker - attacker [(Technicians)] (...)
// bundle/logs/class_comparison.log
[*] Vulnerable OIDC classes
     7852 ... utils/oauth/oidc/IDToken.class
     6340 ... com/aem/shelp/proxy/wds/OIDCCallbackManager.class
[*] Patched OIDC classes
     8796 ... utils/oauth/oidc/IDToken.class
      252 ... utils/oauth/oidc/IDTokenVerifier$1.class
     1660 ... utils/oauth/oidc/IDTokenVerifier$CachedJwks.class
    17996 ... utils/oauth/oidc/IDTokenVerifier.class

Environment details captured in logs include SimpleHelp server version/build (5.5.15 build 20260326-092709, patched 5.5.16 build 20260526-203544), bundled JRE versions, HTTPS listener startup, and the exact API/callback URLs exercised.

Recommendations / Next Steps

  • Upgrade SimpleHelp servers to 5.5.16 or later, or to the fixed 6.0 release/RC identified by the vendor.
  • Ensure OIDC ID tokens are validated using issuer metadata/JWKS before any claims are trusted:
    • Verify the JWT signature.
    • Reject alg: none or unsupported algorithms.
    • Validate iss, aud, exp, iat, and nonce/state binding.
  • Add regression tests that submit unsigned and incorrectly signed ID tokens through the real /oidc callback and assert rejection.
  • Audit existing SimpleHelp deployments for unexpected group-authenticated/anonymous technician accounts, especially identities created via OIDC.

Additional Notes

  • The script was run successfully twice consecutively after the escaping/configuration fix.
  • The reproduction uses the real SimpleHelp server binaries and real HTTPS API/callback paths; the only test double is the OIDC identity provider, which is attacker-controlled by design for this class of vulnerability.
  • The script rewrites the IdP redirect host to 127.0.0.1 after preserving the SimpleHelp-issued callback path, code, and state, because the product derives a public hostname from its local environment. This keeps the callback on the genuine SimpleHelp /oidc endpoint while avoiding external DNS/network dependence.

CVE-2026-48558 Reproduction Transcript

The agent's step-by-step process — every tool call, every handoff, the moment the exploit fired.

Full session Replay every step — scrub the timeline or play it back.

Event 1/40
0:001:01
0:00
session startedaccounts/fireworks/routers/glm-5p2-fast · CVE-2026-48558 · REPRO-20
0:02
0:04
0:05
web search
0:07
0:08
0:17
0:17
extract_facts
no facts extracted
0:18
0:18
supportrepro
0:30
0:32
0:32
0:32
0:33
0:33
0:33
0:33
0:35
0:35
0:35
0:36
0:36
0:41
0:43
web search
0:44
web search
0:51
0:51
1:01
08 · How to Fix

How to Fix CVE-2026-48558

Upgrade SimpleHelp · other (commercial, Java-based server application) to 5.5.16; 6.0 RC2 / 6.0 prerelease (20260327-150806) or later.

Coming soon

Step-by-step mitigation and hardening guidance for CVE-2026-48558 — configuration checks, workarounds where no patch exists, and how to verify you're protected — is on the way.

10 · FAQ

FAQ: CVE-2026-48558

How does the CVE-2026-48558 OIDC bypass attack work?

The vulnerable server accepts the forged alg: none JWT at the /oidc callback and creates a fully authenticated technician session for whatever identity the attacker put in the token claims — demonstrated in the reproduction with a forged identity of "attacker" / "Forged Attacker" — without ever validating the token's signature.

Which SimpleHelp versions are affected by CVE-2026-48558, and where is it fixed?

SimpleHelp 5.5.15 and earlier, and 6.0 prerelease builds before 6.0 RC2, are affected; it is fixed in 5.5.16 and 6.0 RC2 (6.0 prerelease build 20260327-150806).

How severe is CVE-2026-48558?

It is rated critical, CVSS 9.5: a remote unauthenticated attacker can obtain an authenticated technician session — and, depending on configuration, this can also bypass multi-factor authentication — granting access to the SimpleHelp technician console and its remote support/access capabilities.

How can I reproduce CVE-2026-48558?

Download the verified script from this page and run it in an isolated environment against SimpleHelp 5.5.15 configured for OIDC login. It requests the OIDC login URL, completes the /oidc callback with a forged alg:none JWT, and shows the server issuing an authenticated technician session for the forged identity, then confirms 5.5.16 rejects the same token.
11 · References

References for CVE-2026-48558

Authoritative sources for CVE-2026-48558 — official vulnerability databases and the upstream advisory. Pruva's reproduction verifies the issue firsthand; these are the primary records to corroborate it.