{"id":"CVE-2022-21671","aliases":["EUVD-2022-0509","GHSA-7w54-gp8x-f33m"],"status":"published","title":"Potential exposure of Replit tokens to an Unauthorized Actor in @replit/crosis","description":"@replit/crosis is a JavaScript client that speaks Replit's container protocol. A vulnerability that involves exposure of sensitive information exists in versions prior to 7.3.1. When using this library as a way to programmatically communicate with Replit in a standalone fashion, if there are multiple failed attempts to contact Replit through a WebSocket, the library will attempt to communicate using a fallback poll-based proxy. The URL of the proxy has changed, so any communication done to the previous URL could potentially reach a server that is outside of Replit's control and the token used to connect to the Repl could be obtained by an attacker, leading to full compromise of that Repl (not of the account). This was patched in version 7.3.1 by updating the address of the fallback WebSocket polling proxy to the new one. As a workaround, a user may specify the new address for the polling host (`gp-v2.replit.com`) in the `ConnectArgs`. More information about this workaround is available in the GitHub Security Advisory.","severity":{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.01004,"percentile":0.63207,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-200"],"published":"2022-01-11T15:05:11Z","modified":"2026-10-28T02:30:45Z","fixes":[{"ecosystem":"npm","package":"@replit/crosis","fixed_in":["7.3.1"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"npm","package":"@replit/crosis","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"},{"fixed":"7.3.1"}]}]},{"source":"osv","ecosystem":"npm","package":"@replit/crosis","ranges":[{"type":"SEMVER","events":[{"introduced":"0"},{"fixed":"7.3.1"}]}]}],"products":[{"vendor":"replit","product":"crosis"}],"references":[{"url":"https://github.com/replit/crosis/security/advisories/GHSA-7w54-gp8x-f33m","tags":["x_refsource_CONFIRM","x_transferred","Mitigation","Third Party Advisory","advisory","web"]},{"url":"https://github.com/replit/crosis/commit/e44b6a8f5fa28cb2872e3c19bb8a205bb5bfc281","tags":["x_refsource_MISC","x_transferred","Patch","Third Party Advisory","fix","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2022-21671","tags":["advisory"]},{"url":"https://github.com/advisories/GHSA-7w54-gp8x-f33m"},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2022/21xxx/CVE-2022-21671.json","tags":["advisory"]},{"url":"https://github.com/replit/crosis","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2022-21671","title":"Potential exposure of Replit tokens to an Unauthorized Actor in @replit/crosis","description":"@replit/crosis is a JavaScript client that speaks Replit's container protocol. A vulnerability that involves exposure of sensitive information exists in versions prior to 7.3.1. When using this library as a way to programmatically communicate with Replit in a standalone fashion, if there are multiple failed attempts to contact Replit through a WebSocket, the library will attempt to communicate using a fallback poll-based proxy. The URL of the proxy has changed, so any communication done to the previous URL could potentially reach a server that is outside of Replit's control and the token used to connect to the Repl could be obtained by an attacker, leading to full compromise of that Repl (not of the account). This was patched in version 7.3.1 by updating the address of the fallback WebSocket polling proxy to the new one. As a workaround, a user may specify the new address for the polling host (`gp-v2.replit.com`) in the `ConnectArgs`. More information about this workaround is available in the GitHub Security Advisory.","status":"published","published":"2022-01-11T15:05:11Z","modified":"2025-04-23T19:13:35.823Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"cna"}],"cwes":["CWE-200"],"updated_at":"2026-11-02T14:34:29.057251Z"}],"euvd":[{"id":"EUVD-2022-0509","description":"@replit/crosis is a JavaScript client that speaks Replit's container protocol. A vulnerability that involves exposure of sensitive information exists in versions prior to 7.3.1. When using this library as a way to programmatically communicate with Replit in a standalone fashion, if there are multiple failed attempts to contact Replit through a WebSocket, the library will attempt to communicate using a fallback poll-based proxy. The URL of the proxy has changed, so any communication done to the previous URL could potentially reach a server that is outside of Replit's control and the token used to connect to the Repl could be obtained by an attacker, leading to full compromise of that Repl (not of the account). This was patched in version 7.3.1 by updating the address of the fallback WebSocket polling proxy to the new one. As a workaround, a user may specify the new address for the polling host (`gp-v2.replit.com`) in the `ConnectArgs`. More information about this workaround is available in the GitHub Security Advisory.","status":"published","published":"2022-01-11T15:05:11Z","modified":"2025-04-23T19:13:35Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"updated_at":"2026-11-02T20:52:06.891582Z"}],"ghsa":[{"id":"GHSA-7w54-gp8x-f33m","title":"Potential exposure of tokens to an Unauthorized Actor","description":"### Impact\n\nWhen using this library as a way to programmatically communicate with Replit in a standalone fashion, if there are multiple failed attempts to contact Replit through a WebSocket, the library will attempt to communicate using a fallback poll-based proxy. The URL of the proxy has changed, so any communication done to the previous URL could potentially reach a server that is outside of Replit's control and the token used to connect to the Repl could be obtained by an attacker, leading to full compromise of that Repl (not of the account).\n\n### Patches\n\nThis was patched in 7.3.1, by updating the address of the fallback WebSocket polling proxy to the new one.\n\n### Workarounds\n\nSpecify the new address for the polling host (`gp-v2.replit.com`) in the `ConnectArgs`:\n\n```typescript\nconst connectOptions: ConnectArgs = {\n  // ...\n  pollingHost: 'gp-v2.replit.com',\n};\nclient.connect(connectOptions);\n```\n\n### For more information\n\nThanks to https://hackerone.com/orlserg for disclosing this.\n\nIf you have any questions or comments about this advisory:\n* Open an issue in [replit/crosis](https://github.com/replit/crosis)\n* Email us at [security@replit.com](mailto:security@replit.com)","status":"published","published":"2022-01-12T22:44:47Z","modified":"2023-07-24T19:33:44Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","level":"medium"}],"cwes":["CWE-200"],"updated_at":"2026-11-02T14:36:58.177785Z"}],"nvd":[{"id":"CVE-2022-21671","description":"@replit/crosis is a JavaScript client that speaks Replit's container protocol. A vulnerability that involves exposure of sensitive information exists in versions prior to 7.3.1. When using this library as a way to programmatically communicate with Replit in a standalone fashion, if there are multiple failed attempts to contact Replit through a WebSocket, the library will attempt to communicate using a fallback poll-based proxy. The URL of the proxy has changed, so any communication done to the previous URL could potentially reach a server that is outside of Replit's control and the token used to connect to the Repl could be obtained by an attacker, leading to full compromise of that Repl (not of the account). This was patched in version 7.3.1 by updating the address of the fallback WebSocket polling proxy to the new one. As a workaround, a user may specify the new address for the polling host (`gp-v2.replit.com`) in the `ConnectArgs`. More information about this workaround is available in the GitHub Security Advisory.","status":"published","published":"2022-01-11T15:15:08.64Z","modified":"2026-06-17T04:26:43.827Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high","assessor":"secondary"},{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","level":"medium","assessor":"primary"},{"version":"2.0","score":4,"vector":"AV:N/AC:L/Au:S/C:P/I:N/A:N","level":"medium","assessor":"primary"}],"cwes":["CWE-200"],"updated_at":"2026-11-02T14:07:10.836864Z"}],"osv":[{"id":"CVE-2022-21671","title":"Potential exposure of Replit tokens to an Unauthorized Actor in @replit/crosis","description":"@replit/crosis is a JavaScript client that speaks Replit's container protocol. A vulnerability that involves exposure of sensitive information exists in versions prior to 7.3.1. When using this library as a way to programmatically communicate with Replit in a standalone fashion, if there are multiple failed attempts to contact Replit through a WebSocket, the library will attempt to communicate using a fallback poll-based proxy. The URL of the proxy has changed, so any communication done to the previous URL could potentially reach a server that is outside of Replit's control and the token used to connect to the Repl could be obtained by an attacker, leading to full compromise of that Repl (not of the account). This was patched in version 7.3.1 by updating the address of the fallback WebSocket polling proxy to the new one. As a workaround, a user may specify the new address for the polling host (`gp-v2.replit.com`) in the `ConnectArgs`. More information about this workaround is available in the GitHub Security Advisory.","status":"published","published":"2022-01-11T15:05:11Z","modified":"2026-10-28T02:30:45.126750024Z","cvss":[{"version":"3.1","score":8.1,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N","level":"high"}],"cwes":["CWE-200"],"updated_at":"2026-11-02T15:44:23.655778Z"},{"id":"GHSA-7w54-gp8x-f33m","title":"Potential exposure of tokens to an Unauthorized Actor","description":"### Impact\n\nWhen using this library as a way to programmatically communicate with Replit in a standalone fashion, if there are multiple failed attempts to contact Replit through a WebSocket, the library will attempt to communicate using a fallback poll-based proxy. The URL of the proxy has changed, so any communication done to the previous URL could potentially reach a server that is outside of Replit's control and the token used to connect to the Repl could be obtained by an attacker, leading to full compromise of that Repl (not of the account).\n\n### Patches\n\nThis was patched in 7.3.1, by updating the address of the fallback WebSocket polling proxy to the new one.\n\n### Workarounds\n\nSpecify the new address for the polling host (`gp-v2.replit.com`) in the `ConnectArgs`:\n\n```typescript\nconst connectOptions: ConnectArgs = {\n  // ...\n  pollingHost: 'gp-v2.replit.com',\n};\nclient.connect(connectOptions);\n```\n\n### For more information\n\nThanks to https://hackerone.com/orlserg for disclosing this.\n\nIf you have any questions or comments about this advisory:\n* Open an issue in [replit/crosis](https://github.com/replit/crosis)\n* Email us at [security@replit.com](mailto:security@replit.com)","status":"published","published":"2022-01-12T22:44:47Z","modified":"2023-11-08T04:08:07.12038Z","cvss":[{"version":"3.1","score":6.5,"vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N","level":"medium"}],"cwes":["CWE-200"],"updated_at":"2026-11-02T15:46:41.349637Z"}]}}
