{"id":"MAL-2026-16164","revision":null,"records":[{"revision":"b7f94f90851d4c74a9cfe45079b14bbf","observedAt":"2026-10-24T13:19:54.901+00:00","statement":{"source":"osv","id":"MAL-2026-16164","aliases":[],"title":"Malicious code in logs_update (crates.io)","description":"logs-update is a malicious crate published to crates.io on 2026-09-10 with zero downloads. It pretends to be a terminal progress-bar library, but renders nothing to a terminal. The whole crate steals files and sets up remote access.\n\nThe crate has no build script, so it does not run during `cargo build` of a dependent. It runs when someone runs its binary (for example after `cargo install logs-update`) or when a dependent calls its run() function.\n\nWhen it runs, it does four things:\n\n1. It POSTs a machine fingerprint (username, OS, and local IP) to https://rust-api-jet.vercel.app/api/validate/system-info.\n\n2. It reads the project's .env and its trading-bot config files and POSTs them to https://rust-api-jet.vercel.app/api/validate/project-env.\n\n3. It walks the filesystem and POSTs the contents of .env, .json, .txt, .doc, .docx, and .xlsx files to https://rust-api-jet.vercel.app/api/validate/files.\n\n4. On Linux, it appends an attacker's SSH public key to ~/.ssh/authorized_keys, giving the attacker remote login as that user.\n\nThe crate targets crypto trading-bot developers: it hunts Polymarket order-book client configs, and those developers keep exchange API keys and wallet secrets in their .env files. Every version is malicious.\n\nAttacker SSH public key appended to ~/.ssh/authorized_keys (comment yyy@gmail.com): ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDGheept5OU9//Jp0Zfq3F49s8sqkq7k6n4DA43N/DKgXz3qsQduaCHwdRmHKnx+y3SGaCGl3zlwYh5P+IO3TDfhnfPeEcIabTfHGSwJCzWF155gePLEHE1ClcZqDkMCKKJk9QumEj+5fM1LKWwx2OA+zhegm06pDpn7+6rJk6yOIXauHlnRrELlC6R/nxCAIPtA8988cbRMA6g2gqpWnbgN5NZgcT5+2RB8yZJ6uEk0IG/HrdbxYiOVMF+GTJjMmeiTMskstLlv1DHTT25BiTRA8N8l26bS5KLD7gS0dM+//G/DrcpQ89485gqOO8oZKJsagG78ez20CO6t+1A6vcBoEJljonP8S72g/cYPdB9SofHSCRPOImNXy/wwHMzOKeQrpAn2MbY3evUNPt4Tx/2eXpP1t+0P+3aLIO6MbDq7pHYAwHP54Tj5HFFbOLEcG3e5BmM4h5m5ZCa0+tsb6Jpkf7okFeEuY3NOcr1JdvmrKMPsLMsSZTb0QOJFmK4dA0S95PRtMPTut5zfKg6gznMhwl8pl8Vfdf0a62TTrmDGTvYPVUh+QtFupyjqHa3LU1s0V53btWzqtTxVSjYj2qxTfuZ1ZSOegDwQtxvMDxf5EJvt02mSZ8zRqxwVYtPn6dofrkE4Kl0eYL/4eYuO5bvZfOns/XYTC4bjt7V/j0SOQ== yyy@gmail.com","state":0,"publishedAt":"2026-09-11T00:00:00+00:00","modifiedAt":"2026-09-15T06:00:04.8852125+00:00","affected":[{"ecosystem":"crates.io","name":"logs-update","ranges":[{"type":"SEMVER","events":[{"kind":"introduced","version":"0"}]}],"versions":[],"rawVersionEvidence":null}],"metrics":[],"references":["https://crates.io/crates/logs-update"],"sourceUrl":"https://osv.dev/vulnerability/MAL-2026-16164","license":"OSV · upstream source license applies","key":"osv:MAL-2026-16164","identifiers":["MAL-2026-16164"]},"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-13T14:58:44.3363234+00:00","complete":true,"records":1779,"lastAttemptAt":"2026-11-13T14:58:44.3363234+00:00","lastSuccessAt":"2026-11-13T14:58:44.5141359+00:00","error":null,"lastVerifiedAt":"2026-11-13T14:58:44.5141368+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-d8fa82e95fdb59244e2f635e667ba17f0796ca0a4f1f4bb8cc31febcd660b76c-321382fc5730a00bef582c627181233f63f76828d1f8c684a35769006df72dd6","complete":true,"records":425393,"lastAttemptAt":"2026-11-13T14:56:59.0753591+00:00","lastSuccessAt":"2026-11-13T14:56:58.979484+00:00","error":null,"lastVerifiedAt":"2026-11-13T14:56:59.0753591+00:00","snapshotPublishedAt":"2026-11-13T14:29: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-2eea6e828a794466b37ab585da9e8046","complete":false,"records":13797,"lastAttemptAt":"2026-11-13T15:08:19.4301002+00:00","lastSuccessAt":"2026-11-13T15:08:18.408+00:00","error":"595 identifier lookups failed; latest failures include AccessDenied (HTTP 403). Other identifiers were checked independently.","lastVerifiedAt":"2026-11-13T15:08:18.408+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":12807,"expectedIdentifiers":13850,"failedIdentifiers":595},{"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-13T14:58:44.3363234+00:00","complete":true,"records":1123,"lastAttemptAt":"2026-11-13T14:58:44.3363234+00:00","lastSuccessAt":"2026-11-13T14:58:44.5149276+00:00","error":null,"lastVerifiedAt":"2026-11-13T14:58:44.5149277+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-c4db44c2f8494656b34b99b9689fe3fd","complete":true,"records":13797,"lastAttemptAt":"2026-11-13T14:58:49.0732225+00:00","lastSuccessAt":"2026-11-13T14:58:49.069+00:00","error":null,"lastVerifiedAt":"2026-11-13T14:58:49.069+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13850,"expectedIdentifiers":13850,"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-93e76d404e1aeb6a7e8902f5ffa06211fc86dea3b1958e297abb2668aa5e6e8c","complete":true,"records":9952,"lastAttemptAt":"2026-11-13T14:58:40.3714043+00:00","lastSuccessAt":"2026-11-12T23:19:15.5239119+00:00","error":null,"lastVerifiedAt":"2026-11-13T14:58:40.3714043+00:00","snapshotPublishedAt":"2026-11-12T23:03:02+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-4d60731753a2f72e455d1086e7203d0ef10843936dcc1cf2b45135e2caa204b0","complete":true,"records":2012,"lastAttemptAt":"2026-11-13T14:56:59.1280107+00:00","lastSuccessAt":"2026-11-12T18:16:50.7862525+00:00","error":null,"lastVerifiedAt":"2026-11-13T14:56:59.1280107+00:00","snapshotPublishedAt":"2026-11-12T17:48:11+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-b98055ddd8730ffa62c2a08d5fcf33dfdf9704c3bfb02936eddd878e2c44c283","complete":true,"records":3146,"lastAttemptAt":"2026-11-13T14:58:44.2985337+00:00","lastSuccessAt":"2026-11-13T14:58:44.1320252+00:00","error":null,"lastVerifiedAt":"2026-11-13T14:58:44.2985337+00:00","snapshotPublishedAt":"2026-11-13T13:03:04+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-1c778759030c865168b5e9dee5772455ec2cc2e719ea7dfbebee29f18fbbe4ff","complete":true,"records":231771,"lastAttemptAt":"2026-11-13T14:58:40.2396052+00:00","lastSuccessAt":"2026-11-13T14:58:38.6112066+00:00","error":null,"lastVerifiedAt":"2026-11-13T14:58:40.2396052+00:00","snapshotPublishedAt":"2026-11-13T14:32:55+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}