The customer-facing 'Thanks for taking the assessment' page turned out to be an unauthenticated JavaScript engine
CVE-2026-6875 is a sandbox escape in the ServiceNow AI Platform that lets an unauthenticated attacker hit /assessment_thanks.do, feed attacker-controlled input into the platform's Rhino-based scripting sandbox, and break out to full server-side code execution. Searchlight Cyber's writeup walks the primitive from sink to Rhino to reading arbitrary tables, minting admin users, and executing shell commands on any connected MID Server proxy. Affected: all ServiceNow AI Platform releases prior to the July 2026 hotfixes rolled into the Xanadu, Yokohama, and Zurich family patches distributed via KB3137947. Hosted (service-now.com) instances were auto-patched by ServiceNow in April 2026; self-hosted / partner / GovCommunityCloud deployments are the exposed population.
There is no NVD CVSS baseline yet, but the vendor's CVSS 4.0 vector scores this at 9.5. Reality matches: unauthenticated, network-reachable, pre-auth code execution on a system that holds ITSM tickets, CMDB, HR, GRC, IRM, and — via MID Server — a foothold into the internal network. This is a first-assessment CRITICAL by every meaningful metric.
5 steps from start to impact.
Locate an exposed ServiceNow instance
*.service-now.com and self-hosted ServiceNow portals via Shodan/Censys/FOFA fingerprints (favicon hash, x-is-logged-in header, /login.do). ServiceNow's install base is enormous — Fortune 500 penetration is above 80% — and instances are typically internet-exposed for employee, vendor, and customer portals.- Network reachability to the ServiceNow instance on 443
- Instance running an unpatched AI Platform release
- Hosted (
service-now.com) tenants were patched by ServiceNow itself in April 2026 — this friction is only real for self-hosted/partner deployments
Hit the pre-auth sink at /assessment_thanks.do
- HTTP POST/GET to
/assessment_thanks.dowith crafted parameters
- A WAF rule blocking Glide/Jelly expression syntax (
${...},<g:evaluate>) can dent the exploit but not the class
assessment_thanks.do from non-browser user agents or with expression-language payloads are a strong IOCEscape the Rhino sandbox
java.lang.Runtime or Glide's internal APIs. Weaponized as servicenow-assessment-rce.py by public researchers on GitHub within days of disclosure.- Vulnerable Rhino policy configuration (default on affected versions)
- None on default installs
sh, cmd, powershell, curlPivot to Glide data model + admin creation
GlideRecord gives read/write to every table — CMDB, sys_user, sys_user_role, sys_credentials. Attacker mints a sys_user with the admin role or exfiltrates stored credentials (SSH keys, API tokens, integration secrets).- Code execution inside the ServiceNow JVM
- Row-level ACLs do not apply — the attacker runs as the app itself
sys_user_role and sys_credentials should page immediatelyPivot into the internal network via MID Server
- A registered MID Server exists (nearly universal in enterprise deployments)
- MID Server runs as a service account — if it was scoped tightly (rare) impact is bounded
The supporting signals.
| In-the-wild exploitation | Confirmed — Defused reported live exploitation on 2026-07-19, six days after disclosure |
|---|---|
| Public PoC | Yes — Searchlight Cyber writeup + independent servicenow-assessment-rce PoC on GitHub; second gadget chain observed in the wild differs from the published one |
| EPSS | 0.00509 (~0.5%) — will spike; EPSS lags active-exploitation signals |
| KEV status | Not listed as of 2026-07-22 — expected to be added imminently given confirmed exploitation |
| CVSS | Vendor CVSS 4.0: 9.5 CRITICAL — vector CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H (no NVD 3.1 baseline yet) |
| Affected | ServiceNow AI Platform — Xanadu, Yokohama, and Zurich release families prior to July 2026 hotfixes |
| Fixed | Hotfixes rolled via KB3137947; hosted instances auto-patched April 2026, self-hosted patches available June 2026 |
| Exposure | Shodan/Censys show tens of thousands of service-now.com and self-hosted instances externally reachable — the vast majority of Fortune 500 run ServiceNow |
| Disclosed | 2026-07-13 by ServiceNow (KB3137947); reported by Adam Kues (Assetnote / Searchlight Cyber) on 2026-04-01 |
| CWE | CWE-94 — Improper Control of Generation of Code (sandbox escape → RCE) |
noisgate verdict.
This is unauthenticated, network-reachable, pre-auth remote code execution in a canonically high-value-role platform (ServiceNow holds CMDB, credentials, and MID Server pivot into the internal LAN), with confirmed in-the-wild exploitation less than a week after disclosure. The decisive factor is the combination of zero prerequisites + active exploitation + MID Server blast radius — this is the definition of a CRITICAL first assessment.
Why this verdict
- Zero preconditions: Pre-authentication, single HTTP request to
/assessment_thanks.do, no user interaction. Friction audit: unauthenticated remote → attacker population = the internet. - Active exploitation confirmed by Defused on 2026-07-19, with a gadget chain distinct from the public PoC — meaning multiple actors are working the class, not just replaying one script.
- Role multiplier: ServiceNow is by definition a high-value-role component — it is the enterprise system of record for ITSM, CMDB, HR, GRC, and stores integration credentials for AD, vCenter, cloud, and SCCM. The chain succeeds end-to-end: pre-auth → RCE → admin creation → credential exfil → MID Server pivot into the internal LAN. Blast radius = fleet compromise. Floor = CRITICAL.
- Installed base: ServiceNow is deployed in >80% of the Fortune 500; self-hosted and partner instances that missed the June rollout are the exposed population, but that population is measured in thousands of enterprises, not a rounding error.
- PoC quality: Public write-up + working exploit + a second in-the-wild variant means detection based on one signature will miss.
Why not higher?
CRITICAL / 9.6 is already at the top of the scale for this bug class. The residual 0.4 accounts for the fact that ServiceNow hosted the majority of tenants and patched them in April — the effective exposed population is self-hosted, partner, and GovCommunityCloud, which is smaller than the total ServiceNow install base.
Why not lower?
A HIGH rating would require meaningful friction — authentication, user interaction, or a narrow deployment role. None apply: it is pre-auth, single-shot, in a canonically high-value component, and being exploited today. Downgrading past the role floor is not defensible.
What to do — in priority order.
- Block
/assessment_thanks.doat the edge — Add a WAF/ingress rule dropping any request toassessment_thanks.dounless the source is a known-good corporate range. Deploy within 3 days per the noisgate mitigation SLA. This is a legacy assessment endpoint most tenants do not need externally. - Push the KB3137947 hotfix to every self-hosted / partner instance — Coordinate with ServiceNow customer support / your partner AM to confirm the exact hotfix build for your release family (Xanadu / Yokohama / Zurich) and roll it during the next change window inside the 3-day mitigation window.
- Rotate all secrets stored in
sys_credentials— Assume compromise on any unpatched instance with recent external exposure. Rotate AD service accounts, cloud API keys, SSH keys, and integration tokens the MID Server can reach. Do this in parallel with patching, not after. - Audit
sys_user_roleandsys_userfor new admin accounts — The confirmed post-exploit action is creating admins. Diff the admin list against a known-good snapshot from before 2026-07-13 and pull audit logs for the endpoint. - Constrain MID Server service accounts — The MID Server is the pivot into your LAN. Confirm it runs with least-privilege AD/domain rights and cannot reach Tier-0 assets — a policy fix that also blunts the next ServiceNow RCE.
- MFA on the ServiceNow UI — the sink is pre-authentication, MFA is never evaluated
- Application-layer ACLs (
sys_security_acl) — the exploit runs as the JVM itself, above the ACL layer - IP allowlisting the admin UI only — the vulnerable endpoint is a customer-facing form path, not
/admin - Rate limiting — exploitation is a single request, not a brute force
Crowdsourced verification payload.
Run this from an auditor workstation with network reachability to the target ServiceNow instance. Invoke as ./check-cve-2026-6875.sh https://your-instance.service-now.com. No privileges required — this is an unauthenticated probe against a public endpoint header/behavior, not the exploit itself.
#!/usr/bin/env bash
# noisgate check for CVE-2026-6875 (ServiceNow AI Platform sandbox escape RCE)
# SAFE: probes only, does NOT execute the sandbox escape.
set -u
if [ $# -ne 1 ]; then
echo "Usage: $0 https://<instance>.service-now.com" >&2
exit 2
fi
TARGET="${1%/}"
UA="noisgate-cve-2026-6875-check/1.0"
# 1. Confirm this is actually a ServiceNow instance
STATS=$(curl -sk -A "$UA" --max-time 10 "$TARGET/stats.do" || true)
if ! echo "$STATS" | grep -qi "ServiceNow"; then
echo "UNKNOWN: $TARGET did not respond as a ServiceNow instance"
exit 3
fi
# 2. Extract build tag / version banner
BUILD_TAG=$(echo "$STATS" | grep -Eio 'Build tag: [^<]+' | head -n1)
BUILD_DATE=$(echo "$STATS" | grep -Eio 'Build date: [^<]+' | head -n1)
echo "Instance: $TARGET"
echo "$BUILD_TAG"
echo "$BUILD_DATE"
# 3. Check reachability of the vulnerable pre-auth endpoint
CODE=$(curl -sk -o /dev/null -w "%{http_code}" -A "$UA" --max-time 10 \
"$TARGET/assessment_thanks.do")
echo "/assessment_thanks.do returned HTTP $CODE"
# 4. Decision
# The endpoint is expected to exist on affected AI Platform releases.
# Only KB3137947 hotfix builds dated 2026-06-01 or later are patched.
if echo "$BUILD_DATE" | grep -Eq '2026-0[6-9]|2026-1[0-2]|202[7-9]'; then
echo "PATCHED: build date is post-June-2026, KB3137947 hotfix expected present"
exit 0
fi
if [ "$CODE" = "200" ] || [ "$CODE" = "302" ]; then
echo "VULNERABLE: pre-auth endpoint reachable AND build predates KB3137947 hotfix"
echo "Action: apply KB3137947 hotfix immediately per noisgate CRITICAL SLA"
exit 1
fi
echo "UNKNOWN: could not confidently determine patch state — check KB3137947 manually"
exit 3
If you remember one thing.
/assessment_thanks.do for every self-hosted and partner ServiceNow instance, (2) a confirmed inventory of which of your instances are hosted (auto-patched by ServiceNow in April) vs self-hosted/partner (your problem), and (3) the KB3137947 hotfix scheduled for the next change window, not the next quarter. Per the noisgate remediation SLA the vendor hotfix must be fully deployed within 90 days, but with active exploitation you should be measuring this in days, not months. In parallel, rotate every credential stored in sys_credentials on any instance that was internet-reachable between 2026-07-13 and patch time, and diff sys_user_role for new admin accounts.Sources
- ServiceNow KB3137947 advisory
- SecurityWeek — Exploitation seen days after disclosure
- Help Net Security — Pre-auth RCE exploited in the wild
- BleepingComputer — Critical ServiceNow code execution flaw exploited
- SOCRadar analysis
- GBHackers — Unauthenticated RCE
- CyberSecurityNews — Public PoC released
- Rescana active exploitation alert
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.