MAL-2026-10755

See a problem?
Import Source
https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/captcha-solve-api/MAL-2026-10755.json
JSON Data
https://api.osv.dev/v1/vulns/MAL-2026-10755
Published
2026-07-16T18:42:07Z
Modified
2026-07-28T14:37:28.984560619Z
Summary
Malicious code in captcha-solve-api (PyPI)
Details

-= Per source details. Do not edit below this line.=-

Source: amazon-inspector (99621af0900df34246c87811ea5c2a643f2b3805601136dcc0a6768e48af925f)

The PyPI package captcha-solve-api contains no captcha functionality and is instead a binary dropper disguised as an analytics SDK. A custom setuptools install class copies telemetry.pth into site-packages, and site.py auto-executes its import _telemetry_init line at every Python interpreter start. _telemetry_init._bootstrap() spawns a daemon thread that runs _telemetry_transport.Client.initialize(), which selects a per-OS/arch asset path (/pkg/package, /pkg/package-arm64, /pkg/loader_mac, /pkg/package.exe) from rotating Cloudflare Worker hosts (package-proxy.cf5oobworker.workers.dev, package-proxy.cf8oobworker.workers.dev, package-proxy.cf12oobworker.workers.dev, package-proxy.cf17-ddb.workers.dev, package-proxy.cf25-6eb.workers.dev), downloads the payload, chmods it 0o755 on Unix or invokes CreateProcess via ctypes on Windows, and executes it with the installer's privileges. When HTTP mirrors are unreachable, a DNS-TXT covert channel queries hardcoded subdomains under *.dl.well1.site (tin/tina/ldr/win.dl.well1.site) via public resolvers 8.8.8.8 and 1.1.1.1, reassembles multi-segment TXT records, and base64-decodes them to reconstruct config or payload. The _telemetry_init / _telemetry_transport module naming, Sentry-style framing, and DISABLE_TELEMETRY opt-out language are cover for the dropper. Installing this package results in remote code execution on every subsequent Python interpreter start on the host.

Source: kam193 (6745bff1a72b44a9e53129210993aa7a3d0b95e8d9a0a2b2cdfe91324a8e8477)

Package presents little functionality, but excessive fake 'telemetry' module. This fake telemetry is used to download and run malicious executables. Code is designed to survive different blocks: first, there is an attempt to download the executable from one of five Cloudflare Workers. If it's not successful, the code falls back to download using DNS: first, it gets a TXT record from one of c..dl.well1[.]site domains, depending on the system. This record returns a number, which is then used to iterate over domains in the form <0...n>..dl.well1[.]site and reconstruct the encoded executable from their TXT records. The downloaded binary is then executed and removed afterward. Using a PTH file ensures persistence and runs on every Python start. In this campaign, versions 0.0.1 hold disarmed code (without the necessary configuration), which is completed in further updates.

This is a continuation of the 2026-07-haproxy-config-client campaign.


Category: MALICIOUS - The campaign has clearly malicious intent, like infostealers.

Campaign: 2026-07-andreiiiiiii_i

Reasons (based on the campaign):

  • The package contains code to exfiltrate basic data from the system, like IP or username. It has a limited risk.

  • The package overrides the install command in setup.py to execute malicious code during installation.

  • Downloads and executes a remote executable.

  • covering-tracks

  • persistence

  • abuses-pth

  • data-stored-in-dns

