From bff7d9dbbf937f7f92a616f575ba6f3385edaf09 Mon Sep 17 00:00:00 2001 From: Mike Swanson Date: Thu, 2 Apr 2026 19:20:43 -0700 Subject: [PATCH] sync: Auto-sync from DESKTOP-0O8A1RL at 2026-04-02 19:20:43 Synced files: - Session logs updated - Latest context and credentials - Command/directive updates Machine: DESKTOP-0O8A1RL Timestamp: 2026-04-02 19:20:43 Co-Authored-By: Claude Sonnet 4.5 --- .../2026-03-31-malware-incident-report.html | 559 ++++++++++++++++++ .../2026-03-31-malware-incident-report.md | 106 ++++ clients/ace-portables/reports/logo-light.png | Bin 0 -> 75792 bytes .../guru-rmm/dashboard/src/api/client.ts | 7 +- .../guru-rmm/dashboard/src/pages/History.tsx | 212 ++++++- .../guru-rmm/server/src/api/commands.rs | 97 +++ .../msp-tools/guru-rmm/server/src/api/mod.rs | 5 +- .../guru-rmm/server/src/db/commands.rs | 22 + 8 files changed, 981 insertions(+), 27 deletions(-) create mode 100644 clients/ace-portables/reports/2026-03-31-malware-incident-report.html create mode 100644 clients/ace-portables/reports/2026-03-31-malware-incident-report.md create mode 100644 clients/ace-portables/reports/logo-light.png diff --git a/clients/ace-portables/reports/2026-03-31-malware-incident-report.html b/clients/ace-portables/reports/2026-03-31-malware-incident-report.html new file mode 100644 index 0000000..d54d6fd --- /dev/null +++ b/clients/ace-portables/reports/2026-03-31-malware-incident-report.html @@ -0,0 +1,559 @@ + + + + + +Security Incident Report - Ace Portables - 31 March 2026 + + + +
+ + +
+
+ Arizona ComputerGuru +
Security Incident Report
+
+
+ Report Reference: ACE-SEC-2026-0331
+ Date: 31 March 2026
+ Prepared for: Ace Portables +
+
+ + +
+
+ +
+
+

ALL SYSTEMS VERIFIED CLEAN

+

Both workstations have been scanned, verified, and are actively protected by enterprise-grade endpoint security. No active threats detected.

+
+
+ + +
+ + +
+
Executive Summary
+

+ Ace Portables contacted AZ Computer Guru LLC after their financial institution requested verification that company workstations were free of malware. Upon investigation, we determined that the previously installed antivirus software (McAfee) had silently expired, leaving the machines unprotected. +

+

+ We removed the expired McAfee installation and deployed Bitdefender GravityZone, an enterprise-grade Endpoint Detection and Response (EDR) platform, across both company workstations. During the initial security scan, Bitdefender detected and automatically deleted a malicious browser extension containing a Trojan on one machine. Both machines have been fully scanned and are confirmed clean with no active threats. +

+
+ + +
+
Incident Timeline
+
+
+
Prior to Engagement
+
McAfee antivirus subscription silently expired, leaving workstations without active endpoint protection.
+
+
+
Engagement Initiated
+
Ace Portables contacted AZ Computer Guru LLC at the request of their bank to verify workstation security.
+
+
+
Remediation
+
Expired McAfee software removed. Bitdefender GravityZone EDR deployed on both workstations (DESKTOP-DV7I10S, DESKTOP-U317856).
+
+
+
25 March 2026, 11:15
+
Bitdefender detected and automatically deleted a Trojan (Trojan.GenericKD.77292516) within a malicious Microsoft Edge browser extension on one workstation.
+
+
+
31 March 2026
+
Full scans completed on both machines. Both verified clean. This report issued.
+
+
+
+ + +
+
Threat Details
+
+
+
Threat Classification
+
Trojan.GenericKD.77292516
+
+
+
Threat Type
+
Malware (Trojan)
+
+
+
Detection Date
+
25 March 2026, 11:15
+
+
+
Action Taken
+
Automatically Deleted
+
+
+
Affected Component
+
Microsoft Edge Browser Extension (background.js)
+
+
+
Extension ID
+
cfacibcmkcdppnkgennk...blmp
+
+
+
File SHA-256 Hash
+
B3F83B5EC4CFED5D93561B86B5A124FA88D2EA35491011D32CCDA3E385C036E1
+
+
+
+ + +
+
Workstation Scan Results
+

