MAL-2026-18242Malicious code in sitecard (PyPI)
| Ecosystem | Package | Version |
|---|---|---|
| PyPI | sitecard | 0.1.0 |
| PyPI | sitecard | 0.1.1 |
| PyPI | sitecard | 0.1.10 |
| PyPI | sitecard | 0.1.11 |
| PyPI | sitecard | 0.1.12 |
| PyPI | sitecard | 0.1.13 |
| PyPI | sitecard | 0.1.14 |
| PyPI | sitecard | 0.1.2 |
| PyPI | sitecard | 0.1.3 |
| PyPI | sitecard | 0.1.6 |
| PyPI | sitecard | 0.1.7 |
| PyPI | sitecard | 0.1.8 |
| PyPI | sitecard | 0.1.9 |
{"schema_version":"1.7.4","id":"MAL-2026-18242","published":"2026-10-23T16:30:56Z","modified":"2026-10-29T14:38:27.787997395Z","summary":"Malicious code in sitecard (PyPI)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (d9f44333ae4aa62e60d153dfbdc535cd08f778e917a1052ecaf43722d8a7165d)\nsitecard exposes a workspace directory over SSH via public relays (srv.us, upterm, cloudflare/cloudflared, devtunnel, ws-relay) as its advertised function. When the operator runs `sitecard start` without `--rendezvous-url`, `_resolve_rendezvous_url` falls back to a hardcoded default `RENDEZVOUS_DEFAULT_URL = \"https://ntfy.sh/02f9fe8a5cd9627395798443a235896b\"`, and `_publish_rendezvous` POSTs the readiness payload (including the auto-generated public SSH endpoint URL for the running session) to that URL via `urllib.request.urlopen`. ntfy.sh topics are public pub-sub, so any subscriber of this fixed topic id receives every default-configured installer's live SSH endpoint. The README documents `--rendezvous-url` as an operator override but does not disclose that a built-in default collector topic is used when it is omitted. Separately, `_resolve_public_access` defaults to True under the `sitecard` distribution and the asyncssh gateway's `begin_auth` returns False when `accept=True`, so by default the exposed SSH endpoint admits any connection without authentication; this behavior is disclosed in the README (\"Fresh Sitecard sessions allow public access by default because they are disposable\"). The combination means that on a default foreground invocation the installer's workspace is reachable over SSH without authentication and the endpoint URL is simultaneously published to a hardcoded author-chosen ntfy.sh topic. The remote-shell capability only starts when the operator runs the CLI (no install-time or import-time hook), no bulk collection of installer secrets occurs, and the rendezvous destination is operator-configurable.\n\n## Source: kam193 (49be8995374d0e3d2bcb8f163675221e14bfb6d7d968a6fa5d8165e4f493997d)\nThe package provides code to create an SSH session exposed via tunnels. By default, created session is accessible without any auth and reported to a hardcoded location, exposing any user to be accessed by attacker.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-10-sitecard\n\n\nReasons (based on the campaign):\n\n\n - backdoor\n","affected":[{"package":{"name":"sitecard","ecosystem":"PyPI"},"versions":["0.1.0","0.1.1","0.1.2","0.1.3","0.1.6","0.1.7","0.1.8","0.1.9","0.1.10","0.1.11","0.1.12","0.1.13","0.1.14"],"database_specific":{"cwes":[{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"},{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"}],"indicators":{"evidence_files":[{"path":"src/sitecard/gateway.py","sha256":"a4070098bc39f68bb1f8b2262407c9ec6fee6e30e027cf19ab3761b0a7f0f1c7","tlsh":"def2d802d91d5aa3e3c3e6688863f0136615ed431e0538747aace25c2f5e279c5f2bed"}],"package_integrity":[{"filename":"sitecard-0.1.0-py3-none-any.whl","hashes":{"blake2b_256":"7df0567d5ad04731ea4d716deb9d20c2afcde74c33322b2262da928ca290506f","md5":"7079984fad39c1e3039a82ec47117dee","sha256":"f9dfe626b377efe8eb5d1443b3ffeb0f3b57133e1960e79dfc093779264fc3af"}},{"filename":"sitecard-0.1.0.tar.gz","hashes":{"blake2b_256":"448789c51561a57d3275fc4724d4754ed59fc5daafe4f37e2a7edb9ca33e5554","md5":"66a465cdf751d85c904927cd5b4a298c","sha256":"ea79e18cf22cc323e6f726ef7d4d8c0e6eda8e232f4d3ed3cd45c2255468d332"}}]}}}],"references":[{"type":"WEB","url":"https://bad-packages.kam193.eu/pypi/package/sitecard"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.0/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.2/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.3/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.12/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.7/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.14/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.13/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.1/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.11/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.9/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.8/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.6/"},{"type":"PACKAGE","url":"https://pypi.org/project/sitecard/0.1.10/"}],"database_specific":{"malicious-packages-origins":[{"id":"pypi/2026-10-sitecard/sitecard","import_time":"2026-10-23T17:15:33.206654697Z","modified_time":"2026-10-23T16:30:56.396384Z","sha256":"49be8995374d0e3d2bcb8f163675221e14bfb6d7d968a6fa5d8165e4f493997d","source":"kam193","versions":["0.1.0","0.1.1","0.1.2","0.1.3","0.1.6","0.1.7","0.1.8","0.1.9","0.1.10","0.1.11","0.1.12","0.1.13","0.1.14"]},{"id":"IN-MAL-2026-021968","import_time":"2026-10-29T13:37:18.272903467Z","modified_time":"2026-10-29T13:31:36Z","sha256":"800ca56da042abfa6ec71645a0e153fd8adf11eef4078de031c66279656675f3","source":"amazon-inspector","versions":["0.1.0"]},{"id":"IN-MAL-2026-021963","import_time":"2026-10-29T13:37:18.101615235Z","modified_time":"2026-10-29T13:30:56Z","sha256":"9cdc69c2b591bc77571deeedcf1d80587c6f54a97c27f4fa5657d86bf67c2009","source":"amazon-inspector","versions":["0.1.2"]},{"id":"IN-MAL-2026-021991","import_time":"2026-10-29T13:37:18.942225466Z","modified_time":"2026-10-29T13:34:45Z","sha256":"d45f68bda10777d700cc046f1af83eb2c67dd69a0a18daebd210da277888f30c","source":"amazon-inspector","versions":["0.1.3"]},{"id":"IN-MAL-2026-021947","import_time":"2026-10-29T13:37:17.598640648Z","modified_time":"2026-10-29T13:28:44Z","sha256":"2d7963321797b3920632c6f6fbed91bf96861b3fbbf34fc6f09a7e7067c7be45","source":"amazon-inspector","versions":["0.1.12"]},{"id":"IN-MAL-2026-021960","import_time":"2026-10-29T13:37:18.012485953Z","modified_time":"2026-10-29T13:30:33Z","sha256":"5824dd33e8689f63b2d4f19f3d9b3d2715e59e51dabe41b2a4e1522f2f3a42bc","source":"amazon-inspector","versions":["0.1.7"]},{"id":"IN-MAL-2026-021958","import_time":"2026-10-29T13:37:17.950397907Z","modified_time":"2026-10-29T13:30:15Z","sha256":"d9f44333ae4aa62e60d153dfbdc535cd08f778e917a1052ecaf43722d8a7165d","source":"amazon-inspector","versions":["0.1.14"]},{"id":"IN-MAL-2026-021896","import_time":"2026-10-29T13:37:15.567568785Z","modified_time":"2026-10-29T13:22:12Z","sha256":"da4c02f24310af43bc6800ef935dc6b8eb8746c95aa9518f95ff086d40f79e52","source":"amazon-inspector","versions":["0.1.13"]},{"id":"IN-MAL-2026-021989","import_time":"2026-10-29T13:37:18.880513988Z","modified_time":"2026-10-29T13:34:32Z","sha256":"47c43a486076eda22f0e92f498784af0f1cf5eca33b32af1a83c82562cb68e83","source":"amazon-inspector","versions":["0.1.1"]},{"id":"IN-MAL-2026-021987","import_time":"2026-10-29T13:37:18.797845325Z","modified_time":"2026-10-29T13:34:18Z","sha256":"56166fc1bb18bf4736dbd4148aaf7728a7a55b8409833745338c3ec13c68d3a8","source":"amazon-inspector","versions":["0.1.11"]},{"id":"IN-MAL-2026-022132","import_time":"2026-10-29T14:14:28.521117917Z","modified_time":"2026-10-29T13:53:01Z","sha256":"7786b9a7e09164c653513db6475bd78aa97ac7d7602827ccdc82cd796387d0e7","source":"amazon-inspector","versions":["0.1.9"]},{"id":"IN-MAL-2026-022347","import_time":"2026-10-29T14:37:05.174552714Z","modified_time":"2026-10-29T14:21:04Z","sha256":"0183dc1d32cc6d018103c044977224ff89b348618cb7a2a124e8af9e9a731734","source":"amazon-inspector","versions":["0.1.8"]},{"id":"IN-MAL-2026-022357","import_time":"2026-10-29T14:37:05.580633661Z","modified_time":"2026-10-29T14:22:26Z","sha256":"94971d428eef53c1b554684f42b95a8351c0f44ff41b1f179cebeecd68202e03","source":"amazon-inspector","versions":["0.1.6"]},{"id":"IN-MAL-2026-022345","import_time":"2026-10-29T14:37:05.103609195Z","modified_time":"2026-10-29T14:20:50Z","sha256":"f8c134e2cddb7533a3e7fe98a1e25b754d56f1cacd217976af5b3e8940449da4","source":"amazon-inspector","versions":["0.1.10"]}]},"credits":[{"name":"Amazon Inspector","contact":["inspector-research@amazon.com"],"type":"FINDER"},{"name":"Kamil Mańkowski (kam193)","contact":["https://github.com/kam193","https://bad-packages.kam193.eu/"],"type":"REPORTER"}]}数据来源:OpenSSF Malicious Packages · Apache-2.0