{"id":"BIT-rclone-2026-79782","revision":null,"records":[{"revision":"620bca238e6b4bffbf5fc03f54c4da40","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-79782","aliases":[],"title":"rclone before 1.74.4 Security Token Disclosure via HTTPS to HTTP Redirect","description":"rclone before 1.74.4 fails to strip the X-Amz-Security-Token header when an S3 redirect changes scheme from HTTPS to HTTP on the same host. Attackers can intercept plaintext HTTP traffic to capture AWS STS session tokens sent in request headers.","state":0,"publishedAt":"2026-08-25T15:16:11.136+00:00","modifiedAt":"2026-08-28T22:26:44.44+00:00","affected":[{"ecosystem":"Vendor product","name":"rclone","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"rclone\",\n                    \"product\": \"rclone\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"packageURL\": \"pkg:golang/github.com/rclone/rclone\",\n                    \"versions\": [\n                        {\n                            \"version\": \"0\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"semver\",\n                            \"lessThan\": \"1.74.4\"\n                        },\n                        {\n                            \"version\": \"1.74.4\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":9.3,"severity":"CRITICAL"},{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N","score":3.1,"severity":"LOW"}],"references":["https://github.com/rclone/rclone/security/advisories/GHSA-gx4c-2hqx-cw2r","https://www.vulncheck.com/advisories/rclone-before-security-token-disclosure-via-https-to-http-redirect"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-79782","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-79782","identifiers":["CVE-2026-79782"]},"retained":false,"historicalAffected":[]},{"revision":"55e27d698b4e47a4a232c0d6ea99d361","observedAt":"2026-11-11T16:10:00.367+00:00","statement":{"source":"euvd","id":"EUVD-2026-65540","aliases":["CVE-2026-79782","GHSA-mwgh-564g-j9ww"],"title":"rclone before 1.74.4 fails to strip the X-Amz-Security-Token header when an S3 redirect changes scheme from HTTPS to HTTP on the same host. Attackers can intercept plaintext HTTP traffic to capture AWS STS session tokens sent in request hea…","description":"rclone before 1.74.4 fails to strip the X-Amz-Security-Token header when an S3 redirect changes scheme from HTTPS to HTTP on the same host. Attackers can intercept plaintext HTTP traffic to capture AWS STS session tokens sent in request headers.","state":0,"publishedAt":null,"modifiedAt":null,"affected":[],"metrics":[{"system":"EUVD CVSS 4.0","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N","score":9.3,"severity":null}],"references":["https://github.com/rclone/rclone/security/advisories/GHSA-gx4c-2hqx-cw2r","https://www.vulncheck.com/advisories/rclone-before-security-token-disclosure-via-https-to-http-redirect"],"sourceUrl":"https://euvd.enisa.europa.eu/vulnerability/EUVD-2026-65540","license":"ENISA EUVD · source terms and attribution apply","enrichment":{"sourceStatus":null,"weaknesses":[],"productCriteria":[],"sourceDates":{"datePublished":"Aug 25, 2026, 3:16:11 PM","dateUpdated":"Aug 28, 2026, 10:26:44 PM"},"relatedAdvisories":[],"note":"EUVD source date text has no stated timezone and is retained without inventing a UTC instant. Related bulletin membership is not an alias, common cause or applicability claim. A missing vector with a zero score is treated as unrated. Complete vendor/product and underlying source evidence remains in the original JSON."},"key":"euvd:EUVD-2026-65540","identifiers":["EUVD-2026-65540","CVE-2026-79782","GHSA-mwgh-564g-j9ww"]},"retained":false,"historicalAffected":[]},{"revision":"4a35be95d8894fe3ad033034de03b4c9","observedAt":"2026-10-25T16:19:10.271+00:00","statement":{"source":"nvd","id":"CVE-2026-79782","aliases":[],"title":"rclone before 1.74.4 fails to strip the X-Amz-Security-Token header when an S3 redirect changes scheme from HTTPS to HTTP on the same host. Attackers can intercept plaintext HTTP traffic to capture AWS STS session tokens sent in request hea…","description":"rclone before 1.74.4 fails to strip the X-Amz-Security-Token header when an S3 redirect changes scheme from HTTPS to HTTP on the same host. Attackers can intercept plaintext HTTP traffic to capture AWS STS session tokens sent in request headers.","state":0,"publishedAt":"2026-08-25T16:17:30.217+00:00","modifiedAt":"2026-09-10T20:46:19.78+00:00","affected":[],"metrics":[{"system":"CVSS 4.0 · disclosure@vulncheck.com · Secondary","vector":"CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X","score":9.3,"severity":"CRITICAL"},{"system":"CVSS 3.1 · disclosure@vulncheck.com · Secondary","vector":"CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N","score":3.1,"severity":"LOW"}],"references":["https://github.com/rclone/rclone/security/advisories/GHSA-gx4c-2hqx-cw2r","https://www.vulncheck.com/advisories/rclone-before-security-token-disclosure-via-https-to-http-redirect"],"sourceUrl":"https://nvd.nist.gov/vuln/detail/CVE-2026-79782","license":"NIST NVD usage terms; underlying source attribution retained","enrichment":{"sourceStatus":"Awaiting Analysis","weaknesses":["CWE-319"],"productCriteria":[],"sourceDates":{"published":"2026-08-25T16:17:30.217","lastModified":"2026-09-10T20:46:19.780"},"relatedAdvisories":[],"note":"NVD analysis and CPE criteria are source context, not proof that a package or your environment is affected. Complete affected data, logical configurations and SSVC are retained in the original JSON."},"key":"nvd:CVE-2026-79782","identifiers":["CVE-2026-79782"]},"retained":false,"historicalAffected":[]},{"revision":"15bc8f412bcd45f084b36ca041105dde","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GHSA-gx4c-2hqx-cw2r","aliases":["BIT-rclone-2026-79782","CVE-2026-79782","GO-2026-6196"],"title":"rclone: S3 backend does not strip X-Amz-Security-Token on a same-host HTTPS->HTTP redirect","description":"## Vulnerability Details\n\n**File**: `backend/s3/s3.go`\n**Lines**: 1359-1380 (functions `s3CheckRedirect` / `s3RedirectCrossesHost`)\n\n### Root Cause\nCommit `e7b1eb774` (released in v1.74.3) added a `CheckRedirect` policy for\nthe S3 HTTP client whose purpose is to strip the `X-Amz-Security-Token`\nheader (the AWS STS session token) whenever a redirect chain \"crosses a\nhost\", so the token isn't forwarded to an unintended origin.\n\n`s3RedirectCrossesHost` decides this purely by comparing `url.URL.Host`\n(hostname[:port]); it never looks at `url.URL.Scheme`. A redirect that keeps\nthe exact same host:port but changes the scheme from `https://` to `http://`\ntherefore compares as \"same host\" and `X-Amz-Security-Token` is *not*\nstripped — it is sent again, this time over plaintext HTTP.\n\n```go\nfunc s3RedirectCrossesHost(req *http.Request, via []*http.Request) bool {\n\tif len(via) == 0 {\n\t\treturn false\n\t}\n\thost := via[0].URL.Host\n\tfor _, redirect := range via[1:] {\n\t\tif redirect.URL.Host != host {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn host != req.URL.Host\n}\n```\n\n### Attack Scenario\n1. The user configures an `s3` remote (or `--s3-endpoint` pointing at a\n   self-hosted/third-party S3-compatible service) using temporary\n   credentials that include an STS `session_token` (common for assumed-role\n   / CI / Kubernetes IRSA setups).\n2. The configured endpoint responds to a request with a 3xx redirect to the\n   *same* host:port but with `http://` instead of `https://` (TLS-front\n   misconfiguration, maintenance redirect, or a malicious/compromised\n   storage provider trying to harvest the token).\n3. rclone's S3 HTTP client follows the redirect and re-sends the request,\n   including `X-Amz-Security-Token`, over the now-unencrypted connection to\n   that same host.\n4. Any passive observer on that now-plaintext network path can read the STS\n   session token from the request headers.\n\n### Impact\nDisclosure of the AWS STS session token (`X-Amz-Security-Token`) in\ncleartext for the remainder of its validity window. This is the exact class\nof leak that `e7b1eb774` was written to close — it just doesn't cover the\nscheme-downgrade axis of \"crossing a host\".\n\n### Vulnerable Code\n```go\nfunc s3RedirectCrossesHost(req *http.Request, via []*http.Request) bool {\n\tif len(via) == 0 {\n\t\treturn false\n\t}\n\thost := via[0].URL.Host\n\tfor _, redirect := range via[1:] {\n\t\tif redirect.URL.Host != host {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn host != req.URL.Host\n}\n```\n\n### Recommended Fix\nAlso compare `URL.Scheme`, so a scheme downgrade on the same host is treated\nthe same as a host change:\n\n```go\nfunc s3RedirectCrossesHost(req *http.Request, via []*http.Request) bool {\n\tif len(via) == 0 {\n\t\treturn false\n\t}\n\tscheme, host := via[0].URL.Scheme, via[0].URL.Host\n\tfor _, redirect := range via[1:] {\n\t\tif redirect.URL.Host != host || redirect.URL.Scheme != scheme {\n\t\t\treturn true\n\t\t}\n\t}\n\treturn host != req.URL.Host || scheme != req.URL.Scheme\n}\n```\n\n### Verification\nAdded a unit test (`backend/s3/redirect_scheme_test.go`) that calls the real,\nunmodified `s3RedirectCrossesHost` / `s3CheckRedirect` with an\n`https://bucket.example.com` -> `http://bucket.example.com` redirect chain.\n\nOn unpatched code (commit 16091ce365, current master / v1.74.3):\n- `s3RedirectCrossesHost` returns `false`\n- `s3CheckRedirect` leaves `X-Amz-Security-Token: SECRET-SESSION-TOKEN`\n  intact on the outgoing (plaintext) request.\n\n```\n=== RUN   TestSchemeDowngradeNotDetectedAsCrossHost\n    redirect_scheme_test.go:23: initial=https://bucket.example.com final=http://bucket.example.com s3RedirectCrossesHost=false\n--- PASS: TestSchemeDowngradeNotDetectedAsCrossHost (0.00s)\n```\n\nAfter applying the one-line fix above (also adding scheme comparison), the\ntoken is correctly stripped and all existing redirect tests\n(`TestClientRemovesSecurityTokenOnCrossHostRedirect`,\n`TestClientDoesNotRestoreSecurityTokenAfterCrossHostRedirect`,\n`TestClientKeepsSecurityTokenOnSameHostRedirect`,\n`TestClientStopsAfterTenRedirects`) continue to pass.\n\nA minimal fix commit is ready and can be pushed to a private fork once this\nreport is acknowledged.","state":0,"publishedAt":"2026-08-05T20:43:11+00:00","modifiedAt":"2026-09-25T14:25:42.8190767+00:00","affected":[{"ecosystem":"Go","name":"github.com/rclone/rclone","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"1.74.4"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[{"system":"CVSS_V3","vector":"CVSS:3.1/AV:A/AC:H/PR:N/UI:N/S:U/C:L/I:N/A:N","score":null,"severity":null},{"system":"Publisher rating","vector":null,"score":null,"severity":"LOW"}],"references":["https://github.com/rclone/rclone/security/advisories/GHSA-gx4c-2hqx-cw2r","https://github.com/rclone/rclone/commit/1a28451ea6fc8ac1806b0e9923dcb5b3f543f7fa","https://github.com/rclone/rclone","https://github.com/rclone/rclone/releases/tag/v1.74.4"],"sourceUrl":"https://github.com/advisories/GHSA-gx4c-2hqx-cw2r","license":"GitHub Advisory Database · CC-BY-4.0","key":"osv:GHSA-gx4c-2hqx-cw2r","identifiers":["GHSA-gx4c-2hqx-cw2r","BIT-rclone-2026-79782","CVE-2026-79782","GO-2026-6196"]},"retained":false,"historicalAffected":[]},{"revision":"838e88780af044dea346d7edd2c6b5d4","observedAt":"2026-10-24T13:19:41.952+00:00","statement":{"source":"osv","id":"GO-2026-6196","aliases":["BIT-rclone-2026-79782","CVE-2026-79782","GHSA-gx4c-2hqx-cw2r"],"title":"S3 session token leakage on HTTPS to HTTP redirect in github.com/rclone/rclone","description":"S3 session token leakage on HTTPS to HTTP redirect in github.com/rclone/rclone","state":0,"publishedAt":"2026-08-18T16:38:10+00:00","modifiedAt":"2026-09-25T14:25:42.8190767+00:00","affected":[{"ecosystem":"Go","name":"github.com/rclone/rclone","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"},{"kind":"fixed","version":"1.74.4"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[],"references":["https://github.com/rclone/rclone/security/advisories/GHSA-gx4c-2hqx-cw2r","https://github.com/rclone/rclone/commit/1a28451ea6fc8ac1806b0e9923dcb5b3f543f7fa","https://github.com/rclone/rclone/releases/tag/v1.74.4"],"sourceUrl":"https://osv.dev/vulnerability/GO-2026-6196","license":"OSV · upstream source license applies","key":"osv:GO-2026-6196","identifiers":["GO-2026-6196","BIT-rclone-2026-79782","CVE-2026-79782","GHSA-gx4c-2hqx-cw2r"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-12T10:55:30.8237330+00:00","complete":true,"records":1779,"lastAttemptAt":"2026-11-12T10:55:30.823733+00:00","lastSuccessAt":"2026-11-12T10:55:31.0556782+00:00","error":null,"lastVerifiedAt":"2026-11-12T10:55:31.055679+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-64752486c567b55b31fb0d7225f5222bcd0019564ac0ac5f0649e242c7b19299-597d2a846bb8b004ef04143ee27b4f2061367ce1f574db03c0eec66ce3f0654b","complete":true,"records":424644,"lastAttemptAt":"2026-11-12T10:53:33.7939567+00:00","lastSuccessAt":"2026-11-12T10:53:33.7645522+00:00","error":null,"lastVerifiedAt":"2026-11-12T10:53:33.7939567+00:00","snapshotPublishedAt":"2026-11-12T10:28:09+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-9db698e4659747149ec1092e3d34a5a1","complete":true,"records":13764,"lastAttemptAt":"2026-11-12T10:56:11.9015763+00:00","lastSuccessAt":"2026-11-12T09:56:01.656+00:00","error":null,"lastVerifiedAt":"2026-11-12T09:56:01.656+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13817,"expectedIdentifiers":13817,"failedIdentifiers":0},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-12T10:55:30.8237330+00:00","complete":true,"records":1097,"lastAttemptAt":"2026-11-12T10:55:30.823733+00:00","lastSuccessAt":"2026-11-12T10:55:31.0564011+00:00","error":null,"lastVerifiedAt":"2026-11-12T10:55:31.0564012+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-bd366c4173b74364bb995788ecd92c36","complete":false,"records":13764,"lastAttemptAt":"2026-11-12T10:56:10.5374387+00:00","lastSuccessAt":"2026-11-12T10:56:10.532+00:00","error":null,"lastVerifiedAt":"2026-11-12T10:56:10.532+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13313,"expectedIdentifiers":13817,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-3562b6c78fd1bd0f0b55daf66a0926ae24f65e462df7f6d928caad458fc696bf","complete":true,"records":9947,"lastAttemptAt":"2026-11-12T10:55:30.6813009+00:00","lastSuccessAt":"2026-11-11T04:27:43.6877707+00:00","error":null,"lastVerifiedAt":"2026-11-12T10:55:30.6813009+00:00","snapshotPublishedAt":"2026-11-11T03:32:46+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-456002455e0ab94bb92c95476d4e6d175c104cd594749982afd96c893728ecbc","complete":true,"records":2010,"lastAttemptAt":"2026-11-12T10:53:33.9269183+00:00","lastSuccessAt":"2026-11-11T02:36:58.1276999+00:00","error":null,"lastVerifiedAt":"2026-11-12T10:53:33.9269183+00:00","snapshotPublishedAt":"2026-11-11T01:17:51+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-f46f74c6a30a9b6e4cfb481719c6d35521ebec2d53ebf163223d093ae587eb9d","complete":true,"records":3106,"lastAttemptAt":"2026-11-12T10:55:30.7817941+00:00","lastSuccessAt":"2026-11-12T09:55:31.1176285+00:00","error":null,"lastVerifiedAt":"2026-11-12T10:55:30.7817941+00:00","snapshotPublishedAt":"2026-11-12T09:48:13+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-cafddcfb656ee3e2c62171513201ded79d8731137bd7467a5e566349080db7d4","complete":true,"records":231700,"lastAttemptAt":"2026-11-12T10:55:30.5507315+00:00","lastSuccessAt":"2026-11-12T10:55:29.0211827+00:00","error":null,"lastVerifiedAt":"2026-11-12T10:55:30.5507315+00:00","snapshotPublishedAt":"2026-11-12T10:33:04+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}