Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessReach CoPilot host over network
-
DeliveryRequest predictable /scoutsuite-report file paths
-
ExploitRetrieve GCP service-account key during active scan
-
ExecutionAuthenticate to victim GCP project
-
ImpactExfiltrate 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:L/A:N
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).
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.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
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.
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
Authentication bypass in SOCFortress CoPilot versions prior to 0.1.57 allows remote unauthenticated attackers to forge a
Arbitrary host file write as root in SOCFortress CoPilot prior to 0.1.77: the ScoutSuite GCP report upload endpoint acce
Stored cross-site scripting in SOCFortress CoPilot lets any authenticated portal user, including the lowest-privilege cu
Unauthenticated active-response invocation and alert injection affect SOCFortress CoPilot deployments prior to 0.1.76 th
Stored server-side template injection in SOCFortress CoPilot before 0.1.76 allows a customer_user - the lowest-privilege
Cross-tenant object-store writes in SOCFortress CoPilot before 0.1.76 let any authenticated customer_user (customer-port
Unauthenticated attackers can install detection-suppression rules in SOCFortress CoPilot deployments before 0.1.77 becau
Command injection in Microsoft Copilot allows an attacker to disclose confidential information when a victim invokes Cop
EUVD-2026-113995
NVD
CVE.org
EPSS
Vulnrichment
GitHub
Exploit-DB