Skip to main content

SOCFortress CoPilot EUVDEUVD-2026-113995

| CVE-2026-61730 CRITICAL
Information Exposure (CWE-200)
2026-10-30 GitHub_M
9.3
CVSS 3.1 · Vendor: GitHub_M
View

Attack ChainAIDerived

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

  1. Access
    Reach CoPilot host over network
  2. Delivery
    Request predictable /scoutsuite-report file paths
  3. Exploit
    Retrieve GCP service-account key during active scan
  4. Execution
    Authenticate to victim GCP project
  5. Impact
    Exfiltrate cloud data and posture reports

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V14 - Data Protection Data exposure prevention
MITRE ATT&CK

2 techniques across 2 tactics: Collection, Discovery

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

Exploitation Conditions

Two distinct conditions apply. For theft of the GCP service-account key: an admin/analyst-initiated GCP scan must be in progress, because generate_gcp_report_background writes the uploaded key into the web-served scoutsuite-report directory and deletes it only after the scan completes, leaving it readable at /scoutsuite-report/<uploaded-filename> for the scan duration (the endpoint itself describes this as 'a few minutes'). For cloud-posture disclosure: at least one generated ScoutSuite report (HTML and scoutsuite-results/scoutsuite_results_<name>.js) must exist in that directory, and names are guessable from caller-selected names with predictable defaults (aws-report/gcp-report). No authentication, no user interaction, and no special client capability are required - network reachability to the host is the only access prerequisite (AV:N/AC:L/PR:N/UI:N). Limiting factors that reduce realistic exposure: key theft is time-bounded to active scan windows, and report disclosure requires that a scan report has been generated and retained.

Impact

All available signals point the same direction and support the input's act_now decision. The CVSS 3.1 vector (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H) is internally consistent with the mechanism: an unauthenticated StaticFiles mount serves files to any network client with no privileges or user interaction, and the scope change (S:C) is well justified because a leaked Google service-account key grants access to a separate cloud environment beyond the vulnerable host. The GHSA advisory supplies a live, step-by-step curl proof-of-concept confirmed against the published ghcr.io/socfortress/copilot-backend:latest image, so the issue is demonstrated as real and trivially reproducible, not theoretical. No EPSS probability and no CISA KEV status were provided in the input, and the product is not listed in KEV; absence of those signals does not lower the severity but does suggest this is a targeted/low-volume risk rather than mass-scanned internet-wide exploitation, consistent with the product's limited footprint. This is a genuine high priority for any organization running CoPilot - not a high-CVSS-but-low-real-risk case - because it enables unauthenticated theft of a live cloud credential plus full cloud-posture disclosure. One caveat: the input's integrity rating (I:L) is not explained by the sources, and the credential-theft path is time-bounded to active scan windows, so realistic exposure depends on whether GCP scans are run and whether reports are retained.

Exploit ScenarioDerived

An unauthenticated attacker who can reach the CoPilot host requests files under the public /scoutsuite-report mount using predictable report names (defaults aws-report/gcp-report). While an admin- or analyst-initiated GCP scan is running, the attacker downloads the uploaded Google service-account JSON key at /scoutsuite-report/<filename> and uses it to act with the service account's GCP permissions, and separately reads retained AWS/Azure/GCP posture reports as an attack roadmap. A working curl-based proof-of-concept for exactly this is published in the GHSA advisory and confirmed live against the official container image.

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

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

Alert me

AnalysisAIv1 – Oct 30, 2026

Unauthenticated disclosure of cloud credentials and audit data in SOCFortress CoPilot stems from the /scoutsuite-report StaticFiles mount, which bypasses the JWT protection applied to every /api/... route. During an admin- or analyst-initiated GCP scan, the platform writes the uploaded Google service-account JSON key into that web-served directory and deletes it only after the scan finishes, so any remote client that can reach the host can fetch the live private key at a predictable path for the scan duration; retained ScoutSuite HTML and scoutsuite_results_<name>.js files are likewise readable and expose AWS, Azure and GCP IAM principals, resource inventories, misconfigurations and findings. No authentication, user interaction or special capability is required (CVSS 3.1: AV:N/AC:L/PR:N/UI:N/S:C, score 9.3), and the advisory ships a reproduction confirmed against the published ghcr.io/socfortress/copilot-backend:latest image; realistic exposure is bounded by the need for an active scan window (key theft) or a retained report (posture disclosure). SOCFortress released credential isolation in v0.1.77, but a release fully remediating the report-disclosure component has not been established.

RemediationAI

