← Back to Feed CACHED · 2026-10-08 21:58:26 · CACHE_KEY CVE-2026-94127
CVE-2026-94127 · CWE-122 · Disclosed 2026-09-22

F5 BIG-IP APM OAuth Authorization Server Heap-Based Buffer Overflow RCE

ASSESSED — NOISGATE
Vendor
—
—
—
Reassessed
—
—
—
Verdict: —
Do you agree?
01 · The Real Story

Someone left the drawbridge mechanism unlocked, and the invaders are already inside the gatehouse

CVE-2026-94127 is a heap-based buffer overflow in the F5 BIG-IP APM OAuth UserInfo handler (/f5-oauth2/v1/userinfo). The handler allocates a fixed 0x4100-byte (16,640-byte) buffer for the HTTP Authorization header but copies the attacker-supplied value without enforcing that limit. An oversized header corrupts adjacent heap memory, overwrites a callback pointer at buffer + 0x4ff8, and hands control to the attacker via a ROP chain. The chain modifies /etc/bigstart/scripts/tmm.finish, and when TMM crashes (triggered by the overflow itself), BIG-IP executes the modified script as root, bypassing SELinux. No authentication, no valid token, no user interaction required. Affected branches: BIG-IP APM 17.1.0–17.1.3, 17.5.0–17.5.1, and 21.1.0. Deployments using APM only as an OAuth *Client* or *Resource Server* — without an OAuth Authorization Server profile on the virtual server — are not vulnerable.

F5's vendor severity of CRITICAL / 9.8 is accurate and, if anything, undersells the operational urgency. The CVSS vector AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H is correct: the attack is unauthenticated, low-complexity, network-reachable, and yields full host compromise. The configuration prerequisite (APM + OAuth AS profile) narrows the *population* of vulnerable devices, but it does not increase *attack complexity* — the attacker simply needs to hit the right endpoint on the right virtual server, and that endpoint is on the data plane (internet-facing by design). With 14,700+ exposed instances per Shadowserver, confirmed in-the-wild exploitation on day zero, a CISA three-day remediation deadline, and F5 BIG-IP's role as a network perimeter appliance routing all inbound traffic, the vendor score matches reality. This is the worst kind of network-edge RCE: pre-auth, data-plane, actively exploited, and the device sits in front of everything else.

"Unauth RCE on your perimeter load balancer. Active exploitation. Patch yesterday."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Identify target virtual server with APM OAuth AS

The attacker scans for internet-facing BIG-IP instances using Shodan, Censys, or FOFA dorks (e.g., http.favicon.hash for F5 login pages, or probing /f5-oauth2/v1/userinfo directly). Shadowserver data shows 14,700+ exposed BIG-IP APM instances. The attacker needs only one that returns a valid OAuth error response from the UserInfo endpoint to confirm the target is running an OAuth Authorization Server profile.
Conditions required:
  • Internet-facing BIG-IP APM virtual server
  • APM access policy AND OAuth profile configured on the virtual server
  • APM operating as OAuth Authorization Server
Where this breaks in practice:
  • Not all BIG-IP deployments use APM
  • Not all APM deployments use OAuth Authorization Server profiles
  • Some enterprises restrict APM OAuth endpoints via iRules or external WAFs
Detection/coverage: Shodan/Censys/FOFA fingerprinting is passive and pre-attack. Network-level detection requires monitoring for probes to /f5-oauth2/v1/userinfo from scanning infrastructure. GreyNoise may tag scanning IPs.
STEP 02

Send oversized Authorization header to UserInfo endpoint

The attacker crafts an HTTP request to /f5-oauth2/v1/userinfo with an Authorization header exceeding 16,640 bytes. The TMM (Traffic Management Microkernel) data-plane process copies the header into the fixed 0x4100-byte heap buffer without bounds checking. This corrupts adjacent heap metadata and overwrites a callback function pointer located at buffer + 0x4ff8. No authentication token, session cookie, or valid credential of any kind is required — the overflow occurs before any authentication logic executes.
Conditions required:
  • Network connectivity to the virtual server's data-plane port (typically 443)
