
Technical analysis of CVE-2026-28858, a critical buffer overflow in Apple iOS/iPadOS kernel, including exploit flow, mitigation, and defensive coding examples.
╔══════════════════════════════════════════════════════════════╗
║ SEVERIDAD: CRÍTICA │ CVSS: 9.8 │ CWE-120 │ REMOTO ║
╚══════════════════════════════════════════════════════════════╝
Un usuario remoto puede provocar la terminación inesperada del sistema o corrupción de memoria del kernel en iOS/iPadOS sin interacción del usuario ni privilegios.
| Campo | Valor |
|---|
| CVE ID | CVE-2026-28858 |
| EUVD | EUVD-2026-15131 |
| Publicado | 25 de marzo de 2026 |
| Última actualización | 26 de marzo de 2026 |
| CVSS v3.1 | 9.8 / 10 — CRÍTICO |
| EPSS | 0.05% |
| Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CWE | CWE-120 — Copia de búfer sin verificación de tamaño |
| Estado | Analizado — Parche disponible |
Desbordamiento de búfer (Buffer Overflow) en Apple iOS e iPadOS causado por comprobación de límites insuficiente en el procesamiento de entradas del kernel.
Impacto real:
| Parámetro | Valor | Descripción |
|---|---|---|
| Vector de Ataque | Red | Explotable remotamente |
| Complejidad | Baja | Sin condiciones especiales |
| Privilegios Requeridos | Ninguno | No se necesita autenticación |
| Interacción de Usuario | Ninguna | Zero-click |
| Alcance | Sin cambios | Confinado al componente vulnerable |
| Confidencialidad | Alto | Acceso completo a datos |
| Integridad | Alto | Modificación total posible |
| Disponibilidad | Alto | Crash del sistema |
No existe un exploit público para CVE-2026-28858. La siguiente representación es conceptual, basada en el CWE-120 y el vector de ataque documentado.
# Representación conceptual del desbordamiento
import socket
# 1. Relleno del búfer asignado (~512 bytes típicos en handlers de kernel)
buffer_fill = b"A" * 512
# 2. Dirección de retorno sobrescrita — apunta a zona controlada por atacante
# En iOS/iPadOS real: requiere bypass de ASLR + PAC (Pointer Authentication Codes)
return_address = b"\x41\x42\x43\x44"
# 3. Shellcode: NOP sled + instrucciones maliciosas para ARM64
shellcode = b"\x90" * 16 + b"\xeb\x12..." # NOP sled + payload
payload = buffer_fill + return_address + shellcode
# Entrega remota sin interacción del usuario
# Ejemplo: paquete de red con campo de longitud manipulado
import struct
def craft_malicious_packet(target_ip: str, target_port: int):
"""
Crea un paquete con metadatos malformados que el kernel
de iOS procesa en segundo plano (sin UI del usuario).
Ej: certificado TLS, metadato de imagen, campo de protocolo de red.
"""
# Cabecera legítima del protocolo
header = struct.pack(">HH", 0x0001, 0xFFFF) # type=1, length=OVERFLOW
# Payload que excede el búfer del kernel
malicious_data = header + payload
with socket.socket(socket.AF_INET, socket.SOCK_RAW) as s:
s.sendto(malicious_data, (target_ip, target_port))
[Red/WiFi/BT] → Paquete malformado
↓
[Proceso iOS en background] → Lee el campo "longitud" = 0xFFFF
↓
[memcpy(bufer_kernel, datos, 0xFFFF)] → SIN VERIFICACIÓN DE LÍMITES
↓
[Desbordamiento: shellcode escrito sobre stack/heap del kernel]
↓
[Procesador redirigido a return_address del atacante]
↓
[Ejecución con ring 0 / privilegios de kernel]
/* ❌ CÓDIGO VULNERABLE (antes del parche) */
void procesar_entrada(char *datos_usuario, size_t longitud) {
char bufer_kernel[512];
memcpy(bufer_kernel, datos_usuario, longitud); // SIN verificación
}
/* ✅ CÓDIGO CORREGIDO (iOS/iPadOS 26.4) */
void procesar_entrada(char *datos_usuario, size_t longitud) {
char bufer_kernel[512];
// Comprobación de límites — fix aplicado por Apple
if (longitud > sizeof(bufer_kernel)) {
kernel_log("CVE-2026-28858: input truncado [%zu > 512]", longitud);
return; // Abortar antes de copiar
}
memcpy(bufer_kernel, datos_usuario, longitud);
}
/* Mecanismo de defensa en profundidad: Stack Canary */
#include <string.h>
#define CANARY_VALUE 0xDEADBEEFCAFEBABE
void procesar_entrada_segura(char *datos_usuario, size_t longitud) {
uint64_t canary = CANARY_VALUE;
char bufer_seguro[512];
if (longitud > sizeof(bufer_seguro)) {
log_security_event("Intento de desbordamiento bloqueado");
return;
}
memcpy(bufer_seguro, datos_usuario, longitud);
// Verificar integridad del canario post-copia
if (canary != CANARY_VALUE) {
panic("Stack smashing detectado — CVE-2026-28858");
}
}
Acción inmediata requerida:
Actualizar a iOS 26.4 / iPadOS 26.4 o posterior
23 mar 2026 → Publicación inicial (EUVD)
24 mar 2026 → Advisory Apple #126792 publicado
24 mar 2026 → Primera mención detectada (Feedly)
24 mar 2026 → Estimación CVSS por análisis automático
25 mar 2026 → NVD asigna CVSS 9.8 — Crítico
25 mar 2026 → Detección añadida a Qualys (ID: 610773)
26 mar 2026 → Estado: Analizado
Todas las versiones de iOS e iPadOS anteriores a 26.4, incluyendo:
Ver lista completa de CPEs afectados en la documentación de referencia.
| Fuente | URL |
|---|---|
| Apple Security Advisory | https://support.apple.com/en-us/126792 |
| NVD | https://nvd.nist.gov/vuln/detail/CVE-2026-28858 |
| CWE-120 | https://cwe.mitre.org/data/definitions/120.html |
Disclaimer: El código presentado es únicamente una representación conceptual con fines educativos y de investigación defensiva. No existe exploit público para CVE-2026-28858.# CVE-2026-28858