LINUX.ORG.RU
ФорумTalks

GlassWorm уже скомпрометировал 433 репозитория

 ,


0

1

200 в Python репозиториях и 151 - JS/TS на GitHub, 72 расширениях VSCode/OpenVSX, а также 10 пакетах npm.

На данный момент вирус пытается похитить не только данные криптокошельков и реквизиты доступа, но и токены доступа, SSH-ключи и данные о среде разработки, в которой работает жертва.

Разработчикам под Python, которые используют GitHub или клонированные с него репозитории, рекомендовано проверить свой код: последовательность символов lzcdrtfxyqiplpd на данный момент является индикатором заражения GlassWorm.

Анализ комментариев в коде указывает, что родным языком создателей GlassWorm является русский; если вирус обнаруживает русскую локаль, он не запускается.

https://xakep.ru/2026/03/19/glassworm-is-back-2/ (с) Нефедова Маня.



Последнее исправление: Lusine (всего исправлений: 1)

Хакеры использовали «невидимые» символы Unicode для того, чтобы скрывать свой код, воровавший данные о криптокошельках и реквизиты доступа разработчиков, использовавших вышеперечисленные репозитории.

Lusine
() автор топика

Анализ комментариев в коде указывает, что родным языком создателей GlassWorm является русский

Как анализ проводили?

rumgot ★★★★★
()
Ответ на: комментарий от Lusine

Хакеры использовали «невидимые» символы Unicode для того, чтобы скрывать свой код, воровавший данные о криптокошельках и реквизиты доступа разработчиков, использовавших вышеперечисленные репозитории.

Как этот код попал в питон-репы?

MoldAndLimeHoney ★★
()

Тянет на новость, но движок не позволяет переносить из форума в новости.

dataman ★★★★★
()
Ответ на: комментарий от MoldAndLimeHoney

Атакующие используют украденные токены GitHub, чтобы осуществить force-push вредоносных коммитов в Python-репозитории. Хакеры добавляют обфусцированный код в файлы вроде setup.py или main.py, при этом сохраняя оригинальное сообщение и дату коммита. В результате следов взлома практически не остается: никаких пулл-реквестов или подозрительных коммитов.

Lusine
() автор топика
Ответ на: комментарий от Lusine

Замечу, что в случае с svn такое было провернуть не получилось. Любители наплевательски относиться к истории коммитов получили по заслугам (ну, про любителей скачивать с интернета всё подряд и сразу запускать - отдельная история).

firkax ★★★★★
()
Последнее исправление: firkax (всего исправлений: 1)
Ответ на: комментарий от Lusine

Гитхаб это просто хостинг репозиториев (а так же статических тарболлов и прочих файлов). Он ничем не лучше какого-нить narod.ru или просто файлообменника в плане доверия к его контенту.

firkax ★★★★★
()

Анализ комментариев в коде указывает, что родным языком создателей GlassWorm является русский; если вирус обнаруживает русскую локаль, он не запускается.

как толсто…

seiken ★★★★★
()

72 расширениях VSCode/OpenVSX

ну т.е. если я не использую OpenVSX, а только MS, то как бы и пофиг?

seiken ★★★★★
()
Ответ на: комментарий от firkax

Вопрос не в доверии, а в самом контенте. На гитхабе хранится то, что используется программистами. На народ.ру - нет.

seiken ★★★★★
()

если вирус обнаруживает русскую локаль, он не запускается.

Наш слон, получается.

mikhalich ★★
()
Ответ на: комментарий от rumgot

Анализ провели по методу хайли-лайкли, это же общепринятая методика

no-dashi-v2 ★★★★
()
Ответ на: комментарий от firkax

https://github.com/search?q=lzcdrtfxyqiplpd&type=code

Вон в тех файлах эта дрянь в конце.

Берёшь такой файл с начала вредоносного хвоста (он начинается с aqgqzxkfjzbdnhz = __import__('base64')).