Where this breaks in practice:
  • A WAF or IPS inspecting HTTP headers for anomalous length could block this, but the BIG-IP itself IS often the WAF
  • Some L7 proxies upstream might truncate oversized headers, but this is uncommon in front of BIG-IP
Detection/coverage: IDS/IPS signatures detecting abnormally large Authorization headers (>16KB). F5 logs: look for TMM SIGABRT crashes in /var/log/ltm and repeated invalid_token failures in /var/log/apm from a single source IP.
STEP 03

Hijack execution via ROP chain

The corrupted callback pointer redirects TMM execution into an attacker-controlled return-oriented programming (ROP) chain. The attacker uses known gadgets within TMM's address space to perform a stack pivot and chain together existing code fragments. The ROP payload writes attacker-controlled shell commands into the BIG-IP lifecycle script at /etc/bigstart/scripts/tmm.finish. This script is executed by the system whenever TMM terminates — and the overflow itself causes TMM to crash with SIGABRT, triggering execution.
Conditions required:
  • Successful heap corruption from step 2
  • Knowledge of TMM binary layout for ROP gadgets (static across a version — no ASLR in TMM context)
Where this breaks in practice:
  • ASLR is not effective in the TMM process context, reducing the difficulty of reliable exploitation
  • The tmm.finish script execution path bypasses SELinux enforcement
Detection/coverage: File integrity monitoring on /etc/bigstart/scripts/tmm.finish would catch the modification. Auditd rules for writes to /etc/bigstart/scripts/ directory. Unexpected TMM core dumps with SIGABRT in /var/log/ltm.
STEP 04

Achieve root-level command execution on BIG-IP

When TMM crashes (SIGABRT from the heap corruption), the BIG-IP init system executes tmm.finish as root. The attacker's injected commands run with full system privileges on the appliance. From here, the attacker has unrestricted access to the BIG-IP configuration, SSL private keys, session tokens, credential stores, and the internal network segments the BIG-IP bridges. Post-exploitation typically involves installing a persistent backdoor, exfiltrating TLS certificates and APM session credentials, and pivoting into the internal network.
Conditions required:
  • Successful ROP chain execution from step 3
Where this breaks in practice:
  • None — once the ROP chain fires, the lifecycle script runs automatically on TMM crash
Detection/coverage: Anomalous outbound connections from the BIG-IP management or data interfaces. Unauthorized configuration changes visible in tmsh audit. Suspicious commands in /var/log/audit. New or modified files in /etc/bigstart/scripts/. SOC should alert on any BIG-IP initiating connections to external IPs not in approved NTP/DNS/update lists.
STEP 05

Pivot into internal network and exfiltrate secrets

The compromised BIG-IP sits at the network perimeter and typically bridges external-facing VIPs to internal application pools. The attacker can now intercept all TLS-terminated traffic in cleartext, harvest APM session tokens and SSO credentials, modify pool member responses (watering hole), and use the BIG-IP's internal interfaces to reach backend servers, databases, and identity systems that are not directly internet-accessible. A compromised BIG-IP is effectively a man-in-the-middle on the entire application delivery path.
Conditions required:
  • Root access on BIG-IP from step 4
Where this breaks in practice:
  • Internal network segmentation may limit lateral movement from the BIG-IP VLAN
  • East-west firewalls or microsegmentation may restrict BIG-IP's internal reach
Detection/coverage: NetFlow/traffic anomalies from BIG-IP internal interfaces. EDR on backend servers detecting connections from BIG-IP management IPs that don't match normal health-check patterns.
03 · Compensating Control

1
CRITICAL 9.8→IGNORE 0.0
SEVERITY REDUCED
Apply F5 engineering hotfix immediately — Install the branch-appropriate hotfix: Hotfix-BIGIP-21.1.0.2.0.30.22-ENG.iso, Hotfix-BIGIP-17.5.1.9.0.160.12-ENG.iso, or Hotfix-BIGIP-17.1.3.5.0.41.14-ENG.iso. These are engineering hotfixes obtained via F5 Support, not standard downloads. Per the noisgate mitigation SLA for CRITICAL, deploy within 3 days. Given KEV and active exploitation, treat this as patch immediately, within hours. Schedule a maintenance window tonight if you haven't already.
2
CRITICAL 9.8→MEDIUM 5.5
SEVERITY REDUCED
Deploy F5-provided iRule as emergency stopgap — If you cannot hotfix within hours, contact F5 Support to obtain the vendor-provided iRule and apply it to every virtual server running an APM access policy with an OAuth profile. This screens malicious traffic at the data plane before it reaches the vulnerable UserInfo handler. Apply today — this buys time while you schedule hotfix deployment. Per the noisgate mitigation SLA for CRITICAL, this stopgap must be in place within 3 days at the absolute latest.
3
CRITICAL 9.8→HIGH 7.5
SEVERITY REDUCED
Restrict access to OAuth UserInfo endpoint via network ACLs — If the OAuth Authorization Server is not intended to serve arbitrary internet clients, apply a BIG-IP ACL or external firewall rule to restrict access to /f5-oauth2/v1/userinfo to known OAuth client IP ranges only. This reduces the attack surface from the entire internet to a whitelist. However, if the OAuth AS serves public-facing SSO, this control may not be feasible without breaking functionality.
4
CRITICAL 9.8→IGNORE 0.0
SEVERITY REDUCED
Disable OAuth Authorization Server profile temporarily — If the OAuth AS functionality is not business-critical, remove the OAuth profile from the affected virtual server(s) via tmsh modify ltm virtual <name> profiles delete { <oauth-profile> }. This eliminates the vulnerable code path entirely. Confirm with tmsh list apm oauth server that no OAuth AS profiles remain on data-plane virtual servers. Obviously this breaks OAuth AS functionality — evaluate business impact before applying.
5
CRITICAL 9.8→CRITICAL 9.8
Hunt for compromise indicators on all BIG-IP APM systems — Given active exploitation since before disclosure, assume breach and hunt. Check: (1) /var/log/ltm for TMM SIGABRT crashes, (2) /var/log/apm for 10+ invalid_token failures from a single IP, (3) /etc/bigstart/scripts/tmm.finish for unauthorized modifications — compare against a known-good baseline or freshly installed system, (4) /var/log/audit for suspicious command execution, (5) outbound connections from the BIG-IP to unexpected external IPs. Perform this triage today, concurrent with patching.
What doesn't work
  • Upstream WAF header-length rules — In most enterprise deployments, the BIG-IP IS the WAF. There is no upstream L7 inspection point to truncate oversized Authorization headers. If you have a CDN in front (Cloudflare, Akamai), its header-length limits *may* help, but this is not a reliable control because CDN header limits vary and may not apply to Authorization headers specifically.
  • BIG-IP management plane lockdown (port 443 on mgmt interface) — This vulnerability is on the data plane, not the management plane. Restricting management GUI access to a jump box does nothing; the attack targets the production virtual server port that must remain open for application traffic.
  • TLS client certificate authentication — The heap overflow fires during HTTP header parsing, before any TLS client cert validation occurs at the application layer. mTLS on the virtual server does not prevent exploitation.
  • Rate limiting OAuth endpoints — The exploit requires only a single malicious request. Rate limiting will not prevent a one-shot heap overflow.
04 · Intelligence Metadata

The supporting signals.

In-the-Wild StatusActively exploited. F5 confirmed exploitation at disclosure (2026-09-22). CISA added to KEV same day with a 3-day federal remediation deadline (2026-09-25) under BOD 26-04. No specific threat actor attributed — F5 states exploitation is not linked to a named state-sponsored group, ransomware operation, or commercial surveillance vendor.
PoC AvailabilityNo public weaponized exploit. FurkanKAYAPINAR/CVE-2026-94127 on GitHub contains a detection/remediation tool only — not an exploit. Listed on Sploitus as a PoC but confirmed defensive-only. Technical writeup by S. Kheirkhah of watchTowr Labs (2026-09-23) documents the overflow primitive, ROP chain, and tmm.finish persistence mechanism — sufficient detail for a skilled attacker to reproduce. Expect weaponized PoCs within days from hotfix reverse-engineering.
EPSS0.02226 (2.23%) — 97th+ percentile. High for a vulnerability this fresh. EPSS will likely climb as exploitation broadens and PoC code circulates.
KEV StatusListed 2026-09-22. Due date: 2026-09-25 (3 days). BOD 26-04 forensic triage required for affected federal systems.
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — 9.8. CVSS v4.0 score: 9.3. Every base metric is at maximum severity. Network-reachable, no auth, no interaction, full CIA impact. The S:U (Unchanged scope) is technically conservative — a compromised BIG-IP impacts everything behind it, which arguably warrants S:C.
Affected VersionsBIG-IP APM 17.1.0 – 17.1.3, 17.5.0 – 17.5.1, 21.1.0. Only when configured with an APM access policy + OAuth Authorization Server profile on a virtual server. OAuth Client/Resource Server-only configs are not affected.
Fixed VersionsEngineering hotfixes: Hotfix-BIGIP-21.1.0.2.0.30.22-ENG.iso (21.1.x), Hotfix-BIGIP-17.5.1.9.0.160.12-ENG.iso (17.5.x), Hotfix-BIGIP-17.1.3.5.0.41.14-ENG.iso (17.1.x). These are engineering hotfixes requiring F5 Support access — not standard point releases. A vendor-provided iRule is available as a temporary mitigation (contact F5 Support to obtain it).
Internet ExposureShadowserver: 14,700+ internet-facing BIG-IP APM instances as of disclosure week. This is raw exposure — not all will have OAuth AS configured, but the attack surface is substantial. The vulnerable endpoint (/f5-oauth2/v1/userinfo) is on the data plane, meaning it's reachable on the same port as production traffic (typically 443).
Disclosure & DiscoveryDisclosed 2026-09-22 by F5 (advisory K000162605). F5 states internal discovery. Technical analysis published 2026-09-23 by S. Kheirkhah, watchTowr Labs, detailing the 0x4100-byte buffer, callback pointer corruption, ROP chain, and tmm.finish persistence vector.
Detection CoverageF5 diagnostic: tmsh show sys version + tmsh list apm oauth server to identify affected configs. Post-exploitation indicators: TMM SIGABRT crashes in /var/log/ltm, 10+ invalid_token failures from same IP in /var/log/apm, writes to /etc/bigstart/scripts/tmm.finish, suspicious commands in /var/log/audit. No public Nuclei template or Metasploit module yet. Qualys/Tenable/Rapid7 plugin coverage expected within days of disclosure.

Sources.

  1. F5 Advisory K000162605
  2. CISA KEV Catalog Entry
  3. Picus Security — CVE-2026-94127 Heap Overflow Explained
  4. SOCPrime — CVE-2026-94127 Zero-Day Analysis
  5. SecPod — F5 BIG-IP APM Zero-Day Under Active Exploitation
  6. Tech Insider — F5 BIG-IP Zero-Day CVE-2026-94127
  7. FurkanKAYAPINAR/CVE-2026-94127 Detection Tool (GitHub)
  8. CISA Alert — Four KEV Additions (2026-09-22)
05 · The Call

Final Verdict
= UNCHANGED to CRITICAL (9.8/10)

Why this verdict

  • Unauthenticated pre-auth RCE on data plane: The attack requires zero credentials — the heap overflow fires before any authentication logic. The CVSS vector AV:N/AC:L/PR:N/UI:N reflects reality: any host that can reach the virtual server on port 443 can trigger the overflow. No upstream WAF or proxy reliably truncates headers to block this, and the BIG-IP itself is typically the outermost Layer 7 inspection point.
  • Active exploitation with KEV listing and 3-day federal deadline: This is not theoretical. F5 confirmed exploitation at disclosure, and CISA's unprecedented 3-day remediation deadline (vs. the typical 21 days) signals that intelligence agencies assessed imminent, broad exploitation. The EPSS of 2.23% at disclosure is already 97th+ percentile and will rise as weaponized PoCs emerge from hotfix diff analysis.
  • Configuration prerequisite is real but does not downgrade severity: The vuln requires APM + OAuth Authorization Server profile — not all BIG-IP deployments have this. However, this narrows the *population*, not the *complexity*. For any device that does have the config, the attack is trivially reachable on the data plane. The configuration is not obscure; OAuth AS is a core APM use case for SSO federation.
  • Role multiplier: F5 BIG-IP is a canonical network edge appliance. BIG-IP sits at the perimeter by design — ≥80% of BIG-IP installs are internet-facing, and the device bridges external traffic to internal application tiers. A compromised BIG-IP gives the attacker: (1) all TLS private keys for terminated connections, (2) cleartext inspection of all traffic, (3) APM session tokens and SSO credentials, (4) a pivot point into every internal VLAN the device bridges. The blast radius is fleet-scale: one compromised BIG-IP can compromise every application and user behind it. This is definitionally a high-value-role component where the verdict floor is CRITICAL.
  • 14,700+ exposed instances per Shadowserver: The internet-facing attack surface is massive. Even if only 20-30% of those run OAuth AS configs, that's 3,000-4,500 directly exploitable appliances sitting in front of enterprise production environments, healthcare systems, financial services, and government networks.

Why not higher?

The CVSS scale maxes at 10.0, and 9.8 with Scope:Unchanged is already at the ceiling. A case could be made for Scope:Changed (compromising the BIG-IP compromises everything behind it), which would push toward 10.0, but F5's Scope:Unchanged assessment is defensible since the initial code execution is confined to the BIG-IP OS itself. There is no higher practical severity than CRITICAL.

Why not lower?

Every downgrade argument fails the floor test. The OAuth AS configuration requirement narrows the population but does not increase attack complexity for affected devices. The lack of a public weaponized PoC is temporary — watchTowr's technical writeup provides sufficient detail for reproduction, and hotfix diffing will yield working exploits imminently. BIG-IP is a canonical network edge appliance; ≥10% of installs are definitionally high-value-role by the component's purpose. Active exploitation, KEV listing, 14,700+ exposed instances, pre-auth data-plane attack vector, and root-level code execution on a perimeter device collectively make any downgrade indefensible.

06 · Verification

Crowdsourced verification payload.

Run this script on each BIG-IP appliance via SSH as root (or via tmsh run util bash). Usage: bash check_cve_2026_94127.sh. It checks the running BIG-IP version against affected ranges, verifies whether an OAuth Authorization Server profile is configured on any virtual server, and inspects tmm.finish for signs of tampering.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# check_cve_2026_94127.sh — CVE-2026-94127 Vulnerability & Compromise Check
# Run on BIG-IP appliance as root. Outputs: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 2=VULNERABLE, 0=PATCHED, 1=UNKNOWN

set -euo pipefail

RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'

# Get BIG-IP version
VERSION=$(tmsh show sys version | grep -oP 'Version\s+\K[0-9]+\.[0-9]+\.[0-9]+' | head -1 2>/dev/null || echo "")
if [ -z "$VERSION" ]; then
    echo -e "${YELLOW}[UNKNOWN]${NC} Could not determine BIG-IP version. Is this a BIG-IP system?"
    exit 1
fi

echo "[*] BIG-IP Version: $VERSION"

# Check if version is in affected range
AFFECTED=0
case "$VERSION" in
    17.1.[0-3]*) AFFECTED=1; BRANCH="17.1.x" ;;
    17.5.[0-1]*) AFFECTED=1; BRANCH="17.5.x" ;;
    21.1.0*)     AFFECTED=1; BRANCH="21.1.x" ;;
    *)           AFFECTED=0 ;;
esac

if [ "$AFFECTED" -eq 0 ]; then
    echo -e "${GREEN}[PATCHED]${NC} Version $VERSION is not in an affected branch (17.1.0-17.1.3, 17.5.0-17.5.1, 21.1.0)."
    exit 0
fi

echo -e "${YELLOW}[*]${NC} Version $VERSION is in affected branch $BRANCH."

# Check for engineering hotfix
HOTFIX=$(tmsh show sys version | grep -i 'Hotfix' | head -1 || echo "")
if echo "$HOTFIX" | grep -qiE '(21\.1\.0\.2\.0\.30\.22|17\.5\.1\.9\.0\.160\.12|17\.1\.3\.5\.0\.41\.14)'; then
    echo -e "${GREEN}[PATCHED]${NC} Engineering hotfix detected: $HOTFIX"
    exit 0
fi

# Check for OAuth Authorization Server profile on virtual servers
echo "[*] Checking for OAuth Authorization Server profiles on virtual servers..."
OAUTH_AS=$(tmsh list apm oauth server 2>/dev/null || echo "")
if [ -z "$OAUTH_AS" ] || echo "$OAUTH_AS" | grep -q "was not found"; then
    echo -e "${GREEN}[PATCHED]${NC} No OAuth Authorization Server profiles found. Version $VERSION is affected but configuration is not vulnerable."
    echo "    Note: Re-check if OAuth AS profiles are added in the future."
    exit 0
fi

echo -e "${RED}[VULNERABLE]${NC} BIG-IP $VERSION with OAuth Authorization Server profile(s) detected."
echo "    Affected OAuth AS config:"
echo "$OAUTH_AS" | head -20

# Compromise indicators
echo ""
echo "[*] Checking for compromise indicators..."
TMM_FINISH="/etc/bigstart/scripts/tmm.finish"
if [ -f "$TMM_FINISH" ]; then
    FINISH_HASH=$(md5sum "$TMM_FINISH" | awk '{print $1}')
    FINISH_MTIME=$(stat -c '%y' "$TMM_FINISH" 2>/dev/null || stat -f '%Sm' "$TMM_FINISH" 2>/dev/null)
    echo "    tmm.finish hash:  $FINISH_HASH"
    echo "    tmm.finish mtime: $FINISH_MTIME"
    # Check for suspicious content (non-standard entries)
    if grep -qiE '(curl|wget|nc |ncat|bash -i|/dev/tcp|python|perl|ruby|base64)' "$TMM_FINISH" 2>/dev/null; then
        echo -e "    ${RED}[!] SUSPICIOUS CONTENT in tmm.finish — possible post-exploitation tampering!${NC}"
    fi
fi

# Check for TMM crashes
SIGABRT_COUNT=$(grep -c 'SIGABRT' /var/log/ltm 2>/dev/null || echo "0")
if [ "$SIGABRT_COUNT" -gt 0 ]; then
    echo -e "    ${YELLOW}[!] $SIGABRT_COUNT SIGABRT entries in /var/log/ltm — review for exploitation attempts.${NC}"
fi

# Check for OAuth brute patterns
INVALID_TOKEN=$(grep -c 'invalid_token' /var/log/apm 2>/dev/null || echo "0")
if [ "$INVALID_TOKEN" -gt 10 ]; then
    echo -e "    ${YELLOW}[!] $INVALID_TOKEN invalid_token entries in /var/log/apm — review source IPs.${NC}"
fi

echo ""
echo -e "${RED}VULNERABLE${NC} — Apply hotfix for $BRANCH immediately. See F5 K000162605."
exit 2