Both Ace Portables workstations were enrolled in Bitdefender GravityZone and scanned. Current status as of 31 March 2026:

+
+ + + + + + + + + + + + + + + + + + + + + + + +
Machine NameTypeManagementSecurity Status
DESKTOP-DV7I10SPhysical MachineManagedNo Issues
DESKTOP-U317856Physical MachineManagedNo Issues
+
+ + +
+
Remediation Actions Taken
+
    +
  • Removed expired antivirus software — McAfee, which had silently expired, was fully uninstalled from both workstations.
  • +
  • Deployed enterprise endpoint protection — Bitdefender GravityZone EDR was installed and configured on both machines, providing real-time threat monitoring, behavioral analysis, and automated response.
  • +
  • Malicious extension deleted — The Trojan-infected browser extension was automatically detected and removed by Bitdefender during the initial scan.
  • +
  • Extension blocked globally — The malicious extension has been added to our managed blocklist, preventing it from being installed on any endpoint under our management.
  • +
  • Full system scans completed — Comprehensive antimalware scans were run on both workstations. Both returned clean results with no further threats detected.
  • +
  • Password reset recommended — The affected user was advised to change passwords for all accounts accessed via the browser, prioritising financial and email accounts.
  • +
+
+ + +
+
Ongoing Protection
+

Both Ace Portables workstations are now continuously protected by Bitdefender GravityZone, which provides:

+
    +
  • Real-time file system protection — On-access scanning of all files as they are opened, created, or modified.
  • +
  • Advanced Threat Control — Behavioral monitoring that detects suspicious process activity in real time.
  • +
  • Network Attack Defense — Protection against network-based exploits and lateral movement attempts.
  • +
  • Web Threat Protection — Blocks access to known malicious, phishing, and fraudulent websites.
  • +
  • Anti-Exploit Technology — Detects and prevents exploitation of software vulnerabilities.
  • +
  • Centralised Management — All endpoints are monitored and managed through the GravityZone console by AZ Computer Guru LLC, ensuring policies and definitions remain current.
  • +
+
+ +
+ + +
+

+ Both Ace Portables workstations have been verified clean and are now actively protected by enterprise-grade endpoint security. The previously unprotected state caused by the expired McAfee subscription has been fully resolved. The detected Trojan was automatically removed before any confirmed data exfiltration occurred, and preventative measures are in place to block future threats. +

+

+ Should the bank require any additional information, technical logs, or further clarification, please do not hesitate to contact us using the details below. +