Заменяешь последнюю строку с exec(compile(... на print(ycqljtcxxkyiplo.decode('utf8'))

Запускаешь. Вот перед тобой и исходники.

shdown
()
Ответ на: комментарий от Lusine

Атакующие используют украденные токены GitHub, чтобы осуществить force-push вредоносных коммитов в Python-репозитории.

В настройках репозитория GitHub можно запретить force-push. Пора бы уже это сделать обязательным для репозиториев опубликованных пакетов.

X512 ★★★★★
()
Ответ на: комментарий от firkax

Ну да, я вот сделал grep -iE '[а-яё]':

# Эмуляция объекта Buffer из Node.js
        """Статический метод для создания буфера из данных"""
    """Эмуляция декоратора __name из JS"""
    Получение подписей для адреса Solana
            # Создаем запрос
            # Выполняем запрос с таймаутом
            # Проверка на наличие ошибки в ответе
            await asyncio.sleep(0.1)  # 100ms задержка
    Получение memo из транзакций и парсинг JSON
            # Фильтрация транзакций с memo
        # Удаление паттерна типа [0] из начала memo
    Проверка, находится ли система в России
    # Проверка языка системы
    # Получение локали системы
    # Проверка на русский язык
    russian_patterns = ['ru_RU', 'ru-RU', 'russian', 'россия', 'русский']
    # Проверка часового пояса
        # Пытаемся получить часовой пояс из разных источников
        # Для Linux/Mac
            # Пытаемся получить из symlink
        # Для Windows
        # Fallback - используем смещение
    # Проверка смещения UTC
    Скачивание и распаковка Node.js
        # Определяем URL для скачивания в зависимости от платформы
        # Путь для сохранения
        # Проверяем, не скачан ли уже Node.js
        # Скачиваем файл
        # Распаковываем
        # Удаляем архив
    Загрузка данных по URL и вызов callback с результатом
        # Создаем запрос с заголовком os
        # Выполняем запрос
            # Получаем заголовки
    Основная функция
    # Ждем 10 секунд перед выполнением
    # Проверка на русскую систему
    # Работа с init.json
            # Проверка даты
                check_date = datetime.fromtimestamp(check_data['date'] / 1000)  # конвертация из ms
                # Обновление даты
    # Для macOS создаем файл
    # Получение данных и выполнение кода
                # Скачиваем Node.js
                # Получаем данные
                # Создаем временный JS файл
                # Формируем JS код
                # Записываем JS файл
                    # Выполняем JS файл через Node.js
        # Вызов функции с декодированным URL
# Запуск асинхронной функции
shdown
()
Ответ на: комментарий от shdown

Клиенты нарочито бесполезные. Как будто ЛЛМ попросили поподробнее прокомментировать по-русски.

seiken ★★★★★
()

200 в Python репозиториях и 151 - JS/TS на GitHub, 72 расширениях VSCode/OpenVSX, а также 10 пакетах npm.

Не хватает репозиториев с растом, а так компания-то типичная: жабоскрип да питухон.

Smacker ★★★★★
()

Анализ комментариев в коде указывает, что родным языком создателей GlassWorm является русский; если вирус обнаруживает русскую локаль, он не запускается.

ну слава богам, мы спасены!

Reset ★★★★★
()
Ответ на: комментарий от shdown

https://github.com/search?q=lzcdrtfxyqiplpd&type=code

Вон в тех файлах эта дрянь в конце.

# -*- coding: utf-8 -*-
aqgqzxkfjzbdnhz = __import__('base64')
wogyjaaijwqbpxe = __import__('zlib')
idzextbcjbgkdih = 134
qyrrhmmwrhaknyf = lambda dfhulxliqohxamy, osatiehltgdbqxk: bytes([wtqiceobrebqsxl ^ idzextbcjbgkdih for wtqiceobrebqsxl in dfhulxliqohxamy])
lzcdrtfxyqiplpd = 'eNq9W19z3...'
runzmcxgusiurqv = wogyjaaijwqbpxe.decompress(aqgqzxkfjzbdnhz.b64decode(lzcdrtfxyqiplpd))
ycqljtcxxkyiplo = qyrrhmmwrhaknyf(runzmcxgusiurqv, idzextbcjbgkdih)
exec(compile(ycqljtcxxkyiplo, '<>', 'exec'))

То есть для расшифровки нужно bytes([b ^ 134 for b in zlib.decompress(base64.b64decode(lzcdrtfxyqiplpd))]).decode('utf8')

question4 ★★★★★
()

данные о среде разработки, в которой работает жертва

Боюсь, разработчики либо просветлеют, либо роскомнадзорнутся, если увидят, что моя «среда разработки» — это ed(1)

buddhist ★★★★★
()
Ответ на: комментарий от seiken

Может быть даже не прокомментировать, а написать и обфусцировать. А то что внутри обфускации комменты оказались может никто и не заметил.

firkax ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)