← Back to Feed CACHED · 2026-06-17 12:50:46 · CACHE_KEY CVE-2026-36537
CVE-2026-36537 · CWE-290 · Disclosed 2026-06-15

ThingsBoard v4.3.0.1 is vulnerable to an authentication bypass during the OAuth authorization code exchange.

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

This is a master-key defect on a side door, not a bulldozer through the front wall

CVE-2026-36537 is an authentication bypass in the ThingsBoard OAuth authorization-code exchange path. On a vulnerable ThingsBoard instance running v4.3.0.1, an unauthenticated attacker can target the login flow used for external identity providers and end up with a valid ThingsBoard session without possessing a legitimate user password. The vulnerable surface only exists where the web UI is reachable and OAuth 2.0 / SSO is actually configured for the tenant or deployment.

The vendor's 9.8 CRITICAL score overstates the fleet-wide reality. Yes, this is remote and pre-auth on the app layer, but the real population is much smaller than 'all ThingsBoard installs': the attacker needs an OAuth-enabled deployment, has to interact with a specific auth flow, and the resulting blast radius is bounded by the mapped ThingsBoard role unless the platform sits in a high-value IoT/SCADA role. That still leaves this as HIGH, not a casual downgrade, because successful compromise can hand an attacker operational control of devices, telemetry, and tenant administration.

"Pre-auth auth bypass is serious, but OAuth-enabled exposure and role mapping narrow it below a blanket 9.8."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Find a reachable OAuth-enabled ThingsBoard login

The attacker identifies an internet-reachable ThingsBoard instance and confirms that OAuth/SSO is enabled rather than plain local login only. Typical tooling is Shodan/Censys for discovery and curl or Burp Suite to inspect login flow endpoints, redirects, and callback behavior.
Conditions required:
  • ThingsBoard web UI is reachable from the attacker position
  • The target is running vulnerable v4.3.0.1
  • OAuth 2.0 is enabled for at least one login path
Where this breaks in practice:
  • A lot of ThingsBoard deployments are internal, VPN-gated, or reverse-proxied behind enterprise access controls
  • If OAuth is disabled, this chain dies immediately
  • Public search engines do not cleanly fingerprint every ThingsBoard instance
Detection/coverage: External scanners can find the product, but few will prove this CVE without flow-aware testing. Web logs and reverse-proxy logs should show probes against OAuth login, callback, and token-exchange routes.
STEP 02

Tamper with the authorization-code exchange

Using Burp Suite, custom HTTP scripts, or a purpose-built PoC, the attacker manipulates the OAuth authorization-code exchange to exploit the trust failure in the callback/token handoff. In practical terms, this is an app-logic bug in how ThingsBoard accepts or validates identity during the code-for-token step.
Conditions required:
  • Attacker can reach the callback / auth exchange path
  • The target OAuth configuration follows the vulnerable path
  • The bug is reachable with the chosen identity provider configuration
Where this breaks in practice:
  • OAuth implementations vary by provider and mapper settings, so one exploit path may not fit every deployment
  • Reverse proxies, strict redirect URI handling, or provider-side PKCE/state checks may reduce reliability
  • The attacker needs protocol awareness, not just commodity spraying
Detection/coverage: Look for mismatched OAuth states, repeated failed callbacks, unusual token-exchange sequences, and login events lacking the normal user authentication trail.
STEP 03

Land a ThingsBoard session as the mapped victim

If the bypass succeeds, the attacker obtains a valid ThingsBoard application session or JWT without authenticating as that user at the IdP in the intended way. The weaponized result is account takeover inside ThingsBoard, not just a one-off bypass page hit.
Conditions required:
  • The vulnerable exchange returns an authenticated app session
  • A target user or role mapping exists in the tenant
Where this breaks in practice:
  • Impact depends heavily on the mapped ThingsBoard role
  • If the environment auto-provisions only low-privilege users, initial blast radius is smaller
  • Strong audit logging can expose the anomalous session creation quickly
Detection/coverage: Detection coverage is decent if you correlate IdP events with ThingsBoard session creation. A ThingsBoard login with no corresponding expected IdP authentication event is the tell.
STEP 04

Use platform access to pivot into operations

From the captured session, the attacker can use the ThingsBoard UI or REST API to read telemetry, alter dashboards, manage devices, rotate credentials, or issue RPC/device actions. Tooling here is simply the native ThingsBoard web console and REST API once authenticated.
Conditions required:
  • Compromised account has tenant-admin, customer-admin, or operational device privileges
  • Devices and integrations are managed through the compromised tenant
Where this breaks in practice:
  • Least-privilege tenant design limits what a single user can touch
  • Separated tenants prevent instant cross-tenant takeover
  • Downstream device actions may still require integration-specific trust
