{"id":"MAL-2025-6515","summary":"Malicious code in graphdict (PyPI)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: kam193 (d6536224bd962025c65671a0007df1998dbc9485dfb2d628b0a0d57ab916487e)\nMalicious clone of legitimate networkx package with added hidden encrypted code. The exact behaviour unclear as it uses decryption key based on the arguments and config files\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2025-07-graphdict\n\n\nReasons (based on the campaign):\n\n\n - Downloads and executes a remote malicious script.\n\n\n - obfuscation\n\n\n - clones-real-package\n","modified":"2026-03-19T12:53:29.806771Z","published":"2025-07-09T18:18:10Z","database_specific":{"iocs":{"urls":["https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.nvmrc","https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example"]},"malicious-packages-origins":[{"source":"reversing-labs","id":"RLMA-2025-03606","sha256":"c7101391422181823d61a3d636c7f9134c431e9b9c44cfe44b94eaafd7466cb9","versions":["3.4.0","3.4.2","3.4.6","3.4.8","3.4.10","3.4.11","3.4.12","3.4.13","3.4.14"],"import_time":"2025-08-01T10:07:11.493157498Z","modified_time":"2025-07-31T19:15:10Z"},{"source":"kam193","id":"pypi/2025-07-graphdict/graphdict","sha256":"c8ee8870b424d4d335d5d3c132e8e393dd102af2d95b00b112b5f320357f1858","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"import_time":"2025-12-02T22:30:55.226917668Z","modified_time":"2025-07-09T18:18:10.916028Z"},{"source":"kam193","id":"pypi/2025-07-graphdict/graphdict","sha256":"d6536224bd962025c65671a0007df1998dbc9485dfb2d628b0a0d57ab916487e","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"0"}]}],"import_time":"2025-12-02T23:07:18.247368987Z","modified_time":"2025-07-09T18:18:10.916028Z"},{"source":"kam193","id":"pypi/2025-07-graphdict/graphdict","sha256":"74ed208ded42d64f781d359a0bf37211d4a58f5d6a3b84d585d44ffa683de456","versions":["3.4.2","3.4.0","3.4.6","3.4.8","3.4.11","3.4.10","3.4.12","3.4.13","3.4.14"],"import_time":"2025-12-10T21:38:57.512878184Z","modified_time":"2025-07-09T18:18:10.916028Z"},{"source":"kam193","id":"pypi/2025-07-graphdict/graphdict","sha256":"d00497adc5227d643ba30f82de9c1daf348087666a0597e2cbe642a21772d033","versions":["3.4.0","3.4.2","3.4.6","3.4.8","3.4.10","3.4.11","3.4.12","3.4.13","3.4.14"],"import_time":"2025-12-30T22:39:04.091667992Z","modified_time":"2025-07-09T18:18:10.916028Z"},{"source":"kam193","id":"pypi/2025-07-graphdict/graphdict","sha256":"ebaed867b03d8b50669a2d39ceafad37cdded3be064ad1ab5b5af833eda3bf9d","versions":["3.4.0","3.4.2","3.4.6","3.4.8","3.4.10","3.4.11","3.4.12","3.4.13","3.4.14"],"import_time":"2026-02-11T16:52:08.200658171Z","modified_time":"2025-07-09T18:18:10.916028Z"},{"source":"reversing-labs","id":"RLUA-2026-00364","sha256":"3decd52ea880fd85d18e4c27742117fa4f4ecc8ddd536be6d21e730c92da410e","import_time":"2026-03-19T12:19:49.311680072Z","modified_time":"2026-03-18T12:14:22Z"}]},"references":[{"type":"WEB","url":"https://bad-packages.kam193.eu/pypi/package/graphdict"},{"type":"WEB","url":"https://www.reversinglabs.com/blog/fake-recruiter-campaign-crypto-devs"},{"type":"ARTICLE","url":"https://www.reversinglabs.com/blog/fake-recruiter-campaign-crypto-devs"}],"affected":[{"package":{"name":"graphdict","ecosystem":"PyPI","purl":"pkg:pypi/graphdict"},"versions":["3.4.0","3.4.2","3.4.6","3.4.8","3.4.10","3.4.11","3.4.12","3.4.13","3.4.14"],"database_specific":{"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/graphdict/MAL-2025-6515.json"}}],"schema_version":"1.7.5","credits":[{"name":"Kamil Mańkowski (kam193)","contact":["https://github.com/kam193","https://bad-packages.kam193.eu/"]},{"name":"Kamil Mańkowski (kam193)","contact":["https://github.com/kam193","https://bad-packages.kam193.eu/"],"type":"ANALYST"},{"name":"ReversingLabs","contact":["https://www.reversinglabs.com"],"type":"FINDER"}]}