{"schemaVersion":3,"id":"CVE-2026-54893","aliases":[],"status":"published","duplicateOf":null,"title":null,"description":"URL path injection in the Microsoft Graph adapter of Swoosh. Swoosh.Adapters.MsGraph builds its Microsoft Graph API request URL by interpolating the sender's email address into the URL path (/users/{from}/sendMail) without percent-encoding or validation.\n\nIn applications that derive the from address from untrusted or user-influenced input (for example a relay, a contact form, or a \"send as\" feature), an attacker can place URL-special characters such as /, ?, or # in the local part of the address to escape the intended path segment and rewrite the path and query string of the request. Because the same authenticated POST is sent with the application's Microsoft Graph bearer token, the attacker can redirect it to other Graph endpoints within the token's scopes and control the request's query string. Applications that always use a fixed, trusted from address are not affected.\n\nThis issue affects swoosh: from 1.12.0 before 1.26.3.","dates":{"published":"2026-07-06T14:04:16.486Z","modified":"2026-09-24T21:26:49.572Z","reserved":null,"kevAdded":[],"kevDue":[]},"cvss":{"headline":{"score":2.1,"severity":"low","version":"4.0","versionLabel":"v4.0","source":"CVE.org","vector":"CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N","computed":false,"selection":"backend-summary"},"metrics":[{"version":"4.0","versionLabel":"v4.0","source":"CVE.org","score":2.1,"severity":"low","vector":"CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/SA:N","exploitability":null,"impact":null,"computed":false},{"version":"4.0","versionLabel":"v4.0","source":"NVD","score":2.1,"severity":"low","vector":"CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:N/VI:L/VA:N/SC:L/SI:L/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","exploitability":null,"impact":null,"computed":false}]},"epss":{"probability":0.00203,"percentile":0.09692,"severity":"low","asOf":"2026-10-19T00:00:00.000Z","change":{"pp":0,"baselineDate":"2026-09-19T00:00:00.000Z","baselineScore":0.00203},"history":[{"date":"2026-09-14T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-15T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-16T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-17T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-18T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-19T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-20T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-21T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00203,"percentile":0.09692}],"last30":[{"date":"2026-09-19T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-20T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-21T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-22T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-23T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-24T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-25T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-26T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-27T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-28T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-29T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-09-30T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-01T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-02T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-03T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-04T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-05T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-06T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-07T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-08T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-09T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-10T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-11T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-12T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-13T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-14T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-15T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-16T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-17T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-18T00:00:00.000Z","score":0.00203,"percentile":null},{"date":"2026-10-19T00:00:00.000Z","score":0.00203,"percentile":0.09692}]},"kev":{"state":"not-listed","entries":[],"listedCount":0,"totalCatalogs":3,"catalogs":[{"source":"cisa","label":"CISA","listed":false,"entry":null},{"source":"enisa","label":"ENISA","listed":false,"entry":null},{"source":"circl","label":"CIRCL","listed":false,"entry":null}]},"ransomware":{"state":"none-recorded","sources":[]},"exploits":[],"exploitCount":0,"weaknesses":[{"id":"CWE-116","name":"Improper Encoding or Escaping of Output","description":"The product prepares a structured message for communication with another component, but encoding or escaping of the data is either missing or done incorrectly. As a result, the intended structure of the message is not preserved.","type":"weakness","status":"Draft","abstraction":"Class","likelihoodOfExploit":"High","url":"https://cwe.mitre.org/data/definitions/116.html"}],"affected":[{"vendor":"swoosh","product":"swoosh","name":"swoosh","label":"swoosh","ecosystem":null,"cpePart":"a","purl":null,"purlType":null,"versions":[{"text":"≥ 1.12.0, < 1.26.3","noFixRecorded":false,"fixedIn":null},{"text":"≥ 23bfcdab71aee4613858ba6d116bb3311b72aa58, < e38235453e81d1727bfc8d91e69ec4cb211ccf61","noFixRecorded":false,"fixedIn":null}],"versionsText":"≥ 1.12.0, < 1.26.3 | ≥ 23bfcdab71aee4613858ba6d116bb3311b72aa58, < e38235453e81d1727bfc8d91e69ec4cb211ccf61","eol":null,"hubHref":"/vendor/swoosh/swoosh"}],"affectedCount":1,"eol":{"hasEol":false,"count":0},"references":[{"url":"https://github.com/swoosh/swoosh/security/advisories/GHSA-754j-98wh-57rf","label":"github.com/swoosh/swoosh/security/advisories/GHSA-754j-98wh-57rf","hostname":"github.com","tags":["Vendor Advisory","Related"]},{"url":"https://cna.erlef.org/cves/CVE-2026-54893.html","label":"cna.erlef.org/cves/CVE-2026-54893.html","hostname":"cna.erlef.org","tags":["Related"]},{"url":"https://osv.dev/vulnerability/EEF-CVE-2026-54893","label":"osv.dev/vulnerability/EEF-CVE-2026-54893","hostname":"osv.dev","tags":["Related"]},{"url":"https://github.com/swoosh/swoosh/commit/23bfcdab71aee4613858ba6d116bb3311b72aa58","label":"github.com/swoosh/swoosh/commit/23bfcdab71aee4613858ba6d116bb3311b72aa58","hostname":"github.com","tags":["Related"]},{"url":"https://github.com/swoosh/swoosh/commit/e38235453e81d1727bfc8d91e69ec4cb211ccf61","label":"github.com/swoosh/swoosh/commit/e38235453e81d1727bfc8d91e69ec4cb211ccf61","hostname":"github.com","tags":["Patch"]}],"lineage":{"upstream":[],"downstream":["MGASA-2026-0457"],"duplicates":[],"related":[]},"timeline":[{"kind":"published","date":"2026-07-06T14:04:16.486Z","label":"Published","detail":"Vulnerability first disclosed.","source":null},{"kind":"modified","date":"2026-09-24T21:26:49.572Z","label":"Last modified","detail":"Vulnerability information updated.","source":null}],"risk":{"score":8,"level":"minimal","profile":"Default","thresholds":{"critical":75,"high":50,"medium":25,"low":10}},"meta":{"dataAsOf":"2026-10-20T00:13:33.687Z","stale":false,"partial":false}}