Virtualizor BGP-Hijacked Update Compromise
Executive Summary
What happened: Virtualizor disclosed that an unauthorized BGP announcement diverted traffic for 162.55.80.0/24 from 28 August through 30 August 2026. During that interval an attacker obtained a technically valid TLS certificate and served a modified update through the trusted Virtualizor path. Because the update client did not cryptographically verify packages, a small number of installations accepted malicious content. Virtualizor could not produce a definitive affected-host list, so every operator whose server could update during the interval needs evidence-led review.
Observed tradecraft: A hosting provider independently reported malicious modifications on five of 34 inspected hypervisor nodes. Its captured evidence included modified Virtualizor files, a root SSH key, a new local account, a Java payload launched from a hidden JVM cache path, systemd persistence, and outbound communication to published infrastructure. That observation is valuable but remains one provider's first-hand dataset; it is not proof that every exposed server received the same artifacts or sequence.
Detection strategy: Detection should begin with product inventory and update-window reconstruction, then move to exact hashes, network pivots, hidden-path Java execution, suspicious Virtualizor/PHP child processes, Linux authentication evidence, and file-integrity comparison. Q02 is the strongest portable host-compromise query, Q03 is an exact infrastructure pivot, Q04 needs a maintenance baseline, and Q01 only identifies likely Virtualizor servers. Routing proof, package provenance, user creation, SSH authentication, and authorized-key changes remain separate telemetry requirements.
Operational consequence: A confirmed root compromise is not safely resolved by deleting the visible service or payload. The running process may survive service-file removal, credentials and host trust may be lost, and the hypervisor is a control point for guest workloads. Preserve volatile and update evidence first, restrict management and update paths, rotate exposed credentials through an approved sequence, and rebuild confirmed compromised hosts from trusted media. Prevention should prioritize signed update provenance, controlled update egress, independent route monitoring, and recoverable host baselines.
| Priority | Why now | Coverage delivered | Key limitation |
|---|---|---|---|
| Inventory every Virtualizor server, reconstruct the incident-window update path, preserve volatile evidence, and clean-rebuild any host whose root integrity cannot be established. | Critical privileged-infrastructure exposure with current technical reporting | 4 analyst-led CQL queries; 2 explicit telemetry gaps | Static review only; router/routing, update, AAA, or authentication semantics require non-portable telemetry |
Source and Claim Review
Current-run snapshots retain only sanitized plain-text evidence. Remote content was handled as untrusted data and no source-supplied command, code, or instruction was executed.
| ID | Publisher | Tier | Independence | Accessed | Status |
|---|---|---|---|---|---|
| S01 | Virtualizor / Softaculous | primary-vendor-incident-advisory | virtualizor-softaculous | 2026-09-03T11:03:12Z | complete-sanitized-excerpt |
| S02 | AlbaHost operator statement via LowEndTalk | primary-incident-responder-observation | albahost | 2026-09-03T11:03:12Z | complete-sanitized-excerpt |
| S03 | RIPE NCC | primary-routing-telemetry-documentation | ripe-ncc | 2026-09-03T11:03:12Z | complete-sanitized-excerpt |
| S04 | NIST | government-supply-chain-guidance | nist | 2026-09-03T11:03:12Z | complete-sanitized-excerpt |
Claim ledger
| Claim | Statement | Sources | Confidence | Caveat |
|---|---|---|---|---|
| C01 | Virtualizor confirmed that a malicious update package reached a small number of installations during the incident window. | S01 | high | no definitive affected-host list |
| C02 | An unauthorized announcement for 162.55.80.0/24 diverted update and client-area traffic between 2026-08-28 20:57 UTC and approximately 2026-08-30 06:10 UTC. | S01, S03 | high | RIPE source supports the measurement method; incident interpretation is vendor-supplied |
| C03 | The attacker obtained a technically valid TLS certificate during the routing diversion, so affected connections did not necessarily show certificate warnings. | S01 | high | none |
| C04 | The update client did not cryptographically verify packages, allowing a modified package to be accepted during the diversion. | S01 | high | package-signing remediation remained future work in the incident advisory |
| C05 | Virtualizor could not produce a definitive affected-server list and directed every operator to perform checks. | S01 | high | none |
| C06 | An affected hosting provider reported 5 of 34 inspected hypervisor nodes contained the malicious modifications. | S02 | medium | single provider's firsthand account |
| C07 | The provider observed modified Virtualizor files, an unauthorized root SSH key, Java payload execution, systemd persistence, and an unauthorized local account. | S02 | medium | firsthand observation from one provider |
| C08 | The provider captured the malicious Java process connected to 31.77.220.138:2025 and reported a proxyuser SSH login from 193.32.127.248. | S02 | medium | firsthand observation from one provider |
| C09 | The systemd service used Restart=always and could leave a running Java process after the service file was removed. | S02 | medium | host-specific observation |
| C10 | Confirmed root compromise cannot be remediated confidently by deleting the published artifacts alone; the affected provider recommends a clean rebuild. | S02 | medium | incident-response judgment from the reporting provider |
| C11 | NIST supply-chain guidance supports provenance, integrity verification, supplier risk management, and incident-response controls for software updates. | S04 | high | general authority, not incident evidence |
Hunt Brief and Attack Chain
Hypotheses are separated into endpoint hunts and explicit evidence gaps; attribution beyond the cited sources is not inferred.
| Step | Claims | Behavior | Platform | Goal |
|---|---|---|---|---|
| 1 | C02, C03, C04 | BGP diversion placed an attacker-controlled server in the Virtualizor update path with a valid TLS certificate | network and software supply chain | verify incident-window exposure from routing and update logs |
| 2 | C01, C04, C05 | a malicious Virtualizor update package was accepted by some installations | Virtualizor application | identify hosts that updated during the diversion and compare product integrity |
| 3 | C07, C09 | modified product files launched a Java payload and systemd persistence as root | Linux hypervisor host | find hidden-path Java execution, persistence, and service ancestry |
| 4 | C07, C08 | the compromise added SSH access, created proxyuser, and established interactive access | Linux hypervisor host | correlate host changes and authentication evidence |
| 5 | C08 | the Java payload communicated with published C2 infrastructure | Linux hypervisor host | identify exact infrastructure matches and process context |
Hypotheses
| ID | Behavior | Telemetry | Use | Lookback | Validation |
|---|---|---|---|---|---|
| H01 | Virtualizor product process inventory | ProcessRollup2 | inventory | 30d — includes the incident window and establishes product presence | Run on an owner-confirmed Virtualizor host and a non-Virtualizor Linux host; verify result fields and expected contrast. |
| H02 | hidden-cache Java payload execution and systemd persistence | ProcessRollup2 | hunt | 14d — covers the incident and response period | Replay only a benign lab service with a different inert JAR name, then test the exact string against a safely created process record; confirm no production execution is required. |
| H03 | connection to provider-observed C2 addresses | NetworkConnectIP4 | hunt | 14d — covers the incident and response period | Validate with a synthetic event fixture or approved replay in an isolated test repository; do not connect to the published infrastructure. |
| H04 | suspicious child process from Virtualizor or PHP service context | ProcessRollup2 | hunt | 30d — supports incident scoping and baseline comparison | Run unfiltered on a clean owner-confirmed Virtualizor host, document recurring maintenance children, then safely replay a benign echo command through a lab PHP parent. |
| H05 | unauthorized local account and SSH access | Linux authentication/audit repository | gap | 30d — includes compromise and response | Confirm which Linux auth/audit data is ingested, then validate against a benign test account in an isolated system. |
| H06 | incident-window update and route exposure | Virtualizor update logs and routing telemetry | gap | 2026-08-28 20:57Z through 2026-08-30 06:10Z | Compare preserved update logs to RIPE routing snapshots and vendor-published known-good package records; endpoint telemetry alone is insufficient. |
Affected surface and telemetry
Surface: Softaculous Virtualizor hypervisor control panel and update channel. Exposure: root context on Virtualizor hypervisor hosts; client/billing sessions traversing the affected range. Endpoint events cover only the documented process and IPv4 network views; the remaining platform evidence requires the named routing, product, authentication, AAA, configuration, or forensic repositories.
Coverage boundaries
- No portable Falcon event proves BGP diversion, TLS certificate issuance, or update-package provenance.
- Linux user creation, SSH authentication, and authorized_keys changes require tenant-specific audit/auth ingestion.
- File-write telemetry for PHP and service files is not assumed; integrity comparison is required.
- IPv6 network coverage is not supplied because the published indicators are IPv4 and no documented IPv6 behavior exists.
Consolidated IOC Table
Atomic values are transcribed only from current-run hashed source snapshots. Exact matches are retrospective evidence, not proof of maliciousness or authorization to block.
| ID | Type | Value | Context | Sources | Confidence | Action |
|---|---|---|---|---|---|---|
| I01 | sha256 | b81a4e1fab9fc4e404d57224fe71e2c143aa93942bd46998789bdc944a7870c7 | Java payload reported by vendor and provider | S01, S02 | high | detect |
| I02 | domain | cdn.nerat.cc | payload download domain | S01, S02 | high | detect |
| I03 | domain | connect.ne-rat.xyz | vendor-published C2 domain | S01 | medium | detect |
| I04 | ipv4 | 193.32.127.248 | source of reported proxyuser SSH login | S02 | medium | hunt |
| I05 | ipv4 | 31.77.220.138 | destination of reported Java connection on TCP 2025 | S02 | medium | hunt |
ATT&CK Mapping
ATT&CK mappings are analyst inferences from source-backed behavior, not vendor attribution statements.
| Tactic | Technique | Name | Behavior | Basis | Sources | Claims |
|---|---|---|---|---|---|---|
| Initial Access | T1195.002 | Compromise Software Supply Chain | a malicious package is delivered through the trusted Virtualizor update path | analyst inference | S01 | C01, C02, C04 |
| Persistence | T1543.002 | System Services: Systemd Service | a root-owned Java service persists the payload | analyst inference | S02 | C07 |
| Persistence | T1098.004 | Account Manipulation: SSH Authorized Keys | an attacker-controlled SSH key is added to root authorized keys | analyst inference | S02 | C07 |
| Persistence | T1136.001 | Create Account: Local Account | proxyuser is created and used for SSH access | analyst inference | S02 | C07, C08 |
| Command and Control | T1071 | Application Layer Protocol | the Java payload maintains outbound C2 connectivity | analyst inference | S02 | C08 |
Native / Non-CQL Hunts
These non-CQL hunts close the most important evidence gaps and should be correlated with the endpoint results.
| Hunt | Log source | Logic | Response |
|---|---|---|---|
| Update-window reconstruction | Virtualizor update logs, proxy/DNS logs, and routing records | Find completed update activity during 2026-08-28 20:57Z–2026-08-30 06:10Z; bind it to requested endpoints, package digests, and route history. | Preserve raw records and package copies; escalate mismatched provenance or incident-window completion. |
| Linux identity and SSH review | auth.log/secure, auditd, account files, and authorized_keys integrity | Review proxyuser creation/login, root key additions, unexpected privileged access, and source 193.32.127.248. | Preserve logs and keys before credential rotation; correlate with process and network evidence. |
| Product and host integrity | Virtualizor installation, service units, filesystem, memory | Compare product files and service definitions with trusted media; acquire the reported Java process and hidden cache path. | Clean-rebuild when root trust cannot be established; do not rely on deleting published artifacts. |
CrowdStrike LogScale CQL Hunt Queries
All queries are STATIC-ONLY. Validate event population, fields, semantics, and volume in the intended repository before operational use.
Looks for: Linux process events whose image or command line references /usr/local/virtualizor. Accomplishes: establishes which endpoints likely host the product so the incident-specific hunts can be scoped; it is inventory, not evidence of compromise.
// HUNT: Inventory processes associated with Virtualizor installation paths // HYPOTHESIS: H01 // USE: inventory // MITRE: N/A — inventory // CONF: low // FP: high // COST: medium // TIMEFRAME: 30d — includes the incident window and establishes product presence // REQUIRES: ProcessRollup2 with ImageFileName, CommandLine, ComputerName, UserName, SHA256HashData // FALSE POSITIVES: every legitimate Virtualizor process, update, backup, and administrator maintenance task // TUNING: scope to Linux server groups and compare returned hosts with the application owner's inventory // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 2592000000) | (ImageFileName = /\/usr\/local\/virtualizor\//i or CommandLine = /\/usr\/local\/virtualizor\//i) | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData]) | sort(@timestamp, order=desc, limit=1000)
Looks for: Java launched with the reported hidden cache payload or service marker. Accomplishes: catches the root persistence and payload-execution stage with a durable path signal, while retaining process context for containment decisions.
// HUNT: Java payload or service marker associated with Virtualizor malicious update persistence // HYPOTHESIS: H02 // USE: hunt // MITRE: T1543.002 // CONF: high // FP: medium // COST: low // TIMEFRAME: 14d — covers the incident and immediate response period // REQUIRES: ProcessRollup2 with ImageFileName, CommandLine, ParentBaseFileName, UserName, SHA256HashData // FALSE POSITIVES: internal testing or legitimate Java services deliberately using the same cache path or incident strings // TUNING: exclude only documented security-test hosts and approved fixture hashes after owner review // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 1209600000) | (CommandLine = /jre-runtime\.dat|java-jre-update\.service/i or ImageFileName = /\/usr\/lib\/jvm\/\.cache\//i) | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData]) | sort(@timestamp, order=desc, limit=1000)
Looks for: outbound IPv4 connections to the two provider-published incident addresses, preserving port and process context. Accomplishes: provides a narrow retrospective pivot for the C2 and SSH-access stage without making live contact with hostile infrastructure.
// HUNT: Connections to provider-observed Virtualizor compromise infrastructure // HYPOTHESIS: H03 // USE: hunt // MITRE: T1071 // CONF: medium // FP: medium // COST: low // TIMEFRAME: 14d — covers the incident and immediate response period // REQUIRES: NetworkConnectIP4 with ComputerName, ContextBaseFileName, ContextProcessId, RemoteAddressIP4, RemotePort // FALSE POSITIVES: security research, scanner traffic, sinkholing, or later reuse of the same addresses // TUNING: exclude documented research sensors and require corroborating process, authentication, or file-integrity evidence // VALIDATION: STATIC-ONLY #event_simpleName = NetworkConnectIP4 | test(@timestamp >= now() - 1209600000) | (RemoteAddressIP4 = "31.77.220.138" or RemoteAddressIP4 = "193.32.127.248") | table([@timestamp, ComputerName, ContextBaseFileName, ContextProcessId, LocalAddressIP4, RemoteAddressIP4, RemotePort]) | sort(@timestamp, order=desc, limit=1000)
Looks for: shell, download, Java, account, or service utilities tied to PHP, Virtualizor ancestry, or Virtualizor paths. Accomplishes: finds post-update root activity that may survive IOC rotation, but needs maintenance baselines before escalation.
// HUNT: Suspicious utility execution tied to Virtualizor or PHP service context // HYPOTHESIS: H04 // USE: hunt // MITRE: T1059.004 // CONF: medium // FP: high // COST: medium // TIMEFRAME: 30d — supports incident scoping and maintenance-baseline comparison // REQUIRES: ProcessRollup2 with two-generation ancestry, ImageFileName, CommandLine, UserName // FALSE POSITIVES: legitimate updates, backups, package management, administrator support, and monitoring tasks // TUNING: scope to confirmed Virtualizor hosts and exclude owner-approved maintenance command lines, users, and time windows // VALIDATION: STATIC-ONLY #event_simpleName = ProcessRollup2 | test(@timestamp >= now() - 2592000000) | FileName = /^(?:sh|bash|curl|wget|java|useradd|usermod|systemctl)$/i | (ParentBaseFileName = /^(?:php|php-fpm|zzvirtservice|virtualizor)$/i or GrandparentBaseFileName = /^(?:php|php-fpm|zzvirtservice|virtualizor)$/i or CommandLine = /\/usr\/local\/virtualizor\//i) | table([@timestamp, ComputerName, UserName, ParentBaseFileName, GrandparentBaseFileName, FileName, ImageFileName, CommandLine, SHA256HashData]) | sort(@timestamp, order=desc, limit=1000)
Operationalization and IOA Candidates
Every query remains hunt-only. No alert package or Custom IOA is produced without tenant parse evidence, positive and benign tests, a measured baseline, routing, ownership, SLA, and rollback.
| Alert | Query | Use | Decision | Readiness | Rationale |
|---|---|---|---|---|---|
| A01 | Q01 | inventory | hunt-only | design-only | Inventory queries do not represent threat alerts and remain analyst-invoked. |
| A02 | Q02 | hunt | hunt-only | design-only | Static-only query with no tenant parse, measured benign baseline, positive test, cadence, suppression, route, owner, or SLA evidence. |
| A03 | Q03 | hunt | hunt-only | design-only | Static-only query with no tenant parse, measured benign baseline, positive test, cadence, suppression, route, owner, or SLA evidence. |
| A04 | Q04 | hunt | hunt-only | design-only | Static-only query with no tenant parse, measured benign baseline, positive test, cadence, suppression, route, owner, or SLA evidence. |
Machine-Readable IOC Appendix
Review expiration, infrastructure reuse, laboratory handling, and local authorization before operational use. Do not contact published infrastructure.
b81a4e1fab9fc4e404d57224fe71e2c143aa93942bd46998789bdc944a7870c7
cdn.nerat.cc connect.ne-rat.xyz
193.32.127.248 31.77.220.138
type,value,action,severity,expiration,description,tags sha256,b81a4e1fab9fc4e404d57224fe71e2c143aa93942bd46998789bdc944a7870c7,detect,high,review-2026-10-03,Java payload reported by vendor and provider,source:S01 source:S02 domain,cdn.nerat.cc,detect,high,review-2026-10-03,payload download domain,source:S01 source:S02 domain,connect.ne-rat.xyz,detect,medium,review-2026-10-03,vendor-published C2 domain,source:S01 ipv4,193.32.127.248,hunt,medium,review-2026-10-03,source of reported proxyuser SSH login,source:S02 ipv4,31.77.220.138,hunt,medium,review-2026-10-03,destination of reported Java connection on TCP 2025,source:S02
Hardening — Tiered and Deployable
- Verify every Virtualizor server and current security-analyzer result (CTRL01) — Inventory every Virtualizor master and hypervisor; record running version, update history for 2026-08-28 20:57Z through 2026-08-30 06:10Z, and the vendor security-analyzer result without deleting findings. deployable-design Verify: Application owner compares inventory, version, update timestamps, and analyzer result to the incident window. Expected: Every in-scope node has an owner, recorded version/update history, and retained analyzer output. Rollback: Restore only the collection configuration changed for the audit; do not delete retained evidence. Authority: S01 · Virtualizor incident advisory, 2026-08-31.
- Quarantine confirmed root-compromised hosts behind a continuity gate (CTRL02) — After preserving volatile and disk evidence, remove the node from management and customer control paths, block its management egress, migrate or restore workloads through the approved continuity plan, and rebuild the host from known-good media. deployable-design Verify: Verify the rebuilt host against trusted image digests, current Virtualizor release, clean analyzer output, approved SSH keys/users, and expected network destinations. Expected: Rebuilt node has no incident indicators, only approved identities/services, and passes owner health checks before re-entry. Rollback: Keep the node out of service and restore workloads to the last known-good platform if verification fails; do not return the compromised installation. Authority: S01/S02 · Virtualizor advisory and provider observation, accessed 2026-09-03.
- Constrain API keys and administrative access (CTRL03) — Remove unrecognized keys and accounts; issue replacement API credentials scoped to required nodes and trusted source addresses; restrict SSH to approved bastions and phishing-resistant administrator authentication where supported. deployable-design Verify: Use read-only API, SSH, and account listings from an approved bastion and run dependent automation health checks. Expected: Only inventoried identities/keys remain, source restrictions are effective, and dependent jobs complete normally. Rollback: Re-enable only the previous documented credential/source rule for the affected integration, time-box it, and open an incident record. Authority: S01 · Virtualizor incident advisory, 2026-08-31.
- Allowlist management-plane egress and monitor update destinations (CTRL04) — Route management-plane HTTP(S) and update traffic through a monitored egress control; allow only reviewed vendor destinations and required services, while logging denied and newly seen destinations. deployable-design Verify: Compare flow logs before/after and perform a read-only update check against the approved endpoint list. Expected: Only approved destinations are reached and required management functions remain healthy. Rollback: Restore the previous reviewed egress policy for the pilot segment and retain denied-flow evidence for tuning. Authority: S01 · Virtualizor incident advisory, 2026-08-31.
- Require cryptographic provenance for privileged update channels (CTRL05) — Require suppliers to publish signed update metadata and documented verification; where the product lacks it, stage updates through a controlled repository with independently verified digests and block unattended direct-to-production retrieval. deployable-design Verify: Trace a test update from supplier metadata through staged artifact digest to installed version. Expected: Every privileged update has retained supplier provenance, independent digest verification, approval, and installed-version evidence. Rollback: Use the documented emergency-update exception with dual approval and retrospective verification; never bypass verification silently. Authority: S04 · NIST SP 800-161 Revision 1, 2022; accessed 2026-09-03.
- Baseline and alert on privileged product-file and service drift (CTRL06) — Generate a known-good manifest for Virtualizor core files and critical host configuration; send change events and periodic digest attestations to an independent collector; alert on unapproved drift. deployable-design Verify: Perform one approved file change in a lab copy and confirm the independent collector records old/new digests and change identity. Expected: Approved changes are attributable and unexpected drift produces a reviewable event without modifying the source host. Rollback: Restore the prior signed manifest only after verifying the underlying approved change; disable noisy rules rather than integrity collection. Authority: S04 · NIST SP 800-161 Revision 1, 2022; accessed 2026-09-03.
Deployable playbook · Incident-window exposure and integrity review
- Record owners and every Virtualizor master/hypervisor before changing state.
- Export update history, analyzer output, running processes, services, users, SSH keys, connections, and product-file digests; hash the exports.
- Pilot the review on one non-production or already isolated node and compare against the published incident window and indicators.
- If corroborated compromise exists, invoke the incident commander and workload continuity plan before isolation or rebuild.
- Verify known-good image digests, current product version, approved identities, clean analyzer result, and workload health before re-entry.
- Expand only after evidence capture and recovery steps succeed; otherwise keep nodes isolated and correct the procedure.
- Rollback means restoring workloads to the last known-good platform, not returning a compromised host to service.
- Retain evidence hashes, rebuild records, approvals, and owner sign-off.
Deployable playbook · Management credential and egress restriction pilot
- Capture current API keys, SSH keys, accounts, source restrictions, egress rules, and dependency owners.
- Confirm a tested break-glass path and health checks for update, licensing, backup, and orchestration workflows.
- Pilot replacement credentials and egress allowlisting on one non-critical management group.
- Verify only approved identities and destinations remain while dependent jobs complete.
- Expand by management ring after 24 hours of successful health and denied-flow review.
- If a critical integration fails, restore only its prior documented credential or rule, time-box the exception, and investigate.
- Retain before/after exports, flow samples, job evidence, and approval records.
Containment Runbook
| Phase | Trigger | Authority | Owner | Evidence | Recovery |
|---|---|---|---|---|---|
| 1 — Activate and preserve | Q02/Q03 hit, matching payload hash/service, unauthorized key/account, or product-file integrity failure | Incident commander | SOC and Linux forensics | Raw events, process tree, memory/process list, service files, payload hashes, connections, auth logs, update logs, product-file digests | No destructive action until volatile evidence and continuity state are recorded |
| 2 — Constrain management paths | Corroborated root persistence or interactive access | Incident commander plus virtualization owner | Network and virtualization teams | Isolation rule, active sessions, workload map, API/SSH key inventory | Maintain workload access through tested alternate management path; stop if customer continuity cannot be preserved |
| 3 — Replace exposed trust | Evidence capture complete and dependencies mapped | Identity and platform change control | Identity, virtualization, and application owners | Revoked/reissued keys, token metadata, account changes, dependency health | Restore one documented integration credential only under time-boxed exception if a critical service fails |
| 4 — Rebuild and restore | Confirmed root compromise or integrity cannot be established | Incident commander and service owner | Platform recovery team | Known-good image digest, rebuild log, restored workload manifests, verification results | Return only rebuilt, verified hosts; keep failed nodes isolated and restore workloads elsewhere |
| 5 — Close and re-hunt | All nodes inventoried, trust replaced, recovery checks pass, and no new evidence appears | Incident commander | Detection engineering and platform owner | 14-day Q02-Q04 re-hunt, clean analyzer records, integrity attestations, exception closure | Reopen containment on any new correlated hit or unexplained drift |
Continuity rule: preserve volatile evidence and verify alternate administration before isolation, reboot, credential replacement, device reload, or host rebuild.
Detection Coverage and Validation Evidence
Validation state: STATIC REVIEW PASSED after local structure/safety, maintained-field, CQL heuristic, provenance, and duplicate gates. This is not Falcon parsing, canary success, or deployment evidence.
| Technique | Coverage | Query / handoff | Evidence | Limitation |
|---|---|---|---|---|
| T1195.002 | Design | native evidence handoff | Source-backed behavior and non-CQL review | No portable endpoint query for this behavior |
| T1543.002 | Static | Q02 | Local static gates | Tenant parsing and baseline absent |
| T1098.004 | Design | native evidence handoff | Source-backed behavior and non-CQL review | No portable endpoint query for this behavior |
| T1136.001 | Design | native evidence handoff | Source-backed behavior and non-CQL review | No portable endpoint query for this behavior |
| T1071 | Static | Q03 | Local static gates | Tenant parsing and baseline absent |
| Telemetry gap | Gap | H05 | Documented design handoff | Portable endpoint schema for Linux account creation, SSH authentication, and authorized_keys writes is not assumed. |
| Telemetry gap | Gap | H06 | Documented design handoff | BGP path and Virtualizor update-package provenance require routing/application logs outside portable Falcon endpoint telemetry. |
Recorded evidence
- Every CQL card remains tenant-unverified and was not executed against Falcon.
- The offline tenant-validation dry run checks extraction and profile readiness only; it does not contact a tenant.
- IOC rows are bound to current hashed snapshots and require context before action.
- Next step: run each query manually in a safe one-hour window, confirm fields and semantics, then expand to the documented lookback.
Hunt Summary Ticket
TITLE: Virtualizor BGP-Hijacked Update Compromise hunt — v0.3 Draft SEVERITY: critical — privileged infrastructure or root trust may be compromised SCOPE: Softaculous Virtualizor hypervisor control panel and update channel; endpoint and independent infrastructure evidence HYPOTHESIS: H01 inventory; H02 hunt; H03 hunt; H04 hunt; H05 gap; H06 gap QUERIES RUN: Q01 inventory; Q02 hunt; Q03 hunt; Q04 hunt; no alert-candidate query DO FIRST: Run Q02 over 14 days on confirmed Virtualizor hosts, then correlate exact process evidence with the update window. FINDINGS: GAPS: No portable Falcon event proves BGP diversion, TLS certificate issuance, or update-package provenance.; Linux user creation, SSH authentication, and authorized_keys changes require tenant-specific audit/auth ingestion.; File-write telemetry for PHP and service files is not assumed; integrity comparison is required.; IPv6 network coverage is not supplied because the published indicators are IPv4 and no documented IPv6 behavior exists. ACTIONS: preserve evidence; validate queries; assign platform, network, identity, and recovery owners OWNER: Incident Response / SOC / Infrastructure Platform / Network Security VERSION: v0.3 Draft · 2026-09-04 · STATIC REVIEW PASSED
Changelog
References
| ID | Publisher | Edition/date | Accessed | Use | URL |
|---|---|---|---|---|---|
| S01 | Virtualizor / Softaculous | current cited edition | 2026-09-03T11:03:12Z | Incident timeline, update weakness, and vendor indicators | https://www.virtualizor.com/blog/security-incident-bgp-hijacking/ |
| S02 | AlbaHost operator statement via LowEndTalk | current cited edition | 2026-09-03T11:03:12Z | First-hand host evidence and indicators | https://lowendtalk.com/discussion/220625/urgent-virtualizor-compromised-31st-aug/p2 |
| S03 | RIPE NCC | current cited edition | 2026-09-03T11:03:12Z | Routing-telemetry method | https://stat.ripe.net/docs/data-api/api-endpoints/bgp-state/ |
| S04 | NIST | current cited edition | 2026-09-03T11:03:12Z | Software-supply-chain integrity authority | https://csrc.nist.gov/pubs/sp/800/161/r1/final |