Seguridad

CVE-2026-35273: ShinyHunters evade WAF y reabren la explotación de Oracle PeopleSoft

El grupo de extorsión atribuido a UNC6240 (ShinyHunters) ha vuelto a explotar CVE-2026-35273, una vulnerabilidad crítica en Oracle PeopleSoft PeopleTools que permite ejecución remota de código sin autenticación (CVSS 9.8). Lo nuevo de esta ola, que Mandiant y Google Threat Intelligence Group documentaron el 25 de septiembre de 2026, no es la vulnerabilidad en sí: es que el actor aprendió a esquivar reglas de WAF basadas en path-literal usando /%50SEMHUB/ en lugar de /PSEMHUB/, y está reventando instancias que sus operadores creían parchadas.

Si en tu empresa corre PeopleSoft PeopleTools 8.61 u 8.62 (o algún release anterior sin soporte), este artículo te interesa. Aquí está el panorama completo: la técnica de bypass, los web shells desplegados, los IOCs verificables, y los pasos concretos de respuesta.

TL;DR — Lo que vas a tener al final

  • Tiempo de setup: 30 minutos a 2 horas dependiendo de la complejidad del entorno.
  • Requisitos: Acceso root, Linux moderno, conexión a internet para descargar dependencias.
  • Resultado: Servicio funcional y estable, documentado paso a paso.
  • Troubleshooting: Logs estándar en /var/log/, comandos de verificación al final de cada sección.

Qué pasó y por qué importa ahora

La historia tiene dos actos. En el primero (mayo-junio 2026), ShinyHunters aprovechó CVE-2026-35273 como zero-day contra más de 100 organizaciones globally, con 68% de las víctimas en educación superior. Oracle publicó un Security Alert out-of-band el 10 de junio de 2026 y entregó el patch en el Critical Patch Update de junio (CPU187). CISA lo agregó a su KEV dos días después.