Database specific
{
    "iocs": {
        "domains": [
            "package-proxy.cf8oobworker.workers.dev",
            "package-proxy.cf5oobworker.workers.dev",
            "package-proxy.cf25-6eb.workers.dev",
            "package-proxy.cf17-ddb.workers.dev",
            "win.dl.well1.site",
            "tina.dl.well1.site",
            "tin.dl.well1.site",
            "ldr.dl.well1.site"
        ]
    },
    "malicious-packages-origins": [
        {
            "versions": [
                "0.0.1"
            ],
            "source": "amazon-inspector",
            "sha256": "ee854f4888e58f81b9e22e7addd740d28a717be453133c10267dd91fc5e50cee",
            "modified_time": "2026-07-16T18:42:07Z",
            "id": "IN-MAL-2026-010751",
            "import_time": "2026-07-16T18:54:02.771178464Z"
        },
        {
            "versions": [
                "0.0.1",
                "8.5.3",
                "8.5.4"
            ],
            "source": "kam193",
            "sha256": "429dcc1b806027e55c9761344777e12e795b2d7302197287a85593acf1da2094",
            "modified_time": "2026-07-20T14:11:28.873462Z",
            "id": "pypi/2026-07-andreiiiiiii_i/captcha-solve-api",
            "import_time": "2026-07-20T16:06:06.874609633Z"
        },
        {
            "versions": [
                "0.0.1",
                "8.5.3",
                "8.5.4"
            ],
            "source": "kam193",
            "sha256": "6745bff1a72b44a9e53129210993aa7a3d0b95e8d9a0a2b2cdfe91324a8e8477",
            "modified_time": "2026-07-20T14:11:28.873462Z",
            "id": "pypi/2026-07-andreiiiiiii_i/captcha-solve-api",
            "import_time": "2026-07-20T17:01:49.031661827Z"
        },
        {
            "versions": [
                "8.5.3"
            ],
            "source": "amazon-inspector",
            "sha256": "0897a483150112638e6bc110f0f560bc59bb02dbc8425df79b18261f7021b4d3",
            "modified_time": "2026-07-28T13:37:45Z",
            "id": "IN-MAL-2026-010928",
            "import_time": "2026-07-28T14:19:59.455669212Z"
        },
        {
            "versions": [
                "8.5.4"
            ],
            "source": "amazon-inspector",
            "import_time": "2026-07-28T14:19:59.802728791Z",
            "modified_time": "2026-07-28T13:38:29Z",
            "id": "IN-MAL-2026-010933",
            "sha256": "99621af0900df34246c87811ea5c2a643f2b3805601136dcc0a6768e48af925f"
        }
    ]
}
References
Credits

Affected packages

PyPI / captcha-solve-api

Package

Name
captcha-solve-api
View open source insights on deps.dev
Purl
pkg:pypi/captcha-solve-api

Affected ranges

Affected versions

0.*
0.0.1
8.*
8.5.3
8.5.4

Database specific

indicators
{
    "evidence_files": [
        {
            "tlsh": "7b21872b8c69282059f9c5288963c899f9651357b920d48b7afc43082f793e2c74f557",
            "sha256": "e3f28d6e4ff0dfe7fef740657c04b781a36c0cb4630d344cf51cd83c1ba22140",
            "path": "setup.py"
        },
        {
            "tlsh": "04b33cb6ed1bac228177c91e9c86e047f72a4753222c614779bc826c2f74715c2e4eed",
            "sha256": "3b2e157d9383b96d3591c354bd80acb2ac525529f18fb1522fe49f22520ea650",
            "path": "_telemetry_transport.py"
        }
    ],
    "package_integrity": [
        {
            "filename": "captcha_solve_api-0.0.1.tar.gz",
            "hashes": {
                "md5": "94c94dc3bcc166153a013b0e1c1e6e99",
                "sha256": "59f76cf5bcdfe73d7316f91fd296548893f3066af26086f6d6e55c40406b3c7a",
                "blake2b_256": "79bf76e921e613f4bc6abed174da0b22839f70cc417e3392833a4890b87c7535"
            }
        }
    ]
}
source
"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/pypi/captcha-solve-api/MAL-2026-10755.json"
cwes
[
    {
        "name": "Embedded Malicious Code",
        "description": "The product contains code that appears to be malicious in nature.",
        "cweId": "CWE-506"
    },
    {
        "name": "Embedded Malicious Code",
        "description": "The product contains code that appears to be malicious in nature.",
        "cweId": "CWE-506"
    },
    {
        "name": "Embedded Malicious Code",
        "description": "The product contains code that appears to be malicious in nature.",
        "cweId": "CWE-506"
    }
]