В начале июля 2025 года в репозитории Python Package Index (PyPI) появился подозрительный пакет под названием *cloudscrapersafe*. На первый взгляд он выглядел как инструмент для обхода защиты Cloudflare, однако внутри скрывался опасный функционал для перехвата платежных данных. Эта история вновь напомнила миру о растущих угрозах в цепочке поставок ПО, когда злоумышленники злоупотребляют доверием разработчиков, подменяя легитимные библиотеки вредоносными аналогами.
Описание
Пакет cloudscrapersafe позиционировался как улучшенная версия популярной библиотеки cloudscraper, которая используется для автоматизации работы с сайтами, защищенными Cloudflare в режиме IUAM (I’m Under Attack Mode). Однако вместо безопасного обхода антибот-систем этот пакет незаметно внедрял логику, предназначенную для кражи данных кредитных карт и их передачи через Telegram-бота. К счастью, администраторы PyPI быстро обнаружили угрозу и удалили пакет, но за несколько часов он уже мог быть загружен пользователями и внедрен в рабочие процессы.
Что делает этот случай особенно тревожным? Во-первых, cloudscraper - это инструмент с более чем 1,4 миллиона загрузок, и его использование уже само по себе находится в серой зоне, поскольку он предназначен для обхода систем безопасности. Это лишний раз подчеркивает риски, связанные с применением подобных утилит: разработчики нередко добавляют их в проекты, не задумываясь о том, что код может быть изменен злоумышленниками. Во-вторых, атака представляет собой классический пример компрометации цепочки поставок: злоумышленник копирует существующую библиотеку, слегка меняет название, добавляет вредоносный код, оставляя исходный функционал нетронутым, чтобы избежать подозрений.
Технически cloudscrapersafe работал следующим образом. Пакет перехватывал HTTP-запросы, отправляемые через модуль requests, и искал среди них POST-запросы к определенным платежным шлюзам. Для маскировки вредоносной активности URL-адреса этих сервисов хранились в закодированном виде (base64), что затрудняло их обнаружение при статическом анализе. Если пакет обнаруживал обращение к одному из целевых доменов, он извлекал реквизиты карт - номера, сроки действия и другие данные, - а затем сохранял их во временных переменных.
Затем, если ответ от платежного шлюза содержал признаки успешной транзакции (например, определенные заголовки или JSON-структуру), вредоносный код активировался. Он формировал запрос к Telegram-боту, используя сложную систему обфускации: URL и параметры собирались из списков ASCII-кодов, чтобы затруднить анализ. Таким образом, злоумышленники могли удаленно получать украденные данные, даже если разработчики не заметили подозрительной активности в своем коде.
Этот инцидент демонстрирует, насколько изощренными становятся атаки через открытые репозитории. Злоумышленники все чаще внедряют вредоносный код не в малоизвестные библиотеки, а в популярные инструменты или их копии, полагаясь на автоматизацию процессов разработки. Многие проекты подключают зависимости без тщательной проверки, особенно если пакет выглядит знакомым или имеет высокий рейтинг загрузок.
Главные выводы из этой истории очевидны. Во-первых, разработчикам стоит с осторожностью относиться к любым библиотекам, предназначенным для обхода систем безопасности, даже если они кажутся легитимными. Во-вторых, репозитории вроде PyPI должны оперативнее реагировать на подобные угрозы: в данном случае пакет оставался доступным для загрузки почти сутки после обнаружения, что могло привести к серьезным последствиям. В-третьих, командам безопасности необходимо внедрять дополнительные меры проверки зависимостей, включая статический анализ кода и мониторинг подозрительных HTTP-запросов.
В конечном счете, этот случай показывает, что реальная угроза часто скрывается не в очевидном вредоносном ПО, а в небольших, но крайне опасных модификациях уже знакомых инструментов. Разработчики должны осознавать риски и принимать превентивные меры, чтобы защитить свои проекты от подобных атак.
Индикаторы компрометации
Domains
- api-mobile-pre.baccredomatic.com
- archivos.baccredomatic.com
- baccredomatic.com
- checkout.baccredomatic.com
- compassmerchantsolutions.com
- cr.csp.baccredomatic.com
- credomatic.com
- credomatic.compassmerchantsolutions.com
- developer-test.baccredomatic.com
- ecommerce.credomatic.com
- miviaje.baccredomatic.com
- mobile.baccredomatic.com
- pfm.baccredomatic.com
- productos.baccredomatic.com
- secure.compassmerchantsolutions.com
- test.baccredomatic.com
URLs
- http://credomatic.compassmerchantsolutions.com/
- http://secure.compassmerchantsolutions.com/
- https://checkout.baccredomatic.com/LjgxODQxODQ4NjFkNmFlNDE2OGQ0ODMxNzQ5OTExNTc0
- https://checkout.baccredomatic.com/LjhmZTA3MjM0NDRkZTYwMzA0NTU1MjgxNzQ4OTYwNDc4
- https://checkout.baccredomatic.com/Ljk0ZjgxNDYxMzc3Yzk4YjQ4NzA4MjUxNzQ5MTU0MTY5
- https://checkout.baccredomatic.com/MDY5NjY4NThjLjk4MzQ1ODY3NzQxYzExNzUyOTYyNjUy
- https://checkout.baccredomatic.com/Mjk1NWFjNzcuNGM5NjU5MjgzZGQ2YjMxNzQwMjMyNjIw
- https://checkout.baccredomatic.com/MWI2MDZkZDAyMzU1LjA0MDdjYjY1Y2UxNzA2OTc4NzYz
- https://checkout.baccredomatic.com/NDg2NjdlMDUuYzk2NDNhMWUzMjQwMjgxNzUxMzI1Mjk0
- https://checkout.baccredomatic.com/NDM0OTY5NjgyMjVkOWI0OGQuNjU4NzExNzUxOTkzMTI1
- https://checkout.baccredomatic.com/NjhmNTM2MTcuMDMzYzUxMjgyMzU4ZDQxNzUwODg5NjEz
- https://checkout.baccredomatic.com/NTUzNjY4ODguMTFjNjg4MzMzMmYxZjcxNzUxMDYyNjU5
- https://checkout.baccredomatic.com/OC42ZDM2NmY3ODA3NDUyMWU4YzdkMDgxNzUyNjEzMTAx
- https://checkout.baccredomatic.com/ODdmNzM2MzE2YzAwYTg3OTgwLjU0OTgxNzUyOTYxOTUx
- https://checkout.baccredomatic.com/ODMzNmY5OTY3Yzc0OC43MzYwNjM1Y2IxNzUyNjEyNjY4
- https://checkout.baccredomatic.com/ODU0Mzk2Ni4xOTc2NjAzMDRhNDJiODgxNzUyMzQ5MjM2
- https://checkout.baccredomatic.com/purchase/order/
- https://checkout.baccredomatic.com/result/21045075
- https://checkout.baccredomatic.com/Yi4xNjI4NzQ2MzU4NTE4MTQ1NWU5MjYxNzQ5MzMzNjE3
- https://checkout.baccredomatic.com/YTQwOWQ3LjU4ZDY2MWQ2NDM4NjA2NTcxNzUyMDEyMjA1
- https://checkout.baccredomatic.com/Zi4yMDI2ODg2NDI0OGExZDQ5Njg3ODgxNzQ5NzQyMjE2
- https://checkout.baccredomatic.com/ZTkwODg2MjA2NDMyNDI2YzZlLjMzNzExNzUxOTI1NDc1
- https://credomatic.compassmerchantsolutions.com/api/transact.php
- https://credomatic.compassmerchantsolutions.com/js/v1/Gateway.js
- https://ecommerce.credomatic.com:447/3DS/API/api/Secure/Execute
- https://miviaje.baccredomatic.com/travel/es-hn/checkout
- https://secure.compassmerchantsolutions.com/api/transact
- https://www.baccredomatic.com/es-gt/personas/cuentas
- https://www.baccredomatic.com/es-gt/personas/tarjetas/solicitud-de-tarjeta-de-credito-pricesmart/solicitud
- https://www.baccredomatic.com/es-hn/personas/tarjetas/credito/solicitud
- https://www.baccredomatic.com/es-pa/personas/cuentas
- https://www.baccredomatic.com/es-sv/personas/tarjetas/destacadas/tarjeta-clasica-economia/visa/clasi