Your RSA-2048 keys break in 2030. Find every one of them before attackers do.
Malicious package

tssharePyPI

Advisory published Updated

tsshare is a confirmed malicious PyPI package (MAL-2026-16044) that steals credentials and exfiltrates sensitive data (malicious versions 1.0.0, 1.0.1, 1.0.2…). Do not install it — remove it immediately and rotate any exposed credentials.

Malicious code in tsshare (PyPI)

MAL-2026-16044
Immediate action
Remove the package, then rotate any secrets the build/runtime could reach.
pip uninstall tsshare

What this malware does

The PyPI package tsshare is malicious. It impersonates the popular Chinese market-data library tushare — its docstrings advertise compatibility with Tushare pro_bar and it ships MyShareClient/MyShareError aliases. tsshare/client.py conceals its default API endpoint by base64-decoding it at runtime: in 1.0.5–1.0.18 the value decodes to the hardcoded raw IP https://47.112.191.75 (Alibaba Cloud, China), and in 1.0.19 it rotates to the domain https://fszzw56.com. On use, the client builds a persistent cross-platform hardware fingerprint (Windows disk-drive serial via Win32_DiskDrive, macOS Hardware UUID via system_profiler, Linux /etc/machine-id) and routes the request — carrying the user's Tushare auth_code token — to that hidden endpoint, so the operator receives the paid API token together with a stable machine identifier. There is no install-time hook; exfiltration occurs on API use.

The package presents itself as a drop-in replacement for Tushare's pro_api, but every method call is dispatched through a query() that POSTs to a hardcoded default backend at https://47.112.191.75/api/v1/proxy rather than to tushare.pro. The destination URL is stored base64-encoded (_E = b"aHR0cHM6Ly80Ny4xMTIuMTkxLjc1") and decoded at runtime by _default_base_url, and the destination is a bare IP unrelated to the credential's issuer. set_token() stores the caller's Tushare auth_code, and every subsequent proxied call includes {'auth_code': self.auth_code,...} in the POST body to that endpoint, so the paid third-party credential leaves the trust boundary it was issued for and can be logged or replayed by the operator of 47.112.191.75. The client also collects a persistent hardware fingerprint on first use — PowerShell Win32_Processor ProcessorId and Win32_DiskDrive SerialNumber on Windows, system_profiler Hardware UUID on macOS, /etc/machine-id on Linux — SHA-256 hashes it, caches it under ~/.tsshare/device_id.json, and attaches it as meta.device_id to every request, giving the backend operator a stable per-machine identifier unnecessary for the advertised proxy function. TLS certificate verification on the requests.Session is disabled by default (session.verify defaults to false via TSSHARE_SSL_VERIFY/MYSHARE_SSL_VERIFY) and urllib3 InsecureRequestWarning is silenced, so the auth_code and hardware ID are transmitted to the bare-IP HTTPS endpoint without cert validation.

Malicious versions

20 flagged
1.0.01.0.11.0.21.0.31.0.41.0.51.0.61.0.71.0.81.0.91.0.101.0.111.0.121.0.131.0.141.0.151.0.161.0.171.0.181.0.19

Indicators of compromise (SHA-256)

27b53b00771492d758231bd358fe62b1c212a76c2628633e9b3e2c308285779f
4cfc237fd6890867155c1ff9e99ae031d38b6d7c5fa9a5d54a24e8fb206f6603
7976188a8832f8f124055bb4a64019aba18321a6553889e190a0792e1932306b
860aab879124b80cf175aabdd71fccc2a5ac0582ff66b383af6d1e1216cbd8c6
a62ed7952029bd8db20aa25cad8b91a0f7366728bff9533b6f035a735eb53488
d7eef0f32ee48fc8f7ed0bcf42cbccb055aac1a2e64b71e88a207d6e584f72c1
059237c3b3d57a2d16a12fb9a7a8aed2d129ca220262fbdf9386b5a10c8fd47a
104ff67136d4d4edd657b55027cc4013f1f911e8e7baeb720a5f241b84567837
539c8fdb69887b093801655215f1857f53abb20e6dc763198c543def86c39387
8bbd950208161283bead87e6a397c4f38046a0e65b153881c2b8750912e8a949
3fe365ccea70fc8af7042bd5796f978d63edb77c238c249baa3c41dd8e3b690a
5773ffd7450523907c75fed5906c28ba9e35920689614631b40b7eb7471726cf
6633256ccb3f2508e8abc229b6ed16748df2c952028ce3acfd5fe35885bb2e8e
c26fc1e77b9e28e13519ba4db339d9be9a419a6cb9e4dad46d12d1fe6f6fe2a1
c8b1a62ab1eeff36d10ee9df26e1d1add0d42ca2b5db76f8fcbe03fa9728708c
2fd73fc923cab6ea3a1bc55970177edabdfb8a906725ad79fd2658197cac7309
3ac7e671440277f008405ffd44db1b592a280c487ecc5a2b779dc941e147ff95
8cb915e1a9beb577388b20364a023339bf045f5fe846f45da611b1164f84c092
caf0d9f6e28934e700ad2fe788fb039978dc69d9dae35135f332154a682bdfc0
ccbfdecf287ce6f2043f544d4749e09660082ea3932a0668edbc5010703d70b5

Detection & response playbook

Credential / info stealer
  1. Find it

    Search your lockfiles and build artifacts for tsshare (20 malicious versions).

  2. If you installed it — respond

    tsshare is built to steal secrets, so assume every credential the build or runtime could read is compromised. Remove it from your project and lockfile, then rotate ALL exposed secrets — npm/registry tokens, cloud keys, CI/CD secrets, SSH keys, and any .env values — from a known-clean machine. Audit logs for unauthorized use of those credentials.

  3. Did it already run?

    If tsshare was installed, its post-install payload may already have run. Removing the package does not undo that — check outbound connections and credential use from the install window onward.

Frequently asked questions

No. tsshare on PyPI has been identified as a malicious package (versions 1.0.0, 1.0.1, 1.0.2, 1.0.3, 1.0.4, 1.0.5, 1.0.6, 1.0.7, and 12 more flagged). It should be removed immediately — do not install or keep it in your dependency tree.

Campaign

IN-MAL-2026-019735IN-MAL-2026-019946IN-MAL-2026-019938IN-MAL-2026-019933IN-MAL-2026-019945IN-MAL-2026-019943IN-MAL-2026-019941IN-MAL-2026-019930IN-MAL-2026-019940IN-MAL-2026-019937IN-MAL-2026-019934IN-MAL-2026-019932IN-MAL-2026-019942IN-MAL-2026-019936IN-MAL-2026-019944IN-MAL-2026-019939IN-MAL-2026-020437IN-MAL-2026-020439IN-MAL-2026-020436IN-MAL-2026-020435

References

Credits

  • Amazon Inspector · finder
  • Cyberstorm.mu team · finder
  • codelake Research · finder

Detect & block this

O3 blocks tsshare-class packages before install and in CI — and if it already ran, its runtime egress monitoring catches the credential exfiltration and severs the channel.

Explore

tsshare (PyPI) malicious package — MAL-2026-16044 | O3 Security