+
+ +
+ + + + +
+ + diff --git a/clients/ace-portables/reports/2026-03-31-malware-incident-report.md b/clients/ace-portables/reports/2026-03-31-malware-incident-report.md new file mode 100644 index 0000000..57b0d99 --- /dev/null +++ b/clients/ace-portables/reports/2026-03-31-malware-incident-report.md @@ -0,0 +1,106 @@ +# Security Incident Report - Malware Detection and Remediation + +**Prepared by:** AZ Computer Guru LLC +**Prepared for:** Ace Portables +**Date:** 31 March 2026 +**Report Reference:** ACE-SEC-2026-0331 + +--- + +## Executive Summary + +On 25 March 2026, our endpoint protection platform detected and automatically removed a malicious browser extension from a workstation belonging to Ace Portables. The threat was identified, quarantined, and deleted without user intervention. Additional preventative measures have been implemented across the managed environment to prevent recurrence. + +--- + +## Incident Details + +| Field | Detail | +|-------|--------| +| **Date of Detection** | 25 March 2026, 11:15 | +| **Affected Machine User** | John | +| **Threat Classification** | Trojan.GenericKD.77292516 | +| **Threat Type** | Malware (Trojan) | +| **Affected File** | `background.js` (browser extension component) | +| **File Location** | Microsoft Edge browser extension directory | +| **Extension ID** | cfacibcmkcdppnkgennkfaepplpkblmp | +| **File SHA256 Hash** | B3F83B5EC4CFED5D93561B86B5A124FA88D2EA35491011D32CCDA3E385C036E1 | + +--- + +## Detection and Response + +### Detection + +The threat was identified by **Bitdefender GravityZone**, our enterprise endpoint detection and response (EDR) platform, during a scheduled on-demand scan task. The malicious file was a JavaScript component (`background.js`) operating within a Microsoft Edge browser extension. + +### Automated Response + +Bitdefender GravityZone automatically took the following action upon detection: + +- **Action Taken:** File deleted +- **Detection Module:** Antimalware (On-Demand Scan) +- **Result:** Threat successfully removed from the system + +### Additional Remediation Steps + +The following manual remediation steps were performed by AZ Computer Guru LLC: + +1. **Extension removal verified** - Confirmed the malicious browser extension was fully removed from Microsoft Edge, including all associated files and registry entries. +2. **Extension blocked at policy level** - The malicious extension (ID: `cfacibcmkcdppnkgennkfaepplpkblmp`) has been added to the GravityZone extension blocklist, preventing installation across all managed endpoints company-wide. +3. **Full system scan completed** - A comprehensive antimalware scan was conducted on the affected workstation to confirm no additional threats or residual malicious components remain. +4. **Browser data review** - Edge browser settings were reviewed and restored to safe defaults where necessary. +5. **Password reset recommended** - The affected user was advised to change passwords for all accounts accessed via the browser as a precautionary measure, with priority given to financial and email accounts. + +--- + +## Current System Status + +**The affected workstation is confirmed CLEAN and free of malware.** Bitdefender GravityZone endpoint protection continues to actively monitor the system in real time with: + +- Real-time file system protection (on-access scanning) +- Network attack defense +- Web threat protection +- Advanced anti-exploit technology +- Behavioral monitoring (Advanced Threat Control) + +The GravityZone management console shows **no active threats** on the affected machine or any other Ace Portables endpoints. + +--- + +## Preventative Measures Implemented + +| Measure | Scope | Status | +|---------|-------|--------| +| Malicious extension added to blocklist | All managed client endpoints | Complete | +| Full system scan on affected workstation | Affected machine | Complete - Clean | +| User advised to reset browser passwords | Affected user | Advised | +| Ongoing real-time endpoint monitoring | All Ace Portables endpoints | Active | + +--- + +## About Our Security Platform + +AZ Computer Guru LLC utilises **Bitdefender GravityZone**, an enterprise-grade endpoint protection platform that provides: + +- Multi-layered malware detection (signature, heuristic, behavioural, and machine learning) +- Real-time threat monitoring and automated response +- Centralised management and policy enforcement +- Regular definition updates and cloud-based threat intelligence + +--- + +## Conclusion + +The malicious browser extension was detected promptly by our automated security systems, removed before any confirmed data exfiltration occurred, and blocked from future installation. The affected workstation has been verified clean and continues to be actively protected. No further action is required at this time. + +Should the bank require any additional information, technical logs, or clarification, please do not hesitate to contact us. + +--- + +**AZ Computer Guru LLC** +Managed IT Services Provider + +--- + +*This report is confidential and intended solely for the use of Ace Portables and their financial institution.* diff --git a/clients/ace-portables/reports/logo-light.png b/clients/ace-portables/reports/logo-light.png new file mode 100644 index 0000000000000000000000000000000000000000..3608e52e4dcd148c5579a19c657b5f66c05c3bc4 GIT binary patch literal 75792 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%0APvHjb9LN3!a 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 literal 0 HcmV?d00001 diff --git a/projects/msp-tools/guru-rmm/dashboard/src/api/client.ts b/projects/msp-tools/guru-rmm/dashboard/src/api/client.ts index 71794c1..4b72940 100644 --- a/projects/msp-tools/guru-rmm/dashboard/src/api/client.ts +++ b/projects/msp-tools/guru-rmm/dashboard/src/api/client.ts @@ -113,7 +113,7 @@ export interface Command { agent_id: string; command_type: string; command_text: string; - status: "pending" | "running" | "completed" | "failed"; + status: "pending" | "running" | "completed" | "failed" | "cancelled"; exit_code: number | null; stdout: string | null; stderr: string | null; @@ -219,6 +219,11 @@ export const commandsApi = { api.post(`/api/agents/${agentId}/command`, command), list: () => api.get("/api/commands"), get: (id: string) => api.get(`/api/commands/${id}`), + cancelCommand: (id: string) => + api.post<{ status: string; message: string }>(`/api/commands/${id}/cancel`), + deleteCommand: (id: string) => api.delete(`/api/commands/${id}`), + clearCommandHistory: () => + api.delete<{ deleted: number; message: string }>("/api/commands"), }; export const clientsApi = { diff --git a/projects/msp-tools/guru-rmm/dashboard/src/pages/History.tsx b/projects/msp-tools/guru-rmm/dashboard/src/pages/History.tsx index a69dc44..65a82c3 100644 --- a/projects/msp-tools/guru-rmm/dashboard/src/pages/History.tsx +++ b/projects/msp-tools/guru-rmm/dashboard/src/pages/History.tsx @@ -1,6 +1,17 @@ -import { useQuery } from "@tanstack/react-query"; +import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"; import { Link, useParams, useNavigate } from "react-router-dom"; -import { RefreshCw, CheckCircle, XCircle, Clock, Loader2, ArrowLeft, Terminal } from "lucide-react"; +import { + RefreshCw, + CheckCircle, + XCircle, + Clock, + Loader2, + ArrowLeft, + Terminal, + Trash2, + Ban, + StopCircle, +} from "lucide-react"; import { commandsApi, Command } from "../api/client"; import { Card, CardContent } from "../components/Card"; import { Button } from "../components/Button"; @@ -28,6 +39,11 @@ function StatusBadge({ status }: { status: Command["status"] }) { label: "Failed", className: "bg-rose-500/10 text-rose-400 border-rose-500/30", }, + cancelled: { + icon: Ban, + label: "Cancelled", + className: "bg-amber-500/10 text-amber-500 border-amber-500/30", + }, }; const { icon: Icon, label, className, spin } = config[status] as { @@ -62,12 +78,63 @@ function formatRelativeTime(dateString: string): string { } export function History() { + const queryClient = useQueryClient(); + const { data: commands = [], isLoading, refetch } = useQuery({ queryKey: ["commands"], queryFn: () => commandsApi.list().then((res) => res.data), refetchInterval: 10000, }); + const cancelMutation = useMutation({ + mutationFn: (id: string) => commandsApi.cancelCommand(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["commands"] }); + }, + onError: (error: Error) => { + alert(`Failed to cancel command: ${error.message}`); + }, + }); + + const deleteMutation = useMutation({ + mutationFn: (id: string) => commandsApi.deleteCommand(id), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["commands"] }); + }, + onError: (error: Error) => { + alert(`Failed to delete command: ${error.message}`); + }, + }); + + const clearHistoryMutation = useMutation({ + mutationFn: () => commandsApi.clearCommandHistory(), + onSuccess: (res) => { + queryClient.invalidateQueries({ queryKey: ["commands"] }); + const data = res.data; + if (data.deleted === 0) { + alert("No finished commands to clear."); + } + }, + onError: (error: Error) => { + alert(`Failed to clear history: ${error.message}`); + }, + }); + + const handleClearHistory = () => { + const finishedCount = commands.filter( + (cmd) => cmd.status === "completed" || cmd.status === "failed" || cmd.status === "cancelled" + ).length; + + if (finishedCount === 0) { + alert("No finished commands to clear."); + return; + } + + if (window.confirm(`Clear ${finishedCount} finished command(s) from history?`)) { + clearHistoryMutation.mutate(); + } + }; + return (
{/* Header */} @@ -76,15 +143,30 @@ export function History() {

History

Command execution log

- +
+ + +
{/* History List */} @@ -103,12 +185,14 @@ export function History() { ) : (
{commands.map((cmd: Command) => ( - -
+

@@ -118,18 +202,49 @@ export function History() { {cmd.command_type} | Agent: {cmd.agent_id.slice(0, 8)}...

-
-
-

- {formatRelativeTime(cmd.created_at)} -

- {cmd.exit_code !== null && ( -

- exit: {cmd.exit_code} + +

+
+

+ {formatRelativeTime(cmd.created_at)}

- )} + {cmd.exit_code !== null && ( +

+ exit: {cmd.exit_code} +

+ )} +
+ {/* Action buttons */} +
+ {(cmd.status === "pending" || cmd.status === "running") && ( + + )} + +
- +
))}
)} @@ -142,6 +257,7 @@ export function History() { export function HistoryDetail() { const { id } = useParams<{ id: string }>(); const navigate = useNavigate(); + const queryClient = useQueryClient(); const { data: commands = [], isLoading } = useQuery({ queryKey: ["commands"], @@ -150,6 +266,27 @@ export function HistoryDetail() { const command = commands.find((cmd: Command) => cmd.id === id); + const cancelMutation = useMutation({ + mutationFn: (cmdId: string) => commandsApi.cancelCommand(cmdId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["commands"] }); + }, + onError: (error: Error) => { + alert(`Failed to cancel command: ${error.message}`); + }, + }); + + const deleteMutation = useMutation({ + mutationFn: (cmdId: string) => commandsApi.deleteCommand(cmdId), + onSuccess: () => { + queryClient.invalidateQueries({ queryKey: ["commands"] }); + navigate("/history"); + }, + onError: (error: Error) => { + alert(`Failed to delete command: ${error.message}`); + }, + }); + if (isLoading) { return (
@@ -199,6 +336,33 @@ export function HistoryDetail() { {formatDate(command.created_at)}

+
+ {(command.status === "pending" || command.status === "running") && ( + + )} + +
{/* Command Info */} diff --git a/projects/msp-tools/guru-rmm/server/src/api/commands.rs b/projects/msp-tools/guru-rmm/server/src/api/commands.rs index 35fd6f5..34df06e 100644 --- a/projects/msp-tools/guru-rmm/server/src/api/commands.rs +++ b/projects/msp-tools/guru-rmm/server/src/api/commands.rs @@ -160,3 +160,100 @@ pub async fn get_command( Ok(Json(command)) } + +/// Delete a single command by ID +/// Requires authentication. +pub async fn delete_command( + State(state): State, + _user: AuthUser, + Path(command_id): Path, +) -> Result { + let deleted = db::delete_command(&state.db, command_id) + .await + .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()))?; + + if deleted { + Ok(StatusCode::NO_CONTENT) + } else { + Err((StatusCode::NOT_FOUND, "Command not found".to_string())) + } +} + +/// Cancel response payload +#[derive(Debug, Serialize)] +pub struct CancelCommandResponse { + pub status: String, + pub message: String, +} + +/// Cancel a pending or running command +/// Requires authentication. +pub async fn cancel_command( + State(state): State, + _user: AuthUser, + Path(command_id): Path, +) -> Result, (StatusCode, String)> { + let command = db::get_command_by_id(&state.db, command_id) + .await + .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()))? + .ok_or((StatusCode::NOT_FOUND, "Command not found".to_string()))?; + + match command.status.as_str() { + "completed" | "failed" | "cancelled" => { + return Err(( + StatusCode::BAD_REQUEST, + "Command already finished".to_string(), + )); + } + "running" => { + // Update status in DB + db::cancel_command(&state.db, command_id) + .await + .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()))?; + + // Optionally try to send a cancel signal via WebSocket + let agents = state.agents.read().await; + if agents.is_connected(&command.agent_id) { + let cancel_msg = ServerMessage::Error { + code: "command_cancelled".to_string(), + message: format!("Command {} has been cancelled", command_id), + }; + let _ = agents.send_to(&command.agent_id, cancel_msg).await; + } + } + _ => { + // Pending or any other status - just update DB + db::cancel_command(&state.db, command_id) + .await + .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()))?; + } + } + + Ok(Json(CancelCommandResponse { + status: "cancelled".to_string(), + message: "Command cancelled".to_string(), + })) +} + +/// Clear history response payload +#[derive(Debug, Serialize)] +pub struct ClearHistoryResponse { + pub deleted: u64, + pub message: String, +} + +/// Bulk clear finished commands (completed, failed, cancelled) +/// Requires authentication. +pub async fn clear_command_history( + State(state): State, + _user: AuthUser, +) -> Result, (StatusCode, String)> { + let count = db::delete_finished_commands(&state.db) + .await + .map_err(|e| (StatusCode::INTERNAL_SERVER_ERROR, e.to_string()))?; + + Ok(Json(ClearHistoryResponse { + deleted: count, + message: format!("Cleared {} commands from history", count), + })) +} diff --git a/projects/msp-tools/guru-rmm/server/src/api/mod.rs b/projects/msp-tools/guru-rmm/server/src/api/mod.rs index 52fc492..852ae7f 100644 --- a/projects/msp-tools/guru-rmm/server/src/api/mod.rs +++ b/projects/msp-tools/guru-rmm/server/src/api/mod.rs @@ -56,8 +56,9 @@ pub fn routes() -> Router { .route("/metrics/summary", get(metrics::get_summary)) // Commands .route("/agents/:id/command", post(commands::send_command)) - .route("/commands", get(commands::list_commands)) - .route("/commands/:id", get(commands::get_command)) + .route("/commands", get(commands::list_commands).delete(commands::clear_command_history)) + .route("/commands/:id", get(commands::get_command).delete(commands::delete_command)) + .route("/commands/:id/cancel", post(commands::cancel_command)) // Legacy Agent (PowerShell for 2008 R2) .route("/agent/register-legacy", post(agents::register_legacy)) .route("/agent/heartbeat", post(agents::heartbeat)) diff --git a/projects/msp-tools/guru-rmm/server/src/db/commands.rs b/projects/msp-tools/guru-rmm/server/src/db/commands.rs index 68b25d6..5ac20c9 100644 --- a/projects/msp-tools/guru-rmm/server/src/db/commands.rs +++ b/projects/msp-tools/guru-rmm/server/src/db/commands.rs @@ -161,3 +161,25 @@ pub async fn delete_command(pool: &PgPool, id: Uuid) -> Result 0) } + +/// Cancel a command - set status to 'cancelled' and set completed_at +pub async fn cancel_command(pool: &PgPool, id: Uuid) -> Result<(), sqlx::Error> { + sqlx::query( + "UPDATE commands SET status = 'cancelled', completed_at = NOW() WHERE id = $1", + ) + .bind(id) + .execute(pool) + .await?; + Ok(()) +} + +/// Delete all completed, failed, and cancelled commands (bulk clear) +/// Returns the count of deleted rows. +pub async fn delete_finished_commands(pool: &PgPool) -> Result { + let result = sqlx::query( + "DELETE FROM commands WHERE status IN ('completed', 'failed', 'cancelled')", + ) + .execute(pool) + .await?; + Ok(result.rows_affected()) +}