Upgrade to CoPilot 0.1.77, which contains the credential-isolation fix: per PR https://github.com/socfortress/CoPilot/pull/940 and commit bfa630b65d554670c7462a32ce6fd4e3cbd0254c, the GCP service-account key is now written to a private tempfile.mkdtemp(prefix="scoutsuite-gcp-cred-") directory outside the web root under a generated filename (gcp-service-account.json, also removing caller-controlled filename path traversal), and generate_gcp_report_background deletes the whole temporary directory in a finally block via shutil.rmtree, so the key no longer lingers if the scan fails. Because a release fully remediating the report-disclosure component has not been established, also apply the advisory's guidance for app.mount("/scoutsuite-report", StaticFiles(...)) in backend/copilot.py:236-239 by hand for versions at or above 0.1.77: remove the unauthenticated mount and serve reports through an authenticated, customer-scoped streaming endpoint (as the data-store download routes already do), or relocate the report directory outside the web root, and give reports unguessable names. Compensating controls until both parts are addressed: block or password-protect the /scoutsuite-report path at the reverse proxy or ingress - the trade-off is that in-product report viewing through that path stops working, and if a proxy auth layer is used it must also cover /scoutsuite-results files embedded by the HTML reports - and suspend GCP scans on unpatched instances, since the key is only exposed while a scan is running. Restrict network reachability to the CoPilot backend to trusted operators as a secondary measure, noting that this narrows but does not remove the anonymous-access window.

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

CoPilot is a Python web backend (FastAPI/Starlette) that mounts its working directory's scoutsuite-report folder as a public static file route in backend/copilot.py:236-239. Starlette StaticFiles mounts carry no router authentication dependency, so files under the mount are served to anonymous clients regardless of the JWT enforcement applied to API routes. The root cause class is CWE-200 exposure of sensitive information, and the advisory additionally classifies it as CWE-306 (missing authentication for critical function), CWE-522 (insufficiently protected credentials) and CWE-552 (files or directories accessible to external parties). In backend/app/integrations/scoutsuite/routes/scoutsuite.py, the GCP report endpoint saves the uploaded service-account key into os.path.join(os.getcwd(), 'scoutsuite-report') - the same mounted directory - using the caller-supplied filename, so the URL is predictable; generate_gcp_report_background in the services module invokes the ScoutSuite scan via run_command_in_background and removed the key only after that command returned. Report names derive from a caller-chosen report_name with defaults aws-report/gcp-report, so /scoutsuite-report/<name>.html is trivially guessable. The trigger is a filesystem/route configuration issue rather than a parsing or memory-safety bug: the flaw manifests whenever the static path is requested, with the credential variant additionally requiring an in-progress GCP scan and the posture variant requiring a previously generated, retained report.

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 9.3 CRITICAL
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N
vuln.today AI 9.3 CRITICAL

Unauthenticated StaticFiles mount reachable over the network (AV:N/AC:L/PR:N/UI:N); scope change (S:C) because the leaked GCP key grants access to a separate cloud account; disclosure gives C:H with limited downstream integrity (I:L).

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

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
Low
Availability
None

Lifecycle Timeline

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

DescriptionCVE.org

SOCFortress CoPilot focuses on providing a single pane of glass for all your security operations needs. In affected deployments, the unauthenticated /scoutsuite-report StaticFiles mount in backend/copilot.py exposes the scoutsuite-report directory even though normal /api routes require JWT authentication. Generated HTML reports and scoutsuite-results/scoutsuite_results_<name>.js files disclose AWS, Azure and GCP IAM principals, resource inventories, misconfigurations and findings. Report names derive from caller-selected names with predictable defaults. During an admin- or analyst-initiated GCP scan, backend/app/integrations/scoutsuite/routes/scoutsuite.py saves the uploaded Google service-account JSON key into that same web-served directory. In backend/app/integrations/scoutsuite/services/scoutsuite.py, generate_gcp_report_background removes the key only after the scan finishes. Any anonymous client that can reach the host and request the file path can therefore retrieve the private key during the scan and use the service account's cloud permissions, as well as read retained cloud-security reports. Credential isolation is released in version 0.1.77; a release fully remediating the report-disclosure component has not been established.

Technical POC Analysis

CWE-200 / CWE-552: sensitive information exposure through an unauthenticated static file mount.

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

SOCFortress CoPilot contains a critical unauthenticated credential disclosure flaw (CVE-2026-61730) that exposes live Google cloud service-account keys and sensitive audit data for the duration of any GCP scan, with no authentication required. Because cloud credentials grant access to production environments, this vulnerability puts the entire multi-cloud estate (AWS, Azure, GCP) at risk of unauthorized access and data breach, necessitating immediate executive attention and remediation coordination.

Business Impact: Severe
Compensating Controls

Restrict network access to the CoPilot backend, disable GCP scanning, enforce authentication at a reverse proxy for the /scoutsuite-report path, rotate exposed credentials, and monitor logs for unauthorized access.

Threat Intelligence Overview

EPSS Score
0.4%
Top 69% exploitable
Prevalence
Low
niche open-source security-operations platform, limited production footprint
Social Media
1
Sightings
Data Quality
5 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.4%
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
Out-of-Cycle
Exploitation
None
System Exposure· derived
Open
Automatable
Yes
Human Impact
Very High
Technical Impact
Partial

Priority Score

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

Attack Technique

Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.

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