El problema es que muchos equipos reaccionaron bloqueando /PSEMHUB/* en el WAF o el reverse proxy, sin parchear. Esa mitigación parcial es exactamente lo que la nueva ola explota.

El bypass del WAF que rompe la mitigación

El truco es casi trivial y por eso resulta incómodo. La regla del WAF hace match sobre la cadena literal /PSEMHUB/ antes de normalizar la URL. El atacante envía el request apuntando a /%50SEMHUB/:

# Lo que ve el WAF (regla string-based, no normaliza):
GET /%50SEMHUB/hub HTTP/1.1
Host: peoplesoft.universidad.edu
# Lo que entrega WebLogic tras URL-decoding:
GET /PSEMHUB/hub HTTP/1.1

%50 es la codificación percent-encoded de la letra P. El WAF nunca ve el patrón bloqueado, pero el servlet vulnerable recibe la ruta decodificada y responde. Mandiant documenta que este simple cambio abrió el camino a una nueva campaña que comprometió decenas de sistemas en educación, tecnología, salud, agricultura, transporte y gobierno, no solo universidades.

Antes de la explotación real, los atacantes hacen un reconocimiento silencioso: 5 a 15 POST /%50SEMHUB/hub con un objeto Java serializado, que devuelve el hostname y la versión del sistema operativo sin escribir archivos. Si ves esos POSTs en los logs de PIA WebLogic sin actividad posterior, el servidor fue identificado como vulnerable y puede caer en cualquier momento.

Indicadores verificables que ya puedes buscar

Estos son los hashes SHA-256 y los nombres de archivo publicados por GTIG. No es paranoia: búscalos en tu filesystem y en los logs de tu WAF.

Indicador Tipo Valor / Hash
meshagent64-azure-ops.exe Agente Windows malicioso f02a924c9ff92a8780ce812511341182c6b509d45bc59f3f7b522e37225d24fc
meshagent64-v2.exe Agente Windows malicioso v2 d83fdb9e53c5ff03c4cb0451ea1bebd79b53f29eadc1e2fa394c7af13a86ce2f
meshagent32-azure-ops.exe Agente Windows x86 c7e9332731b06644fc73e0046a2a89eaa59b09f54250e9bd622467187351711f
x.jsp Web shell (cmd cross-platform) Patrón cúmulo de ProcessBuilder
u.jsp / u2.jsp Web shell (uploader chunked 150 KB) Base64 + Files.write a PSEMHUB.war
tunnel.jsp / tunnel.jspx Tunnel SOCKS5 Neo-reGeorg Hash varía por clave
Ple64.exe Instalador troyanizado (SIDEEYE) 3ba215692665513abfffd4e815c5c45f2d41e5dcc4283a2a3b740930c5c417c3
README-IF-YOU-SEE-THIS-YOUVE-BEEN-HACKED.TXT Marcador de defacement Buscar en todo PS_CFG_HOME
C2 SIDEEYE TCP crudo 162.219.30.165:3333 (control), 162.219.30.165:3334 (data)
C2 MeshCentral previo WSS wss://azurenetfiles.net:443/agent.ashx
Staging IPs primera ola HTTP 8888 142.11.200.186 a 142.11.200.190

El archivo Ple64.exe es particularmente insidioso: está firmado con un certificado EV válido emitido a Tobias Weihmann Software Development OU por Sectigo (Mandiant ya gestionó la revocación). Lo entregan como instalador troyanizado del reproductor Light Alloy, con un payload de tres etapas protegido con VMProtect 3 que carga el backdoor SIDEEYE en memoria sin tocar el disco después del lanzamiento.

Qué hace el web shell x.jsp

Vale la pena entender la lógica del shell porque las reglas genéricas de detección no lo agarran: acepta comandos en hexadecimal por POST (parámetro c), evita firmas estáticas reconstruyendo /bin/sh desde un array de enteros ASCII en lugar de la cadena literal, y devuelve la salida precedida de R::

# Comando hex-encoded para evitar WAF con regex sobre query strings
curl -s -X POST "https://victima/%50SEMHUB/hub/x.jsp" 
  --data-urlencode "c=$(echo -n 'whoami; uname -a; id' | xxd -p)" 
  --data-urlencode "t=20"

Si tu WAF o IDS sólo busca /PSEMHUB en el path, este tráfico pasa. La salida empieza con R: seguida del comando ejecutado. El siguiente nivel (u.jsp) sube binarios en chunks de 150 KB para evadir el límite de tamaño de request y los handlers nativos de PeopleSoft FILECHUNKING.

Qué patch aplicar (CPU187) y por qué el WAF no alcanza

Si aún no lo hiciste, el primer movimiento es el patch. El documento de disponibilidad es CPU187, disponible en My Oracle Support, y viene incluido en el Critical Patch Update de junio 2026. Las versiones afectadas explícitamente son PeopleTools 8.61 y 8.62; releases anteriores sin soporte probablemente son vulnerables pero no tienen patch: la única mitigación para esos es upgrade a versión soportada.

El segundo movimiento es eliminar el vector aunque hayas parcheado. Para PeopleTools 8.61/8.62:

# 1. Detectar configuración multi-server con EMHub habilitado
ps -ef | grep -i psemhub | grep -v grep
find / -name "PSEMHUB*" -type d 2>/dev/null
# 2. En configuración multi-server: deshabilitar EMHub desde la consola
psadmin -c disablenode && psadmin -c stop -d peoplesoft
# 3. En configuración single-server: eliminar la app PSEMHUB
rm -rf $PS_CFG_HOME/webserv/<DOMAIN>/applications/peoplesoft/PSEMHUB.war

Si no puedes deshabilitar EMHub de inmediato, bloquea en el perímetro pero normalizando el path:

# Coraza / ModSecurity: bloquear el path YA decodificado
SecRule REQUEST_URI "@rx /PSEMHUB/" 
  "phase:1,id:1001,severity:CRITICAL,log,deny,status:403,msg:'PSEMHUB exploit attempt'"
# Nginx: bloquear todas las variantes percent-encoded de 'P' en el path
location ~* /%50SEMHUB/ { deny all; return 403; }
location ~* /%70SEMHUB/ { deny all; return 403; }
# También las versiones mixed-case
location ~* /%[Pp][Ss][Ee][Mm][Hh][Uu][Bb]/ { deny all; return 403; }

La regla práctica: no confíes en reglas que matchean la cadena cruda. El atacante puede rotar entre %50, %70, mayúsculas/minúsculas mezcladas, o incluso double-encoding. Configura el WAF para que normalice primero y bloquee después.

Cómo saber si tu instancia ya está comprometida

El universo de indicadores a buscar es concreto. Aquí va el orden de prioridad:

  1. Marcador de defacement: find $PS_CFG_HOME -name "README-IF-YOU-SEE-THIS-YOUVE-BEEN-HACKED.TXT". Su presencia es señal inequívoca de compromiso.
  2. Web shells en PSEMHUB.war: revisa $PS_CFG_HOME/webserv/<DOMAIN>/applications/peoplesoft/PSEMHUB.war/ y compara con la lista oficial de archivos del producto. x.jsp, u.jsp, tunnel.jsp, tunnel.jspx y Ple64.exe no pertenecen al paquete.
  3. Logs de WebLogic: búsca POST /PSEMHUB/hub y todas las variantes percent-encoded (/%50SEMHUB/, /%70SEMHUB/, etc.), especialmente las que vienen de IPs externas. También requests a .jsp desde Internet.
  4. Tráfico SMB saliente: conexiones TCP/445 desde servidores PeopleSoft hacia Internet. El exploit chain captura hashes NetNTLM vía SMB saliente, es uno de los indicadores más tempranos.
  5. MeshAgent en Linux: find / -name "meshagent" -type f 2>/dev/null y procesos meshagent corriendo fuera de los paths esperados.
  6. Credenciales en psappsrv.cfg: el atacante lee este archivo para robar cadenas de conexión a la base de datos y credenciales del Integration Broker. Asume que cualquier secreto allí almacenado ya está quemado.

Si confirmas compromiso, asume también movimiento lateral por SSH. La propagación se hace con un script [victim_abbreviation]_fanout.sh que dispara sshpass con listas de usuarios y passwords comunes contra otros nodos PeopleSoft del entorno. Revisa ~/.bash_history de las cuentas de servicio y /tmp/ en busca de ese archivo.

Respuesta a incidentes: checklist de 48 horas

Si estás en medio de un incidente activo o sospechas que tu ventana de exposición incluyó mayo-septiembre 2026, este es el orden de batalla:

# 1. Contener: aislar el servidor PeopleSoft de la red de producción
iptables -A INPUT -s <IP_PEOPLESOFT> -j DROP
iptables -A OUTPUT -d <IP_PEOPLESOFT> -j DROP
# 2. Preservar evidencia antes de tocar nada
tar czf /tmp/peoplesoft_forensic_$(date +%F).tar.gz 
  $PS_CFG_HOME/webserv/ 
  /var/log/weblogic/ 
  /tmp/ 
  ~/.bash_history
# 3. Identificar IOCs locales
grep -RE "README-IF-YOU-SEE-THIS-YOUVE-BEEN-HACKED|x.jsp|u.jsp|tunnel.jsp|Ple64" 
  $PS_CFG_HOME/ 2>/dev/null
sha256sum $PS_CFG_HOME/webserv/*/applications/peoplesoft/PSEMHUB.war/*.exe 2>/dev/null
# 4. Rotar TODAS las credenciales accesibles desde la cuenta de servicio
# (DB strings en psappsrv.cfg, Integration Broker, cloud IAM reachable)
# Asumir compromiso total: cambiar secrets, regenerar SSH keys, rotar DB passwords
# 5. Parchar (CPU187) y deshabilitar EMHub antes de re-exponer

La respuesta de Mandiant y MOXFIVE es clara: no esperar a tener síntomas. Cualquier instancia que estuvo expuesta entre mayo y septiembre 2026 debe asumirse comprometida hasta que se demuestre lo contrario. El tiempo de dwell del actor en organizaciones afectadas se mide en semanas, no en horas.

Para quién es urgente y quién puede respirar

Si tu organización no usa PeopleSoft, este incidente es señal de alerta genérica sobre mitigaciones parciales basadas en WAF. El patrón es claro: los actores pivotan hacia organizaciones que bloquearon el síntoma pero no parchearon la causa. Si tu regla de firewall o WAF hace match literal de una cadena, pregúntate qué pasa cuando el atacante rota una codificación, mayúsculas, o fragmenta el path.

Si tu organización usa PeopleSoft y aún no aplicó CPU187, este es tu día. El universo de víctimas documentado por Mandiant incluye universidades latinoamericanas: la segunda ola ya está activa y no discrimina por geografía.

Resumen accionable

  • Parchea PeopleTools 8.61/8.62 con CPU187 ya.
  • Deshabilita o elimina EMHub en single-server y multi-server según corresponda.
  • Bloquea /PSEMHUB/ normalizando el path antes del match en WAF.
  • Busca los IOCs (marcador, web shells, hashes Ple64.exe, MeshAgent) en tu instalación.
  • Asume compromiso si tu instancia estuvo expuesta entre mayo y septiembre 2026.
  • Rota credenciales accesibles desde la cuenta de servicio: DB, Integration Broker, SSH, IAM cloud.

Preguntas frecuentes

¿Por qué CVE-2026-35273: ShinyHunters evade WAF y reabren la explotación de Oracle PeopleSoft es relevante para sysadmins Linux?

Forma parte del flujo diario de administración. Los conceptos explicados se aplican directamente a servidores en producción y resuelven problemas reales que enfrentan sysadmins hispanohablantes.

¿Qué necesito para empezar con CVE-2026-35273: ShinyHunters evade WAF y?

Distribución Linux actualizada (Debian, Ubuntu, RHEL, Fedora o Arch), acceso root, y conexión a internet. Para producción: entorno de staging separado antes de aplicar cambios.

¿Cuáles son los errores más comunes con CVE-2026-35273: ShinyHunters evade WAF y?

Los tres más frecuentes: (1) saltar la lectura de logs, (2) aplicar cambios directos en producción sin probar, (3) olvidar permisos y ownership. La documentación y un plan de rollback siempre.

¿Cuándo usar CVE-2026-35273: ShinyHunters evade WAF y y cuándo una alternativa?

Esta solución es ideal para el caso descrito. Alternativas como Docker, Ansible o configuración manual pueden ser mejores según contexto: portabilidad, escala y reproducibilidad son los factores clave.

¿Cómo migro desde una configuración previa a CVE-2026-35273: ShinyHunters evade WAF y?

Documentar el estado actual, probar la nueva configuración en staging, validar funcionalmente, y aplicar en producción con rollback plan listo. Los posts de SoyLinux incluyen troubleshooting para los problemas más comunes.

Lee también

Alfonso Moreno | Sysadmin Senior

Soy Alfonso, sysadmin senior con RHCE y más de 10 años administrando sistemas Linux para empresas y proyectos personales. Me especializo en infraestructura, redes, virtualización, monitoring, automation y self-hosting. Sobre SoyLinux.com SoyLinux.com es un blog técnico en español sobre Linux, software libre y self-hosting. Lo mantengo en mi tiempo libre. Áreas de expertise - Linux server administration: RHEL, CentOS, Rocky, Alma, Fedora, Debian, Ubuntu - Network services: Postfix, BIND, Samba, NFS, Squid - Virtualización y containers: KVM, Proxmox, Docker, Podman - Monitoring: Prometheus, Grafana, Zabbix - Automation: Ansible, Bash scripting - Self-hosting: Vaultwarden, Nextcloud, Jellyfin, Immich, Homelab Contacto - Email: [email protected]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *