Back to Intelligence

Salt Typhoon / Fire Ant TACACS+ Pre-Auth RCE (CVE-2026-48842): OTX Pulse Analysis — Telecom Infrastructure Detection Pack

SA
Security Arsenal Team
September 26, 2026
11 min read

Threat Summary

A newly published AlienVault OTX pulse details a critical pre-authentication remote code execution vulnerability in TACACS+ (Terminal Access Controller Access-Control System Plus), the 33-year-old AAA protocol originally released by Cisco in 1993 and now embedded in virtually all enterprise networking equipment. The vulnerability — tracked across CVE-2026-48842, CVE-2026-42542, and CVE-2026-87902 — was discovered by Australian security firm Elttam and represents a systemic exposure across ISPs, data centers, cloud providers, and large enterprises that rely on TACACS+ for device authentication, authorization, and accounting.

The pulse explicitly associates this vulnerability class with Salt Typhoon and Fire Ant, Chinese state-sponsored cyber-espionage actors with an established operational focus on telecommunications infrastructure. This attribution context is critical: Salt Typhoon's known tradecraft involves deep, persistent access to ISP and telecom backbone equipment for lawful-intercept system access, call metadata collection, and long-dwell espionage. A pre-auth RCE in the very protocol that governs administrative authentication to routers, switches, and firewalls is a force multiplier for exactly this mission profile.

The collective intelligence picture: adversaries can exploit TACACS+ before authentication occurs, achieving code execution on or through the AAA control plane, then pivoting to persistence on network devices, credential harvesting of administrative accounts, and lateral movement across the management plane — entirely bypassing endpoint-centric security controls that most SOCs depend on.

Objective assessment: espionage-grade persistence within telecom and enterprise core networking infrastructure, with secondary potential for destructive pre-positioning.

Threat Actor / Vulnerability Profile

Salt Typhoon

A PRC-nexus advanced persistent threat group assessed to operate in support of Chinese Ministry of State Security collection requirements. Salt Typhoon is documented for:

  • Distribution/Initial Access: exploitation of edge and core network devices, including unpatched routers, VPN concentrators, and AAA infrastructure — precisely the attack surface this TACACS+ flaw exposes.
  • Payload Behavior: deployment of custom backdoors and living-off-the-land tooling on network appliances; manipulation of device configurations; interception and redirection of authentication and signaling traffic.
  • C2 Communication: use of compromised infrastructure within victim networks as relay nodes; encrypted channels blended with legitimate management traffic; operational relay boxes to obscure attribution.
  • Persistence: modification of device firmware or boot configurations, creation of rogue local administrative accounts, and implantation of scheduled tasks or cron jobs on Linux-based network appliances. Crucially, persistence on TACACS+ servers enables credential interception for every device administrator in the environment.
  • Anti-Analysis: log tampering on network devices, disabling AAA accounting (which TACACS+ normally provides), and operating at the network layer where EDR has no visibility.

Fire Ant

A related Chinese espionage cluster tracked for targeting telecommunications providers and adjacent critical infrastructure, sharing tooling and infrastructure patterns consistent with state-directed collection. Fire Ant activity frequently overlaps with Salt Typhoon targeting, suggesting coordinated or tasking-aligned campaigns against telecom AAA and management plane assets.

The TACACS+ Attack Chain (CVE-2026-48842 et al.)

  1. Pre-authentication exploitation: attacker sends crafted TACACS+ packets (TCP/49) to an exposed or internally reachable AAA daemon — no credentials required.
  2. Code execution on the AAA server or device-integrated daemon, yielding control of the authentication authority for the entire network estate.
  3. Credential harvesting: TACACS+ servers process administrative logins; compromise enables capture of enable passwords and device admin credentials.
  4. Lateral movement: using harvested credentials and the AAA server's trusted position to authenticate to routers, switches, and firewalls.
  5. Persistence: rogue accounts, modified device configurations, and suppressed accounting records to blind audit trails.

IOC Analysis

The pulse provides four indicators:

IndicatorTypeAnalyst Assessment
CVE-2026-48842CVEPrimary pre-auth RCE in TACACS+ daemon handling — treat as the critical exploit vector. Cross-reference against all AAA infrastructure (Cisco ISE, tac_plus, TACACS.net, embedded device daemons).
CVE-2026-42542CVERelated TACACS+ vulnerability — likely a secondary flaw in packet parsing or session handling. Include in vulnerability scan scopes.
CVE-2026-87902CVEAdditional related CVE — scope against vendor advisories for your specific network OS versions.
third-party.comDomainLow-specificity indicator; likely a placeholder or reference domain from the source reporting. Do not block blindly — validate against internal telemetry for actual sightings before actioning.

Operationalization Guidance for SOC Teams

  • CVEs are the actionable intelligence here. Feed all three CVE identifiers into your vulnerability management platform (Tenable, Qualys, Rapid7) and your asset inventory to enumerate every TACACS+ server and every network device running an integrated AAA daemon.
  • Network-layer detection is mandatory. Endpoint tools will not see this attack. Ensure NetFlow/Zeek/Suricata coverage of TCP/49 traffic, especially from untrusted segments.
  • Baseline TACACS+ traffic. In healthy environments, TACACS+ flows only between network devices and designated AAA servers. Any other source is anomalous by definition.
  • Tooling: Zeek for TACACS+ session logging, Suricata for malformed packet detection, Nmap/Nessus for exposure discovery, and vendor PSIRT advisories (Cisco, Arista, Juniper) for patch mapping.

Detection Engineering

YAML
---
title: Suspicious TACACS+ Traffic from Non-AAA Source
description: Detects TACACS+ (TCP/49) connections originating from hosts that are not authorized network devices or AAA servers — a strong indicator of pre-authentication exploitation attempts against CVE-2026-48842 or lateral movement via compromised AAA infrastructure.
id: 8f3a1c2e-7b4d-4e9a-a1f2-9c6d5e8b7a31
status: experimental
author: Security Arsenal Threat Intel
references:
  - https://news.risky.biz/risky-bulletin-major-vulnerability-found-in-ancient-tacacs-networking-protocol/
date: 2026/09/26
logsource:
  category: network_connection
  product: zeek
  service: conn
detection:
  selection_port:
    id.resp_p: 49
  filter_authorized_sources:
    id.orig_h:
      - '%AAA_SERVER_SUBNET%'
      - '%NETWORK_DEVICE_MGMT_SUBNET%'
  condition: selection_port and not filter_authorized_sources
fields:
  - id.orig_h
  - id.resp_h
  - conn_state
  - orig_bytes
  - resp_bytes
falsepositives:
  - Misconfigured network devices pointing at wrong AAA servers
  - Legacy applications using port 49
level: high
tags:
  - attack.initial_access
  - attack.t1190
  - attack.lateral_movement
  - attack.t1021
  - cve.2026.48842
---
title: TACACS+ Authentication Failure Burst Followed by Success
description: Detects a burst of failed TACACS+ authentications followed by a successful login from the same source — consistent with post-exploitation credential brute-forcing or use of harvested credentials by Salt Typhoon/Fire Ant operators after AAA compromise.
id: 2d7e9f1a-5c3b-48a6-b4e1-1a8c7d6f2e94
status: experimental
author: Security Arsenal Threat Intel
date: 2026/09/26
logsource:
  product: cisco
  service: tacacs
  category: authentication
detection:
  selection_fail:
    - action: 'FAIL'
      status: 'authentication failure'
  timeframe: 10m
  condition: selection_fail | count() by source_ip > 5
falsepositives:
  - Network engineers mistyping enable passwords
  - Automation tools with stale credentials
level: medium
tags:
  - attack.credential_access
  - attack.t1110
  - attack.t1078
---
title: AAA Server Process Spawning Suspicious Child Processes
description: Detects TACACS+ daemon processes (tac_plus, tacacs, ISE runtime) spawning shells, interpreters, or download utilities — a hallmark of successful pre-authentication RCE exploitation on the AAA server.
id: 6b1c4d8e-2f9a-47c5-9d3b-4e7a8f1c5b62
status: experimental
author: Security Arsenal Threat Intel
date: 2026/09/26
logsource:
  category: process_creation
  product: linux
detection:
  selection_parent:
    ParentImage|endswith:
      - '/tac_plus'
      - '/tac_plus.exe'
      - '/tacacs'
      - '/tacacsd'
  selection_child:
    Image|endswith:
      - '/sh'
      - '/bash'
      - '/dash'
      - '/python'
      - '/python3'
      - '/perl'
      - '/curl'
      - '/wget'
      - '/nc'
      - '/ncat'
      - '/base64'
  condition: selection_parent and selection_child
falsepositives:
  - Rare administrative wrappers around tac_plus
level: critical
tags:
  - attack.execution
  - attack.t1059
  - attack.exploitation_for_client_execution
  - cve.2026.48842
KQL — Microsoft Sentinel / Defender
// Hunt: TACACS+ (TCP/49) connections from unexpected sources + related process anomalies
// Microsoft Sentinel / Defender XDR — Salt Typhoon / Fire Ant AAA exploitation hunt
let Lookback = 7d;
let AuthorizedAAA = dynamic(["10.10.5.0/24"]); // TODO: replace with your AAA server subnet(s)
let TacacsConnections =
    DeviceNetworkEvents
    | where TimeGenerated > ago(Lookback)
    | where RemotePort == 49
    | project TimeGenerated, DeviceName, LocalIP, RemoteIP, RemotePort, InitiatingProcessName, InitiatingProcessCommandLine, InitiatingProcessAccountName;
let SuspiciousSources =
    TacacsConnections
    | where not(ipv4_is_in_range(LocalIP, "10.10.5.0/24")) // adjust: expected client subnets (network devices)
    | summarize FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated), Attempts=count(), Targets=dcount(RemoteIP), TargetList=make_set(RemoteIP) by LocalIP, DeviceName, InitiatingProcessName;
let AAAHostProcessAnomalies =
    DeviceProcessEvents
    | where TimeGenerated > ago(Lookback)
    | where InitiatingProcessName has_any ("tac_plus", "tacacs", "ise")
    | where FileName in~ ("sh", "bash", "python", "python3", "perl", "curl", "wget", "nc", "ncat", "powershell.exe", "cmd.exe")
    | project TimeGenerated, DeviceName, FileName, ProcessCommandLine, AccountName, InitiatingProcessName;
union SuspiciousSources, (AAAHostProcessAnomalies | extend LocalIP="", Attempts=long(null), Targets=long(null), TargetList=dynamic(null), FirstSeen=TimeGenerated, LastSeen=TimeGenerated)
| sort by TimeGenerated desc
PowerShell
# Hunt script: TACACS+ AAA server compromise artifacts (CVE-2026-48842)
# Run on TACACS+/AAA servers and management hosts. Exports findings to CSV.
# Security Arsenal — Salt Typhoon / Fire Ant hunt pack — 2026-09-26

$OutFile = "TACACS_Hunt_$(Get-Date -Format 'yyyyMMdd_HHmm').csv"
$Findings = @()

Write-Host "[*] Checking for listening TACACS+ services (TCP/49)..." -ForegroundColor Cyan
$TacacsListeners = Get-NetTCPConnection -LocalPort 49 -State Listen -ErrorAction SilentlyContinue
foreach ($conn in $TacacsListeners) {
    $proc = Get-Process -Id $conn.OwningProcess -ErrorAction SilentlyContinue
    $Findings += [PSCustomObject]@{
        Category = "TACACS+ Listener"
        Detail   = "PID $($conn.OwningProcess) | Process: $($proc.ProcessName) | Path: $($proc.Path) | LocalAddr: $($conn.LocalAddress)"
        Risk     = if ($proc.Path -notmatch "tac|ise|aaa") { "HIGH - unexpected process bound to TCP/49" } else { "INFO" }
    }
}

Write-Host "[*] Checking for rogue local admin accounts (post-exploitation persistence)..." -ForegroundColor Cyan
$RecentAccounts = Get-LocalUser | Where-Object { $_.Enabled -eq $true } | ForEach-Object {
    $created = (Get-LocalUser -Name $_.Name | Select-Object -ExpandProperty PasswordLastSet -ErrorAction SilentlyContinue)
    [PSCustomObject]@{ Name = $_.Name; PasswordSet = $created }
}
foreach ($acct in $RecentAccounts) {
    if ($acct.PasswordSet -and $acct.PasswordSet -gt (Get-Date).AddDays(-14) -and $acct.Name -notmatch "Administrator|DefaultAccount|Guest|WDAG") {
        $Findings += [PSCustomObject]@{ Category = "Suspicious Account"; Detail = "Account '$($acct.Name)' password set $($acct.PasswordSet)"; Risk = "MEDIUM - verify legitimacy" }
    }
}

Write-Host "[*] Checking scheduled tasks for persistence..." -ForegroundColor Cyan
Get-ScheduledTask | Where-Object { $_.State -ne 'Disabled' } | ForEach-Object {
    $actions = ($_.Actions | ForEach-Object { "$($_.Execute) $($_.Arguments)" }) -join '; '
    if ($actions -match "powershell|cmd|curl|wget|certutil|bitsadmin|python|nc\.exe|/bin/") {
        $Findings += [PSCustomObject]@{ Category = "Scheduled Task"; Detail = "$($_.TaskName): $actions"; Risk = "MEDIUM" }
    }
}

Write-Host "[*] Checking recent outbound connections from AAA-related processes..." -ForegroundColor Cyan
$AAAProcs = Get-Process | Where-Object { $_.ProcessName -match "tac|ise|aaa|radius" }
foreach ($p in $AAAProcs) {
    $conns = Get-NetTCPConnection -OwningProcess $p.Id -State Established -ErrorAction SilentlyContinue | Where-Object { $_.RemoteAddress -notmatch "^(10\.|172\.(1[6-9]|2[0-9]|3[0-1])\.|192\.168\.|127\.)" }
    foreach ($c in $conns) {
        $Findings += [PSCustomObject]@{ Category = "External Egress"; Detail = "$($p.ProcessName) (PID $($p.Id)) -> $($c.RemoteAddress):$($c.RemotePort)"; Risk = "HIGH - AAA process talking to external IP" }
    }
}

Write-Host "[*] Checking for CVE references in installed patches/versions..." -ForegroundColor Cyan
Write-Host "    Verify against vendor advisories: CVE-2026-48842, CVE-2026-42542, CVE-2026-87902" -ForegroundColor Yellow
$Findings += [PSCustomObject]@{ Category = "Vuln Scope"; Detail = "Manual check required: confirm TACACS+ daemon/ISE version against CVE-2026-48842, CVE-2026-42542, CVE-2026-87902 advisories"; Risk = "ACTION REQUIRED" }

$Findings | Export-Csv -Path $OutFile -NoTypeInformation
Write-Host "[+] Hunt complete. Results written to $OutFile ($($Findings.Count) findings)" -ForegroundColor Green
$Findings | Format-Table -AutoSize

Response Priorities

Immediate (0–4 hours)

  • Inventory and isolate: enumerate every TACACS+ server and every network device with an integrated AAA daemon. Restrict TCP/49 access to authorized network-device management subnets only — at the firewall/ACL level, not just configuration intent.
  • Patch or mitigate: apply vendor fixes for CVE-2026-48842, CVE-2026-42542, and CVE-2026-87902. Where patches are unavailable, apply compensating controls: TCP/49 ACLs, management-plane VRF isolation, and disabling TACACS+ exposure on untrusted interfaces.
  • Hunt: run the KQL query and PowerShell hunt pack against AAA servers. Review Zeek/Suricata telemetry for TCP/49 from non-device sources in the last 30 days.
  • Do not action third-party.com as a blocklist entry without internal telemetry confirmation — treat it as contextual reporting metadata.

24 Hours

  • Credential reset — full scope. Because TACACS+ compromise enables interception of device administrator credentials, rotate all network device enable passwords, AAA service accounts, and any credentials that transited TACACS+ in the exposure window. Assume harvested.
  • Audit AAA accounting logs for gaps, suppressed records, or authentication events from unrecognized source IPs — Salt Typhoon tradecraft includes disabling accounting to blind audit trails.
  • Verify device configurations on routers/switches against known-good baselines: look for rogue local accounts, modified ACLs, new SNMP community strings, or unauthorized TACACS+ server entries pointing to attacker infrastructure.

1 Week

  • Architecture hardening: migrate the AAA control plane into a dedicated, segmented management network with strict ingress/egress filtering. No TACACS+ traffic should be reachable from user segments or the internet — ever.
  • Deploy persistent network-layer detection: Zeek TACACS+ logging, Sigma rules tuned to your authorized subnets, and alerting on any AAA daemon child-process execution.
  • Threat-model the management plane: this vulnerability class demonstrates that network authentication infrastructure is a primary APT target. Extend EDR/syslog coverage to network appliances, establish configuration-drift monitoring, and conduct a purple-team exercise simulating pre-auth exploitation of AAA services.
  • Vendor management: confirm patch timelines with Cisco and other network OS vendors; track Elttam's technical disclosure for exploit mechanics to refine detection logic.

Related Resources

Security Arsenal Incident Response Managed SOC & MDR Services AlertMonitor Threat Detection From The Dark Side Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.