Files
vuln-osv/data/PyPI/MAL-2026-18771.json
T

1 line
5.2 KiB
JSON

{"schema_version":"1.9.2","id":"MAL-2026-18771","published":"2026-11-08T21:47:19Z","modified":"2026-11-11T23:45:03.320053063Z","summary":"Malicious code in extrahtml (PyPI)","details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (2338a0148505cc5bfc4b9dad9d4894407f5267cb13e95e300262f240c254ab27)\nThe extrahtml 0.1.1 sdist ships no implementation of the library it advertises. The README documents RequestsEngine, SeleniumEngine and PlaywrightEngine under `from extrahtml import...`, but the tarball contains only `extrahtml.egg-info/` metadata, an empty `top_level.txt`, and `setup.py` — no `extrahtml` package source. The only install-time effects are (1) resolving `install_requires = [\"requests>=2.28.0\", \"parseyaml>=1.2.0\", \"fake-useragent>=1.4.0\"]` plus `pyproject [build-system] requires parseyaml>=1.2.0`, which pulls `parseyaml`, a non-mainstream lookalike of PyYAML whose author controls whatever code is published under that name, and (2) `setup.py` performing a network GET to `https://raw.githubusercontent.com/optima1236/parsetxt/refs/heads/main/README.md` and passing the response body to `parseyaml.safe_load` during `pip install`. The URL points at the mutable `refs/heads/main` of a personal GitHub repository owned by the same author, so the content fed into the author-controlled parser can change at any time after publish. The combination of a hollow package, a lookalike build/runtime dependency, and install-time fetching of unpinned content from a personal GitHub branch into an author-controlled parser is a dropper-lure shape: installing extrahtml resolves and executes attacker-controlled code on the installer's host, with no legitimate functionality shipped by the package itself.\n\n## Source: kam193 (f004357dd044b3c2c644a1f759dcd47a154a37533635280af0f3b5adb76469a4)\nIn this campaign, remote code is executed via a dependency pretending to be a YAML loader but embedding a special loader executing code from a provided file. During analysis, the code was just a stub.\n\n\n---\n\nCategory: MALICIOUS - The campaign has clearly malicious intent, like infostealers.\n\n\nCampaign: 2026-11-parseyaml\n\n\nReasons (based on the campaign):\n\n\n - The malicious code is intentionally included in a dependency of the package\n\n\n - Downloads and executes a remote malicious script.\n","affected":[{"package":{"name":"extrahtml","ecosystem":"PyPI","purl":"pkg:pypi/extrahtml"},"versions":["0.1.0","0.1.1","0.1.2"],"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"}],"indicators":{"evidence_files":[{"artifacts":["extrahtml-0.1.1.tar.gz"],"path":"setup.py","sha256":"89b0406bce9ed30758ebcc9117f2625a9e63b3c4cf9eda3d2e40aec41e39d753","tlsh":"5351438289c65d715bd388d6cd4d34a56332a4536d507c4abbcc80985f8c2ffa3ba72d"},{"artifacts":["extrahtml-0.1.1.tar.gz"],"path":"src/extrahtml.egg-info/top_level.txt","sha256":"01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b"}],"package_integrity":[{"filename":"extrahtml-0.1.1.tar.gz","hashes":{"blake2b_256":"ad07cfc8a1705899dff22d25cedef246bded9901a7a55134f2915dca56d96f06","md5":"d7b03bc628040cafff8395a2ba843079","sha256":"292a6880fc7e1327996d5a77da95caf131566dd74d8ca97472090bd774574649"}}]},"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/extrahtml/MAL-2026-18771.json"}}],"references":[{"type":"WEB","url":"https://bad-packages.kam193.eu/pypi/package/extrahtml"},{"type":"PACKAGE","url":"https://pypi.org/project/extrahtml/0.1.1/"},{"type":"PACKAGE","url":"https://pypi.org/project/extrahtml/0.1.0/"},{"type":"PACKAGE","url":"https://pypi.org/project/extrahtml/0.1.2/"}],"database_specific":{"iocs":{"urls":["https://plainraw.com/raw/99b69bda4246"]},"malicious-packages-origins":[{"id":"pypi/2026-11-parseyaml/extrahtml","import_time":"2026-11-08T22:36:34.67802616Z","modified_time":"2026-11-08T21:47:19.212233Z","sha256":"f004357dd044b3c2c644a1f759dcd47a154a37533635280af0f3b5adb76469a4","source":"kam193","versions":["0.1.0","0.1.1","0.1.2"]},{"id":"IN-MAL-2026-022621","import_time":"2026-11-11T23:36:06.639153917Z","modified_time":"2026-11-11T23:18:45Z","sha256":"2338a0148505cc5bfc4b9dad9d4894407f5267cb13e95e300262f240c254ab27","source":"amazon-inspector","versions":["0.1.1"]},{"id":"IN-MAL-2026-022620","import_time":"2026-11-11T23:36:06.546785949Z","modified_time":"2026-11-11T23:18:38Z","sha256":"858c265b6e7de99239da365a189fbaaeb54c865852fcf0e26ad2bd783a70985e","source":"amazon-inspector","versions":["0.1.0"]},{"id":"IN-MAL-2026-022622","import_time":"2026-11-11T23:36:06.729121972Z","modified_time":"2026-11-11T23:18:54Z","sha256":"b925dcc530cfe4ca18abc5a1c73a18c6ed00a55a71c8d13f829a5ff1ca1d8f15","source":"amazon-inspector","versions":["0.1.2"]}]},"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"}]}