Skip to main content

SOCFortress CoPilot CVE-2026-61738

| EUVDEUVD-2026-114001 CRITICAL
Path Traversal (CWE-22)
2026-10-30 GitHub_M
10.0
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain valid analyst/admin API token
  2. Delivery
    Craft valid GCP JSON body with traversal filename
  3. Exploit
    POST multipart to generate-gcp-report endpoint
  4. Execution
    Root-owned write to attacker-chosen host path
  5. Impact
    Overwrite module or drop cron job for RCE

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Path canonicalization, traversal prevention
MITRE ATT&CK

2 techniques across 2 tactics: Discovery, Collection

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires (1) a valid analyst- or admin-scoped bearer token, since the route is guarded by require_any_scope('admin','analyst') - it is NOT reachable unauthenticated despite the CVSS PR:N; (2) an uploaded body that passes GCPScoutSuiteJSON content validation (a syntactically valid GCP service-account JSON, trivial to supply); (3) a path-traversal payload placed in the multipart Content-Disposition filename, which Starlette does not sanitize; and (4) the backend running as root to write anywhere on the host - the default published ghcr.io image runs as root, maximizing impact. Affected versions are prior to 0.1.77. Limiting factors that reduce real-world risk below the raw 10.0: authentication is mandatory (analyst or admin), the uploaded content must validate as GCP JSON, and the arbitrary-write-to-RCE step depends on writing to an exploitable host path (cron directory, loaded Python module, startup script). Deployments that run the backend as a non-root user confine the write and prevent host-wide compromise.

Impact

This is a genuine act_now priority, not a high-CVSS-but-low-risk artifact: the GHSA advisory documents a concrete, confirmed-live arbitrary file write as root via unsanitized multipart filename in POST /api/scoutsuite/generate-gcp-report, trivially escalatable to RCE and full cross-tenant/connector-credential compromise. However, the signals conflict on one key point and must be stated plainly: the supplied CVSS 3.1 vector is AV:N/AC:L/PR:N/UI:N (unauthenticated), but the advisory and source show the route is guarded by require_any_scope('admin','analyst'), meaning a valid analyst- or admin-scoped token is actually required - so real-world exploitation is authenticated, and PR:N overstates reach; treat the practical privilege requirement as PR:L. The S:C/C:H/I:H/A:H and 10.0 score are justified by the root-level host write escaping the application sandbox. No EPSS score was provided (cannot gauge statistical exploitation probability), and the CVE is not indicated as present in CISA KEV, so there is no evidence of active in-the-wild exploitation despite the high severity. The mitigating factor - required admin/analyst authentication and a valid GCPScoutSuiteJSON body - narrows the threat to insiders or attackers who have already obtained operator credentials, but given that an analyst role (which should not have host access) suffices, and a working PoC is public, patching to 0.1.77 should be treated as urgent.

Exploit ScenarioDerived

An attacker holding a valid analyst or admin bearer token (an insider, or an operator whose token was phished/leaked) uploads a syntactically valid GCP service-account JSON to the GCP report endpoint while setting the multipart Content-Disposition filename to a path-traversal string such as ../../../../etc/cron.d/x. Because the backend runs as root and joins the raw filename without sanitization or a containment check, the content is written anywhere on the host, letting the attacker drop a cron job or overwrite an application Python module to achieve code execution. A public PoC with working curl commands, confirmed live by the researcher against the published ghcr.io image, is included in the GHSA advisory.

Act Now Prioritize within 24-48h. Why: CRITICAL severity.
Patch available 0.6% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 30, 2026

Arbitrary host file write as root in SOCFortress CoPilot prior to 0.1.77: the ScoutSuite GCP report upload endpoint accepts a caller-supplied multipart filename and joins it with os.path.join into the scoutsuite-report directory, so a '../'-laden filename escapes the intended folder and writes attacker-controlled bytes anywhere the backend process can reach. Exploitation requires a valid analyst- or admin-scoped bearer token (the assessed vector is PR:L, not the PR:N shown in the original CVSS string) plus an uploaded body that passes GCPScoutSuiteJSON content validation, which a syntactically valid GCP service-account JSON satisfies trivially; because the published backend image runs as root, writes land root-owned in /tmp and in the application source directory. A proof-of-concept documented as confirmed live against the published ghcr.io/socfortress/copilot-backend image is public, and escalation to code execution depends on choosing an exploitable destination such as a cron directory, a loaded Python module or a startup script; the advisory's broader claims of unrestricted-content and unconditional cross-tenant compromise are not established by the demonstrated primitive. The issue is rated act_now because a working write primitive with root privileges in a default deployment is a direct path to full platform and stored connector-credential compromise, though the mandatory authentication, JSON content validation and non-root deployment architecture are genuine limiting factors. No CISA KEV entry is associated with this CVE.

RemediationAI

Vendor-released patch: upgrade SOCFortress CoPilot to 0.1.77 (tag v0.1.77) or later, which stops the route from using the caller-supplied filename and instead writes the uploaded credential to a private tempfile.mkdtemp(prefix='scoutsuite-gcp-cred-') directory under the fixed server-generated name gcp-service-account.json, removing that directory in a finally block after the scan. The change is delivered through https://github.com/socfortress/CoPilot/pull/940 and https://github.com/socfortress/CoPilot/pull/941, with commits https://github.com/socfortress/CoPilot/commit/1881ef8d28bc7f45ffa88d7ba4fcca7302355508 and https://github.com/socfortress/CoPilot/commit/bfa630b65d554670c7462a32ce6fd4e3cbd0254c; the advisory is https://github.com/socfortress/CoPilot/security/advisories/GHSA-q3g8-3cf7-744f. If upgrading immediately is not possible, apply the vendor's compensating measures: stop running the backend as root so that any traversal write is confined to paths writable by an unprivileged user and cannot reach cron directories, loaded Python modules or startup scripts, and restrict the analyst and admin roles that can reach POST /api/scoutsuite/generate-gcp-report, since the endpoint is only usable with a valid analyst- or admin-scoped bearer token. Note that running the backend as non-root does not fix the traversal itself and that it trades away whatever privileged host operations the container currently performs, so validate the deployment after the change; per the vendor, sanitising or server-generating the on-disk filename and pinning the resolved path inside the intended directory are the complete fixes delivered in 0.1.77.

Affected VersionsENISA

CoPilot < 0.1.77

Affected Packages

euvd copilot fix: 0.1.77

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

The flaw is a classic CWE-22 path traversal in a Python/FastAPI (Starlette) service. Routes in backend/app/integrations/scoutsuite/routes/scoutsuite.py are guarded by Security(AuthHandler().require_any_scope('admin','analyst')), read the uploaded multipart file, validate only the CONTENT against a fixed GCPScoutSuiteJSON model via validate_json_data(), and then forward the raw file.filename taken from the Content-Disposition header to save_file_to_directory() in services/scoutsuite.py. That helper performs os.makedirs(directory, exist_ok=True) and file_path = os.path.join(directory, filename); os.path.join honours an absolute or traversal-containing second argument, and no basename normalisation, secure_filename call or resolved-path containment check (os.path.realpath plus commonpath) is applied. Starlette does not sanitise uploaded filenames, so the destination path is fully attacker-controlled while the file body must merely be well-formed GCP service-account JSON. Impact is magnified by the deployment context: the published ghcr.io/socfortress/copilot-backend image runs the backend as root with a working directory of /opt/copilot/backend, so writes can reach /tmp, the application source tree and system paths writable by root; non-root deployments confine the write to whatever that user can modify. The same codebase already handles the connector-upload route correctly with werkzeug.utils.secure_filename and an extension allow-list, which is the pattern the ScoutSuite route lacked. The upstream fix in PR 940 abandons caller filenames entirely, writing to a private tempfile.mkdtemp(prefix='scoutsuite-gcp-cred-') directory under a fixed server-generated name 'gcp-service-account.json', and also removes the credential in a finally block with shutil.rmtree, addressing a companion static-mount exposure tracked as GHSA-pm2w-mmc3-h8hc. The CPE cpe:2.3:a:socfortress:copilot:*:*:*:*:*:*:*:* records the product without version bounds, so version scoping must come from the advisory (prior to 0.1.77).

Know when Copilot gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (GitHub_M) PRIMARY 10.0 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
vuln.today AI 9.9 CRITICAL

Network-reachable HTTP endpoint with low complexity, but the route requires an analyst/admin token so PR:L (not PR:N); root host write escapes the app sandbox (S:C) yielding full C/I/A impact.

3.1 AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H

Primary rating from Vendor (GitHub_M).

CVSS VectorVendor: GitHub_M

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
Changed
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

2
Patch available
Oct 30, 2026 - 16:03 EUVD
CVE Published
Oct 30, 2026 - 14:36 cve.org
CRITICAL 10.0

DescriptionCVE.org

SOCFortress CoPilot focuses on providing a single pane of glass for all your security operations needs. Prior to 0.1.77, POST /api/scoutsuite/generate-gcp-report in backend/app/integrations/scoutsuite/routes/scoutsuite.py admits admin and analyst users and validates the uploaded content as GCPScoutSuiteJSON, but passes raw file.filename from the multipart header to save_file_to_directory in backend/app/integrations/scoutsuite/services/scoutsuite.py. The writer combines this filename with scoutsuite-report using os.path.join without sanitization or a resolved-path containment check. A traversal filename therefore writes the supplied JSON outside the intended report directory. In the reported root-running backend, the researcher demonstrated root-owned writes outside that directory and into the application source directory. This permits host-file overwrite subject to the accepted JSON-content constraint and can disrupt application operation; the demonstrated primitive does not establish unrestricted executable contents or unconditional cross-tenant confidentiality loss. Version 0.1.77 removes caller-controlled filenames from the affected route; unrestricted-content and direct-code-execution claims require separate curator reconciliation.

Technical POC Analysis

CWE-22: Improper Limitation of a Pathname to a Restricted Directory.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

CVE-2026-61738 is a critical arbitrary file write vulnerability in SOCFortress CoPilot (versions before 0.1.77) that allows an authenticated analyst to write attacker-controlled files as root, potentially leading to code execution. This could allow a compromised analyst account to escalate to full root control of the CoPilot backend, affecting the integrity and availability of security monitoring data and possibly the broader network. Leadership should prioritize immediate mitigation because the backend may run with elevated privileges and a public proof-of-concept is confirmed.

Business Impact: Severe
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations include: running the CoPilot backend as a non-root user; restricting the ScoutSuite GCP report upload endpoint to admin roles only; implementing filename validation to block path traversal sequences (e.g., '../'); monitoring file system writes to sensitive directories; and limiting network access to the CoPilot backend.

Threat Intelligence Overview

EPSS Score
0.6%
Top 53% exploitable
Prevalence
Low
niche open-source SOC platform, limited enterprise deployment footprint
Social Media
1
Sightings
Data Quality
4 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity CRITICAL
CISA KEV No
Public POC No
EPSS 0.6%
Patch available Yes
Active threat No
Deciding rule
CRITICAL severity
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Out-of-Cycle
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
Yes
Human Impact
Very High

Priority Score

51
Low Medium High Critical
KEV: 0
EPSS: +1
CVSS: +50
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Path traversal exploits occur when applications use user-controlled input to construct file system paths without proper validation.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy