CVE-2026-94127: Desbordamiento de Heap en F5 BIG-IP APM OAuth con RCE bajo Explotación Activa
F5 ha publicado un aviso de seguridad fuera de banda para corregir una vulnerabilidad crítica de ejecución remota de código en BIG-IP Access Policy Manager (APM), identificada como CVE-2026-94127. Permite a atacantes remotos no autenticados provocar un desbordamiento de búfer en heap en el motor de verificación de tokens OAuth, obteniendo control total con privilegios de root en los controladores de entrega de aplicaciones.
Mecánica de la Falla y Corrupción de Memoria en Heap
Al operar como servidor de autorización OAuth 2.0, el daemon interno apmd procesa las solicitudes de autenticación con tokens JWT. Durante la decodificación de notaciones Base64URL con caracteres de relleno excesivos, la función de asignación de memoria calcula de forma errónea el tamaño del búfer de destino en el heap.
/* Rutina vulnerable en el daemon apmd */
int process_oauth_claims(char *raw_jwt_claim, size_t claim_len) {
char *dest_buf = (char *)malloc(claim_len / 4 * 3); // Cálculo insuficiente
base64url_decode(raw_jwt_claim, dest_buf, claim_len); // Desborda dest_buf
return parse_json_ast(dest_buf);
}
Al sobrescribir punteros de función adyacentes en el heap, los atacantes logran redirigir el flujo de ejecución hacia shellcode inyectado con privilegios de root.
Actividad Maliciosa y Regla de Detección
CISA incorporó la vulnerabilidad a KEV tras detectar escaneos masivos dirigidos a IPs virtuales de F5 expuestas a internet.
alert http $EXTERNAL_NET any -> $F5_VIP 443 (msg:"COLIBRISEC - Intento Desbordamiento Heap F5 APM CVE-2026-94127"; flow:established,to_server; content:"POST"; http_method; content:"/oauth/v1/token"; http_uri; pcre:"/grant_type=[^&]*(%[0-9a-fA-F]{2}){1024,}/"; classtype:attempted-admin; sid:202694127; rev:1;)Remediación y Mitigación
- Aplicar Hotfixes de Ingeniería: Actualizar a las versiones 17.1.1.4-ENG, 17.5.0.2-ENG o 21.1.0.1-ENG.
Regla iRule Temporal: Si no es posible actualizar de inmediato, bloquear encabezados de autorización sobredimensionados:
when HTTP_REQUEST {
if { [HTTP::uri] starts_with "/oauth/v1/token" and [string length [HTTP::payload]] > 4096 } {
reject
}
}