Detection/coverage: API monitoring, audit logs, sudden bulk device changes, dashboard edits, new API keys, or unusual RPC commands are all solid detection points.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo public evidence of active exploitation found in the sources reviewed; user-supplied intel also says not actively exploited / not KEV-listed.
Proof-of-concept availabilityNo public PoC repository or vendor-authored reproducer was found in the sources reviewed. Treat exploit maturity as unknown, not assumed.
EPSS0.0023 from the user-supplied intel block — very low expected near-term exploitation probability.
KEV statusNot listed in CISA KEV per the user-supplied intel; CISA's KEV catalog is still worth checking during triage because status can change after disclosure.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H scores this as remote, unauthenticated, and no-user-click. That is mechanically fair for the code path, but it ignores the deployment filter that OAuth must be enabled and reachable.
Affected versionsConfirmed affected by prompt: ThingsBoard v4.3.0.1. The public release notes reviewed do not clearly enumerate a broader affected range.
Fixed versionsThe exact first fixed build for CVE-2026-36537 was not explicitly named in the sources reviewed. Vendor docs show the current supported 4.3.x patch train at v4.3.1.2 as of 2026-05-28.
Exposure populationNo trustworthy Shodan/Censys/FOFA count for vulnerable OAuth-enabled ThingsBoard instances was found in the sources reviewed. Real exposure is materially smaller than installed base because the bug only matters where the web UI is reachable and OAuth is configured.
Disclosure date2026-06-15 from the user-supplied intel block.
Researcher / reporting orgNo public researcher attribution was located in the sources reviewed.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to HIGH (8.4/10)

This lands in HIGH because it is still a remote, pre-authentication account-compromise bug on a platform that can directly manage IoT and operational workflows. The single most decisive factor is deployment-role blast radius: when ThingsBoard is used as an operations plane for devices or SCADA-style workflows, a successful bypass can turn into tenant-wide or operational compromise even though the exposed population is narrower than the vendor CVSS assumes.

MEDIUM Severity reassessment versus vendor CVSS
LOW Exact first patched version for this specific CVE

Why this verdict

  • Friction adjustment: the chain starts as unauthenticated remote, but it only exists on deployments where the ThingsBoard web UI is reachable and OAuth is enabled. That meaningfully trims the reachable population versus a blanket network-service bug.
  • Friction adjustment: exploiting an OAuth authorization-code exchange flaw implies protocol-aware abuse of a specific login path, not commodity internet spraying against every exposed endpoint. Modern reverse proxies, provider-side redirect checks, and sane OAuth settings add real breakage in the field.
  • Friction adjustment: if the target is only internally reachable, the prerequisite shifts from *unauthenticated remote internet* to *internal network / post-initial-access*, which is compounding downward pressure on severity for many enterprise deployments.
  • Role multiplier: on a low-value role like a dev sandbox or lab dashboard, the documented chain still succeeds, but the blast radius is usually host or single tenant. That is not where the score should live.
  • Role multiplier: on a typical role like a line-of-business IoT app tier, the chain can succeed and the blast radius becomes tenant-wide control of devices, dashboards, API keys, and telemetry.
  • Role multiplier: on a high-value operational role where ThingsBoard is the control plane for production devices or SCADA-like workflows, the chain can succeed and the blast radius becomes fleet-scale operational manipulation or safety-impacting misuse. That worst plausible role keeps the verdict floored at HIGH even after friction is applied.
  • Threat-signal adjustment: no KEV listing, no public exploitation evidence, and a very low EPSS 0.0023 argue against calling this CRITICAL today.

Why not higher?

I am not taking this to CRITICAL because the real attack surface is narrower than the vendor's CVSS assumes: the target must expose the web app and actually use the vulnerable OAuth flow. I also found no public exploitation, no KEV listing, and no public PoC that would justify an 'assume weaponized everywhere' stance.

Why not lower?

I am not dropping this to MEDIUM because the exploit path is still remote and pre-auth at the application layer. On operational ThingsBoard deployments, a successful bypass is not a nuisance login bug; it can become tenant takeover with direct impact on managed devices and workflows.

05 · Compensating Control

What to do — in priority order.

  1. Disable unused OAuth providers — If a tenant or environment does not actively need external SSO, turn off OAuth login there and remove dormant provider configs. This directly removes the vulnerable path and should be done within 30 days for a HIGH verdict.
  2. Restrict web access — Put ThingsBoard behind VPN, private access proxy, or IP allowlisting where business reality permits. This converts an unauthenticated internet bug into an internal-only problem and should be enforced within 30 days.
  3. Harden reverse-proxy auth paths — Apply tight allowlists and logging around OAuth callback, login, and token-exchange routes at NGINX/Apache/API-gateway layers. This will not fix the bug, but it cuts exposure and improves detection within 30 days.
  4. Correlate IdP and ThingsBoard logins — Alert on ThingsBoard session creation that lacks the expected matching IdP authentication event, especially for admin roles. This is the best detective control when you cannot patch immediately, and it should be in place within 30 days.
  5. Enforce least privilege in ThingsBoard roles — Review tenant-admin, customer-admin, API key issuance, and device-management permissions so a single bypassed session cannot immediately administer every device. This limits blast radius and should be completed within 30 days.
