Back to Intelligence

CVE-2026-35273: ShinyHunters Bypass WAFs to Exploit Oracle PeopleSoft — Detection and Remediation Guide

SA
Security Arsenal Team
September 26, 2026
10 min read

Google's threat intelligence teams are warning of a renewed, mass-exploitation campaign against a critical vulnerability in Oracle PeopleSoft, tracked as CVE-2026-35273 (CVSS 9.8). The activity — linked to the ShinyHunters ecosystem — is hitting organizations across multiple sectors globally, and the tradecraft matters: attackers are bypassing web application firewalls to reach the vulnerable component and deploying web shells for persistent access.

This is not a patch-and-forget situation. The campaign demonstrates three things every defender should internalize immediately:

  1. Your WAF is not a compensating control here. The operators have developed request-crafting techniques that slip past common WAF rule sets. If your mitigation strategy was "WAF virtual patching until the next maintenance window," that window is closed.
  2. The bug was exploited as a zero-day before patches were broadly available. Any PeopleSoft instance that was internet-reachable prior to patching must be treated as potentially compromised, not merely vulnerable.
  3. Post-exploitation is already mapped out. Web shell deployment means the difference between "we patched in time" and "we patched an already-owned server" is a retroactive hunt, not a dashboard metric.

If you operate PeopleSoft — HR, finance, student information, or campus solutions — read this as an incident-response task wrapped in a patch cycle.

Technical Analysis

Affected Product and Severity

AttributeDetail
CVECVE-2026-35273
CVSS9.8 (Critical)
Vendor / ProductOracle PeopleSoft (PeopleTools-based web tier)
ImpactUnauthenticated remote code execution
ExploitationConfirmed in-the-wild, mass exploitation, zero-day origin
Threat actorShinyHunters-linked activity
DeliveryWAF-evading HTTP requests → web shell deployment

A CVSS 9.8 unauthenticated RCE in an enterprise ERP portal is the worst-case category: no credentials required, network-reachable, full code execution on the host running the PeopleSoft web logic. PeopleSoft environments sit at the intersection of HR data (PII, payroll), financial data, and — in higher education — student records. That makes them attractive both for extortion-driven groups like ShinyHunters (data theft plus leak pressure) and for operators wanting a foothold deep inside flat internal networks.

