{"id":"MAL-2025-191654","summary":"Malicious code in pygments-richstyle (PyPI)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: kam193 (a965f61b1e51e6c96a8987633eaf2f23001320e4c6b884c33603230c66798e74)\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:55:51.146387Z","published":"2025-10-31T14:08:59Z","database_specific":{"malicious-packages-origins":[{"import_time":"2025-12-02T09:09:38.934815868Z","modified_time":"2025-12-01T12:54:52Z","sha256":"6b49aa9502d6164b44069711b872ae64859f1ee6c43f5cd65745a3fd13cc5d6f","source":"reversing-labs","versions":["1.0.0"],"id":"RLMA-2025-05628"},{"versions":["1.0.0"],"id":"pypi/2025-10-asynhttp/pygments-richstyle","import_time":"2025-12-02T22:30:55.466584746Z","modified_time":"2025-10-31T14:08:59.57345Z","sha256":"1a522c8b8020b2bc892dccb2ac852a0a95c0eeb3fc0f94f7e4fff0da98979fa1","source":"kam193"},{"modified_time":"2025-10-31T14:08:59.57345Z","sha256":"ed44cafe4fd7aebba15cdc8a14058888e3071523ae21ea13f827a1b9713033cd","source":"kam193","versions":["1.0.0"],"id":"pypi/2025-10-asynhttp/pygments-richstyle","import_time":"2025-12-02T23:07:18.491303985Z"},{"versions":["1.0.0"],"id":"pypi/2025-10-asynhttp/pygments-richstyle","import_time":"2025-12-10T18:45:05.21065568Z","modified_time":"2025-10-31T14:08:59.57345Z","sha256":"a965f61b1e51e6c96a8987633eaf2f23001320e4c6b884c33603230c66798e74","source":"kam193"},{"id":"RLUA-2026-00634","import_time":"2026-03-19T12:20:15.705507363Z","modified_time":"2026-03-18T12:17:28Z","sha256":"93c92401274f72ed49706fcca3207624059529f6f2e375ce2033a831a85d17e3","source":"reversing-labs"}]},"references":[{"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/pygments-richstyle"},{"type":"WEB","url":"https://www.cert.at/en/blog/2025/10/how-typosquatting-tricked-me-a-bit"}],"affected":[{"package":{"name":"pygments-richstyle","ecosystem":"PyPI","purl":"pkg:pypi/pygments-richstyle"},"versions":["1.0.0"],"database_specific":{"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/pygments-richstyle/MAL-2025-191654.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"}]}