What doesn't work
  • MFA at the external IdP does not reliably save you if the bypass lands after or around the OAuth code exchange inside the application trust logic.
  • EDR on the ThingsBoard host does not stop the initial auth bypass because this is an application-session abuse problem, not malware execution.
  • Credential rotation alone does not remediate the flaw because the attacker is bypassing normal credential validation rather than stealing a password first.
06 · Verification

Crowdsourced verification payload.

Run this on the ThingsBoard host or container shell with read access to the install directory and config files; root is helpful but not always required. Invoke it as bash tb-cve-2026-36537-check.sh /usr/share/thingsboard /etc/thingsboard/conf or just bash tb-cve-2026-36537-check.sh to use defaults. It checks for version 4.3.0.1 and simple signs that OAuth is configured; because the exact fixed build is not clearly published in the sources reviewed, non-4.3.0.1 versions are treated as PATCHED only for the specific version named in the advisory prompt.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# tb-cve-2026-36537-check.sh
# Exit codes:
#   0 = PATCHED
#   1 = VULNERABLE
#   2 = UNKNOWN

set -u

TB_HOME="${1:-/usr/share/thingsboard}"
CONF_DIR="${2:-/etc/thingsboard/conf}"
VERSION=""
OAUTH_HINTS=0

find_version() {
  # Debian/RPM package names
  if command -v dpkg-query >/dev/null 2>&1; then
    VERSION=$(dpkg-query -W -f='${Version}\n' thingsboard 2>/dev/null | head -n1 | sed 's/-.*//')
    [ -n "$VERSION" ] && return 0
  fi

  if command -v rpm >/dev/null 2>&1; then
    VERSION=$(rpm -q --qf '%{VERSION}\n' thingsboard 2>/dev/null | head -n1)
    [ -n "$VERSION" ] && return 0
  fi

  # Directory / jar name heuristics
  if [ -d "$TB_HOME" ]; then
    VERSION=$(find "$TB_HOME" -maxdepth 3 -type f \( -name 'thingsboard-*.jar' -o -name 'tb-web-ui-*.jar' \) 2>/dev/null \
      | sed -n 's/.*thingsboard-\([0-9][0-9.]*\)\.jar/\1/p' | head -n1)
    [ -n "$VERSION" ] && return 0
  fi

  # Docker image label / env heuristics
  VERSION=$(env | awk -F= '/^(TB_VERSION|THINGSBOARD_VERSION)=/{print $2; exit}')
  [ -n "$VERSION" ] && return 0

  return 1
}

check_oauth_hints() {
  # Config-file heuristics only; true enablement may be stored in DB/admin UI.
  if [ -d "$CONF_DIR" ]; then
    if grep -RqiE 'oauth2|spring\.security\.oauth2|authorization-uri|access-token-uri|client-id|client-secret' "$CONF_DIR" 2>/dev/null; then
      OAUTH_HINTS=1
      return 0
    fi
  fi

  if [ -d "$TB_HOME" ]; then
    if grep -RqiE 'oauth2|login/oauth2|authorization-uri|access-token-uri' "$TB_HOME" 2>/dev/null; then
      OAUTH_HINTS=1
      return 0
    fi
  fi

  return 1
}

find_version || {
  echo "UNKNOWN - could not determine ThingsBoard version"
  exit 2
}

check_oauth_hints || true

case "$VERSION" in
  4.3.0.1)
    if [ "$OAUTH_HINTS" -eq 1 ]; then
      echo "VULNERABLE - ThingsBoard version $VERSION with OAuth-related configuration/artifacts present"
      exit 1
    else
      echo "UNKNOWN - ThingsBoard version $VERSION found, but OAuth enablement could not be confirmed from local files"
      exit 2
    fi
    ;;
  *)
    echo "PATCHED - specific vulnerable version 4.3.0.1 not detected (found: $VERSION)"
    exit 0
    ;;
esac
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: pull an inventory of every ThingsBoard instance, then separate internet-reachable + OAuth-enabled systems from the rest and treat any deployment tied to production devices or SCADA-style workflows as top priority. For this HIGH verdict, the noisgate mitigation SLA is within 30 days: disable unused OAuth paths, restrict external access, and add log correlation for OAuth/session anomalies; the noisgate remediation SLA is within 180 days: move off vulnerable v4.3.0.1 to a supported patched ThingsBoard release, with externally reachable operational deployments first in line.

Sources

  1. ThingsBoard OAuth 2.0 support documentation
  2. ThingsBoard security overview
  3. ThingsBoard release table
  4. ThingsBoard v4.3.x release notes
  5. ThingsBoard upgrade instructions
  6. ThingsBoard GitHub releases
  7. ThingsBoard PR #15120 OAuth2 validation refactor
  8. CISA Known Exploited Vulnerabilities Catalog
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.