Attack Chain (Defender's View)

Based on the campaign reporting, the intrusion flow is:

  1. Reconnaissance: Internet-wide scanning identifies PeopleSoft instances, typically by fingerprinting the PIA (PeopleSoft Internet Architecture) web tier — recognizable URL structures (/psc/, /psp/ portal paths) and response headers from the underlying WebLogic/web server stack.
  2. WAF bypass: Exploit requests are crafted to evade signature- and normalization-based WAF inspection — techniques in this class typically include HTTP parameter pollution, encoding tricks (double URL-encoding, Unicode/UTF overlong encodings), path normalization abuse, and splitting malicious payloads across parameters. The practical lesson: rules that block the "canonical" exploit string do not block the campaign.
  3. Exploitation: The crafted request reaches the vulnerable PeopleSoft component and triggers unauthenticated code execution in the context of the web application service account.
  4. Web shell deployment: The attacker writes a web shell (commonly JSP on PeopleSoft's Java stack) into a web-accessible directory, giving durable, HTTP-accessible command execution that survives until the file is found and removed — patching alone does not remove an existing shell.
  5. Post-exploitation: From the shell: credential harvesting from config files and memory, internal recon, data staging from backend databases, and lateral movement.

Exploitation Status

  • Confirmed active exploitation in the wild, at scale, across multiple sectors and geographies.
  • Exploited as a zero-day before Oracle's fix was available — exposure predates any patch you may have applied.
  • Defenders should treat internet-exposed PeopleSoft instances as presumptively compromised until proven otherwise via retrospective hunting.

Detection & Response

The detections below focus on the two highest-fidelity, lowest-noise behaviors in this campaign: (1) the web/application server process spawning shells or script interpreters, and (2) web shell files appearing in PeopleSoft web-accessible directories. Exploit-request signatures are deliberately de-emphasized — the entire point of this campaign is that those signatures are being evaded at the WAF layer.

YAML
---
title: PeopleSoft Web Server Process Spawning Shell or Script Interpreter
id: 3f8a2b71-9c4d-4e5f-a1b2-7c6d5e4f3a2b
status: experimental
description: Detects cmd.exe, PowerShell, or script interpreters spawned by Java or web server processes associated with the PeopleSoft PIA web tier, consistent with web shell execution following CVE-2026-35273 exploitation.
references:
  - https://thehackernews.com/2026/09/attackers-bypass-wafs-to-exploit-oracle.html
  - https://attack.mitre.org/techniques/T1505/003/
author: Security Arsenal
date: 2026/09/24
tags:
  - attack.persistence
  - attack.t1505.003
  - attack.execution
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith:
      - '\java.exe'
      - '\javaw.exe'
      - '\wls.exe'
      - '\httpd.exe'
      - '\w3wp.exe'
  selection_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\wscript.exe'
      - '\cscript.exe'
      - '\rundll32.exe'
      - '\certutil.exe'
      - '\bitsadmin.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Rare administrative scripts invoked from application management consoles; validate against change records
level: high
---
title: Web Server Process Spawning Shell on Linux PeopleSoft Tier
id: 8c1d4e52-6a7b-4f38-9d01-2e3f4a5b6c7d
status: experimental
description: Detects shell or interpreter execution parented by Java/WebLogic or web server processes on Linux PeopleSoft web tiers, indicative of web shell activity post-exploitation of CVE-2026-35273.
references:
  - https://thehackernews.com/2026/09/attackers-bypass-wafs-to-exploit-oracle.html
  - https://attack.mitre.org/techniques/T1505/003/
author: Security Arsenal
date: 2026/09/24
tags:
  - attack.persistence
  - attack.t1505.003
logsource:
  category: process_creation
  product: linux
detection:
  selection_parent:
    ParentImage|endswith:
      - '/java'
      - '/httpd'
      - '/nginx'
  selection_child:
    Image|endswith:
      - '/sh'
      - '/bash'
      - '/dash'
      - '/python'
      - '/python3'
      - '/perl'
      - '/curl'
      - '/wget'
      - '/nc'
      - '/ncat'
  condition: selection_parent and selection_child
falsepositives:
  - Health-check or startup scripts legitimately invoked by the application stack; baseline and exclude known paths
level: high
KQL — Microsoft Sentinel / Defender
// Hunt: shell/interpreter child processes of PeopleSoft web tier (Java/WebLogic)
// across Windows and Linux endpoints in Defender / Sentinel
let WebParents = dynamic(["java.exe", "javaw.exe", "wls.exe", "httpd.exe", "w3wp.exe", "java", "httpd", "nginx"]);
let ShellChildren = dynamic(["cmd.exe", "powershell.exe", "pwsh.exe", "wscript.exe", "cscript.exe", "rundll32.exe", "certutil.exe", "sh", "bash", "dash", "python", "python3", "perl", "curl", "wget", "nc", "ncat"]);
DeviceProcessEvents
| where TimeGenerated > ago(30d)
| extend ParentName = tolower(split(InitiatingProcessFileName, "")[0]),
         ChildName = tolower(FileName)
| where ParentName in~ (WebParents)
| where ChildName in~ (ShellChildren)
| project TimeGenerated, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine,
          FileName, ProcessCommandLine, AccountName, SHA256
| order by TimeGenerated desc;
KQL — Microsoft Sentinel / Defender
// Hunt: web access log indicators for PeopleSoft PIA probing and anomalous encoded requests
// Requires web proxy/WAF/IIS logs ingested into CommonSecurityLog or a custom table
CommonSecurityLog
| where TimeGenerated > ago(30d)
| where RequestURL has_any ("/psc/", "/psp/")
| extend Encoded = iff(RequestURL matches regex @"(%25|%u[0-9a-fA-F]{4}|%c0|%e0)", 1, 0)
| summarize Requests = count(), EncodedRequests = sum(Encoded),
            DistinctSources = dcount(SourceIP),
            Sources = make_set(SourceIP, 10)
  by RequestURL, DeviceAction
| where EncodedRequests > 0 or DistinctSources > 50
| order by EncodedRequests desc;
VQL — Velociraptor
-- Hunt for web shells dropped into PeopleSoft PIA web-accessible directories
-- Adjust glob roots to your actual PeopleSoft PIA deployment paths (Windows and Linux)
LET shell_paths = SELECT FullPath, Size, Mtime, Ctime
FROM glob(globs=[
  'C:/psoft/*/webserv/*/applications/peoplesoft/PORTAL.war/**/*.jsp',
  'C:/psoft/*/webserv/*/applications/**/*.jspx',
  '/home/psoft/*/webserv/*/applications/peoplesoft/PORTAL.war/**/*.jsp',
  '/opt/psoft/*/webserv/*/applications/**/*.jsp'
])
WHERE NOT IsDir

SELECT FullPath, Size, Mtime, Ctime
FROM shell_paths
-- Web shells are typically very recent, very small, or both --
WHERE Mtime > Now() - 60 * 24 * 3600
   OR Size < 5000
ORDER BY Mtime DESC
VQL — Velociraptor
-- Hunt for web-tier processes with unexpected child shells or outbound connections
SELECT Pid, Ppid, Name, CommandLine, Username, CreateTime
FROM pslist()
WHERE Name =~ '(?i)java|httpd|w3wp'
   OR (CommandLine =~ '(?i)cmd\.exe|powershell|/bin/(ba)?sh' 
       AND Ppid != 0)
PowerShell
# PeopleSoft CVE-2026-35273 verification and triage script (Windows web tier)
# Run elevated on each PeopleSoft PIA web server.

$ErrorActionPreference = 'SilentlyContinue'
$report = @()

# 1) Inventory PeopleSoft PIA web content directories for recent or small JSP files
$piaRoots = @('C:\psoft','D:\psoft','C:\oracle','D:\oracle')
foreach ($root in $piaRoots) {
    if (Test-Path $root) {
        Get-ChildItem -Path $root -Recurse -Include *.jsp,*.jspx -File |
            Where-Object { $_.FullName -match 'PORTAL\.war|applications' } |
            Where-Object { $_.LastWriteTime -gt (Get-Date).AddDays(-60) -or $_.Length -lt 5000 } |
            ForEach-Object {
                $hash = (Get-FileHash $_.FullName -Algorithm SHA256).Hash
                $report += [pscustomobject]@{
                    Type='SuspiciousWebFile'; Path=$_.FullName; Size=$_.Length
                    Modified=$_.LastWriteTime; SHA256=$hash
                }
            }
    }
}

# 2) Check for shell-spawning children of Java/web processes (live state)
Get-CimInstance Win32_Process |
    Where-Object { $_.Name -match 'cmd\.exe|powershell\.exe|wscript\.exe|cscript\.exe|rundll32\.exe' } |
    ForEach-Object {
        $parent = Get-CimInstance Win32_Process -Filter "ProcessId=$($_.ParentProcessId)"
        if ($parent -and $parent.Name -match 'java|w3wp|httpd') {
            $report += [pscustomobject]@{
                Type='WebProcessShellSpawn'; Path=$parent.Name
                Size=$null; Modified=$_.CreationDate
                SHA256="Child: $($_.Name) :: $($_.CommandLine)"
            }
        }
    }

# 3) Confirm installed Oracle CPU / PeopleTools patch level for verification against the advisory
$report += Get-ItemProperty 'HKLM:\SOFTWARE\Oracle\*' |
    Select-Object @{n='Type';e={'OracleRegistryKey'}},
                  @{n='Path';e={$_.PSChildName}},
                  @{n='Size';e={$null}},
                  @{n='Modified';e={$null}},
                  @{n='SHA256';e={($_.PSObject.Properties | Out-String).Trim()}}

$report | Format-List
$report | Export-Csv -Path ".\peoplesoft_cve-2026-35273_triage_$(Get-Date -Format yyyyMMdd_HHmm).csv" -NoTypeInformation
Write-Host "Triage complete. Review the CSV for unexpected JSPs or web-process shell spawns, then compare patch state against the Oracle Critical Patch Update advisory for CVE-2026-35273."
Bash / Shell
# PeopleSoft CVE-2026-35273 triage for Linux PIA web tiers
# 1) Find recent or unusually small JSPs in web-accessible deployment dirs
find /home/psoft /opt/psoft -type d \( -name "PORTAL.war" -o -name "applications" \) 2>/dev/null | while read -r d; do
  find "$d" -type f \( -name "*.jsp" -o -name "*.jspx" \) \( -mtime -60 -o -size -5k \) -printf "%T@ %s %p\n" 2>/dev/null
done | sort -rn | head -100

# 2) Hash any candidates for VT/EDR lookups
find /home/psoft /opt/psoft -type f \( -name "*.jsp" -o -name "*.jspx" \) -mtime -60 -exec sha256sum {} \; 2>/dev/null

# 3) Check for web-tier processes with shell children
for pid in $(pgrep -f 'java|httpd'); do
  ps --ppid "$pid" -o pid,ppid,comm,args 2>/dev/null | grep -E 'sh|bash|python|perl|curl|wget' && echo "-- parent: $pid"
done

# 4) Review access logs for encoded/probing requests against PIA paths
grep -Eh '%25|%u[0-9a-fA-F]{4}|%c0|%e0' /path/to/access_log* 2>/dev/null | grep -E '/psc/|/psp/' | awk '{print $1}' | sort | uniq -c | sort -rn | head -25

Remediation

1. Patch now — then verify. Apply the Oracle Critical Patch Update (CPU) that addresses CVE-2026-35273 per Oracle's advisory for PeopleSoft/PeopleTools: https://www.oracle.com/security-alerts/. Given confirmed mass exploitation and zero-day history, this should be treated as an emergency change, not a scheduled maintenance item. Track any CISA KEV listing and its mandated remediation deadline — if your PeopleSoft instance is internet-facing and this lands in KEV, federal timelines become your effective timelines.

2. Take internet-facing PeopleSoft off the public path if you can. The durable fix for this class of ERP portal risk is architectural: put PIA behind VPN, ZTNA, or authenticated reverse proxy with client identity. An unauthenticated RCE requires unauthenticated reachability — remove the reachability and you remove the attack surface, not just the bug.

3. Do not trust your WAF as the control of record. The defining feature of this campaign is WAF evasion. If patching is delayed, WAF rules are a speed bump, not a fix. At minimum: enable strict request normalization, block double-encoded payloads, and alert (don't just block) on anomalous requests to /psc/ and /psp/ paths — evasion attempts themselves are a detection signal.

4. Hunt retroactively — patching does not evict. For every instance that was internet-reachable before the patch: sweep web-accessible directories for web shells (scripts above), review process lineage for web-tier-spawned shells, and pull authentication and database access logs for the exposure window. Any shell found converts this from a vulnerability ticket into a formal IR engagement with scoping, credential resets, and data-access review.

5. Rotate credentials on any suspect host. PeopleSoft web tiers hold database connection credentials, integration user passwords, and often domain service accounts. If a web shell was present for any duration, rotate the application service account, database credentials in config files, and any cached credentials reachable from the host.

6. Watch for the ShinyHunters endgame. This actor ecosystem monetizes through data theft and extortion. If compromise is confirmed, assume database access occurred: audit query logs against HR/payroll/student tables, monitor egress for staging archives, and prepare your legal/comms posture before a leak-site post forces the timeline.

Related Resources

Security Arsenal Managed SOC Services AlertMonitor Platform Book a SOC Assessment soc-mdr Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.