{"id":"MAL-2025-191632","summary":"Malicious code in httpserver-cache (PyPI)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: kam193 (f48fad5068e7bfd86223ca6ef2fbf939ae684f2a4ae499f15f9cbe1e0cd9144d)\nPackages silently decrypt content hidden in a dependency and load them as Python extension modules. \n\nIn the first wave, those are copies of legitimate aiohttp and aiohappyeyeballs packages.\nIn the second wave, malicious packages created good-looking forks of legitimate rich and pigments packages.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2025-10-asynhttp\n\n\nReasons (based on the campaign):\n\n\n - typosquatting\n\n\n - exfiltration-generic\n\n\n - obfuscation\n\n\n - clones-real-package\n\n\n - native-extension\n","modified":"2026-03-19T12:53:38.705381Z","published":"2025-10-27T12:59:04Z","database_specific":{"malicious-packages-origins":[{"versions":["3.13.1"],"id":"RLMA-2025-05601","import_time":"2025-12-02T09:09:37.155313986Z","modified_time":"2025-12-01T12:54:25Z","sha256":"b844fd19cd54946f87975380d6567c6735c58e57248053c3c49c403d58617553","source":"reversing-labs"},{"id":"pypi/2025-10-asynhttp/httpserver-cache","import_time":"2025-12-02T22:30:55.257088844Z","modified_time":"2025-10-27T12:59:04.890586Z","sha256":"b6d14c1a0634b7c0ebef204b42090ed65d5b0246f29b8707d35794830096fdea","source":"kam193","versions":["3.14.0"]},{"versions":["3.14.0"],"id":"pypi/2025-10-asynhttp/httpserver-cache","import_time":"2025-12-02T23:07:18.280198918Z","modified_time":"2025-10-27T12:59:04.890586Z","sha256":"e7a215e207f060c3cd06c2ca78ad57787473b5a9509572b34c4e0fd873bc1a85","source":"kam193"},{"source":"kam193","versions":["3.14.0"],"id":"pypi/2025-10-asynhttp/httpserver-cache","import_time":"2025-12-10T18:45:05.208391814Z","modified_time":"2025-10-27T12:59:04.890586Z","sha256":"f48fad5068e7bfd86223ca6ef2fbf939ae684f2a4ae499f15f9cbe1e0cd9144d"},{"id":"RLUA-2026-00400","import_time":"2026-03-19T12:19:52.73976624Z","modified_time":"2026-03-18T12:14:45Z","sha256":"cf6cc2d765cfb74609601f71d8c0fd9b7afe63c6821e1d840b08e3c1fb9f1f0d","source":"reversing-labs"}]},"references":[{"type":"WEB","url":"https://www.cert.at/en/blog/2025/10/how-typosquatting-tricked-me-a-bit"},{"type":"ARTICLE","url":"https://www.cert.at/en/blog/2025/10/how-typosquatting-tricked-me-a-bit"},{"type":"WEB","url":"https://bad-packages.kam193.eu/pypi/package/httpserver-cache"}],"affected":[{"package":{"name":"httpserver-cache","ecosystem":"PyPI","purl":"pkg:pypi/httpserver-cache"},"versions":["3.13.1","3.14.0"],"database_specific":{"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/httpserver-cache/MAL-2025-191632.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":"REPORTER"},{"name":"ReversingLabs","contact":["https://www.reversinglabs.com"],"type":"FINDER"}]}