<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>npm &#8211; PT ESC</title>
	<atom:link href="/tag/npm/feed/index.xml" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description></description>
	<lastBuildDate>Wed, 30 Sep 2026 19:24:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>/wp-content/uploads/2026/09/cropped-cropped-large_icon-32x32.png</url>
	<title>npm &#8211; PT ESC</title>
	<link>/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Enterprise-grade validation system with schema support</title>
		<link>/enterprise-grade-validation-system-with-schema-support/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Wed, 26 Aug 2026 12:33:34 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">/enterprise-grade-validation-system-with-schema-support/</guid>

					<description><![CDATA[Enterprise-grade validation system with schema support (c) Автор десятка троянов, забывший добавить &#34;Enterprise-grade&#34; обфускацию Мы обнаружили и сообщили администрации npm о серии вредоносных пакетов: @phonos/types @structureit/ir-dealapi-js @wame/ngx-adfs @wame/ngx-frf-utilities cclr-component-resources compliancepolicyserv connectedmerchantsserv ftapi-core…]]></description>
										<content:encoded><![CDATA[<blockquote>
<p>Enterprise-grade validation system with schema support</p>
<p><cite><strong>(c) Автор десятка троянов, забывший добавить &quot;Enterprise-grade&quot; обфускацию</strong></cite></p></blockquote>
<p>Мы обнаружили и сообщили администрации npm о серии вредоносных пакетов:</p>
<ul>
<li><code>@phonos/types</code></li>
<li><code>@structureit/ir-dealapi-js</code></li>
<li><code>@wame/ngx-adfs</code></li>
<li><code>@wame/ngx-frf-utilities</code></li>
<li><code>cclr-component-resources</code></li>
<li><code>compliancepolicyserv</code></li>
<li><code>connectedmerchantsserv</code></li>
<li><code>ftapi-core</code></li>
<li><code>lakk-analytics</code></li>
<li><code>meshim-frontend-config</code></li>
<li><code>nms-dashboard-js</code></li>
<li><code>oc-aa-module-client</code></li>
<li><code>oc-ccp-module-client</code></li>
<li><code>oc-navbar-module-client</code></li>
<li><code>qr-code-styling-temp</code></li>
<li><code>uploader-frontend</code></li>
<li><code>uploader-frontend-legacy</code></li>
</ul>
<figure class="wp-block-image"><img width="1024" height="625" src="/wp-content/uploads/2026/08/photo_603@26-08-2026_12-33-34-1024x625.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/08/photo_603@26-08-2026_12-33-34-1024x625.jpg 1024w, /wp-content/uploads/2026/08/photo_603@26-08-2026_12-33-34-300x183.jpg 300w, /wp-content/uploads/2026/08/photo_603@26-08-2026_12-33-34-768x468.jpg 768w, /wp-content/uploads/2026/08/photo_603@26-08-2026_12-33-34-1536x937.jpg 1536w, /wp-content/uploads/2026/08/photo_603@26-08-2026_12-33-34-2048x1249.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>В совокупности пакеты были скачаны более 1600 раз</figcaption></figure>
<p>Перечисленные пакеты содержат схожий код и стратегию размещения: сперва публикуется чистая версия (обычно это <code>9.9.0</code>), через пару дней публикуется «обновление » с нежелательным функционалом.</p>
<p>ㅤ</p>
<p>Вредоносная логика срабатывает во время установки, исполняя <code>index.js</code> c передачей управления <code>./lib/core.js</code></p>
<figure class="wp-block-image"><img width="1024" height="967" src="/wp-content/uploads/2026/08/photo_604@26-08-2026_12-33-34-1024x967.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/08/photo_604@26-08-2026_12-33-34-1024x967.jpg 1024w, /wp-content/uploads/2026/08/photo_604@26-08-2026_12-33-34-300x283.jpg 300w, /wp-content/uploads/2026/08/photo_604@26-08-2026_12-33-34-768x725.jpg 768w, /wp-content/uploads/2026/08/photo_604@26-08-2026_12-33-34-1536x1450.jpg 1536w, /wp-content/uploads/2026/08/photo_604@26-08-2026_12-33-34-2048x1933.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p>Скрипты с вредоносной логикой довольно компактны — каждый по отдельности занимает не больше килобайта.</p>
<p>ㅤ</p>
<p>В коде используются две техники сокрытия логики: однострочники и хранение констант в виде массивов ASCII-кодов без дополнительной обфускации.</p>
<p>ㅤ</p>
<p>Назначение сниппетов на примере <code>@phonos/types</code> (мы добавили в код поясняющие комментарии):</p>
<figure class="wp-block-image"><img width="1024" height="205" src="/wp-content/uploads/2026/08/photo_605@26-08-2026_12-33-34-1024x205.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/08/photo_605@26-08-2026_12-33-34-1024x205.jpg 1024w, /wp-content/uploads/2026/08/photo_605@26-08-2026_12-33-34-300x60.jpg 300w, /wp-content/uploads/2026/08/photo_605@26-08-2026_12-33-34-768x154.jpg 768w, /wp-content/uploads/2026/08/photo_605@26-08-2026_12-33-34-1536x307.jpg 1536w, /wp-content/uploads/2026/08/photo_605@26-08-2026_12-33-34.jpg 1990w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption><code>b02e30.js</code> хранит информацию о C2. Из занятного: злоумышленник поленился закодировать имя кампании</figcaption></figure>
<figure class="wp-block-image"><img width="1024" height="397" src="/wp-content/uploads/2026/08/photo_606@26-08-2026_12-33-34-1024x397.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/08/photo_606@26-08-2026_12-33-34-1024x397.jpg 1024w, /wp-content/uploads/2026/08/photo_606@26-08-2026_12-33-34-300x116.jpg 300w, /wp-content/uploads/2026/08/photo_606@26-08-2026_12-33-34-768x298.jpg 768w, /wp-content/uploads/2026/08/photo_606@26-08-2026_12-33-34-1536x595.jpg 1536w, /wp-content/uploads/2026/08/photo_606@26-08-2026_12-33-34.jpg 1590w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption><code>6ad264.js</code> — резолвит модули <code>os</code>, <code>dns</code> и <code>process</code></figcaption></figure>
<figure class="wp-block-image"><img width="1024" height="778" src="/wp-content/uploads/2026/08/photo_607@26-08-2026_12-33-34-1024x778.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/08/photo_607@26-08-2026_12-33-34-1024x778.jpg 1024w, /wp-content/uploads/2026/08/photo_607@26-08-2026_12-33-34-300x228.jpg 300w, /wp-content/uploads/2026/08/photo_607@26-08-2026_12-33-34-768x583.jpg 768w, /wp-content/uploads/2026/08/photo_607@26-08-2026_12-33-34-1536x1167.jpg 1536w, /wp-content/uploads/2026/08/photo_607@26-08-2026_12-33-34.jpg 1540w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption><code>core.js</code> — получает и эксфильтрует информацию</figcaption></figure>
<p>Нагрузка на первый взгляд выглядит безобидной — всего лишь получение злоумышленником базового представления о пользователе, установившем пакет. Можно даже допустить версию, что эти пакеты были созданы из благородных побуждений. С другой стороны, npm прямо запрещает размещение подобных пакетов даже в исследовательских целях:</p>
<blockquote>
<p>Несколько примеров неприемлемого контента:<br />
&#8230;<br />
3. Контент, содержащий вредоносный компьютерный код, такой как компьютерные вирусы, компьютерные черви, руткиты, бэкдоры или шпионское ПО. <strong>Это включает контент, предоставленный в исследовательских целях.</strong></p>
<p><cite><a href="https://docs.npmjs.com/policies/open-source-terms#acceptable-use" rel="noopener" target="_blank"><strong>https://docs.npmjs.com/policies/open-source-terms#acceptable-use</strong></a><strong> (перевод)</strong></cite></p></blockquote>
<blockquote>
<p>Не хотите, чтобы ваши CI/CD и устройства разработчиков поучаствовали в такого рода незапланированном опросе? Решение есть: фиды для безопасной разработки в рамках <a href="https://ptsecurity.com/services/fusion/" rel="noopener" target="_blank">PT Fusion</a>.</p>
<p><cite><strong><em>Supply Chain Security Team</em></strong></cite></p></blockquote>
<p><span class="hashtag">#npm</span> <span class="hashtag">#scs</span> <span class="hashtag">#ti</span></p>
<p><a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Хаос, шок, приватные ключи от не менее приватного GitLab 💻</title>
		<link>/chaos-shock-private-keys-from-a-not-so-private-gitlab/</link>
		
		<dc:creator><![CDATA[global_author]]></dc:creator>
		<pubDate>Tue, 28 Jul 2026 19:03:30 +0000</pubDate>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[scs]]></category>
		<guid isPermaLink="false">/chaos-shock-private-keys-from-a-not-so-private-gitlab/</guid>

					<description><![CDATA[Последние пару месяцев злоумышленник распространял трояны с нескольких npm-учеток: alex05255, mdrafiqulislamrabby, b.w1001, abdev8773 и mollspotwood54400. Список пакетов: 🌟 svg-fetcher 🌟 tradepilot 🌟 polytrade 🌟 polymarket-kit 🌟 react-svg-chunk 🌟 gamified-trading-system 🌟 font-huge 🌟…]]></description>
										<content:encoded><![CDATA[<p>Последние пару месяцев злоумышленник распространял трояны с нескольких npm-учеток: <code>alex05255</code>, <code>mdrafiqulislamrabby</code>, <code>b.w1001</code>, <code>abdev8773</code> и <code>mollspotwood54400</code>.</p>
<p><strong>Список пакетов:</strong></p>
<p>🌟 <code>svg-fetcher</code></p>
<p>🌟 <code>tradepilot</code></p>
<p>🌟 <code>polytrade</code></p>
<p>🌟 <code>polymarket-kit</code></p>
<p>🌟 <code>react-svg-chunk</code></p>
<p>🌟 <code>gamified-trading-system</code></p>
<p>🌟 <code>font-huge</code></p>
<p>🌟 <code>font-hub</code></p>
<p>🌟 <code>mdb-vite</code></p>
<p>🌟 <code>router-processor</code></p>
<p>🌟 <code>route-processor</code></p>
<p>Код, по классике жанра, навайбкожен. На это указывают избыточные поясняющие комментарии:</p>
<figure class="wp-block-image"><img width="1024" height="391" src="/wp-content/uploads/2026/07/photo_595@28-07-2026_19-03-30-1024x391.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/07/photo_595@28-07-2026_19-03-30-1024x391.jpg 1024w, /wp-content/uploads/2026/07/photo_595@28-07-2026_19-03-30-300x115.jpg 300w, /wp-content/uploads/2026/07/photo_595@28-07-2026_19-03-30-768x293.jpg 768w, /wp-content/uploads/2026/07/photo_595@28-07-2026_19-03-30.jpg 1442w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="410" src="/wp-content/uploads/2026/07/photo_596@28-07-2026_19-03-30-1024x410.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/07/photo_596@28-07-2026_19-03-30-1024x410.jpg 1024w, /wp-content/uploads/2026/07/photo_596@28-07-2026_19-03-30-300x120.jpg 300w, /wp-content/uploads/2026/07/photo_596@28-07-2026_19-03-30-768x308.jpg 768w, /wp-content/uploads/2026/07/photo_596@28-07-2026_19-03-30.jpg 1238w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<h3>Логика пакетов</h3>
<p>🔗 Конкатенация URL C2 из нескольких констант.</p>
<p>🔗 Запрос следующего стейджа. Из занятного:</p>
<p>🌟Нагрузка версионируется и в коде называется <code>token</code>. Нам известны стейджи <code>106</code>, <code>107</code>, <code>108</code> и <code>116</code>.</p>
<p>Итоговый URL: <code>http://svganchordev.net/icons/&lt;token&gt;</p>
<p></code>🌟 Код передает в заголовках ключ <code>bearrtoken</code> (орфография сохранена, вероятно, автор имел в виду <code>bearertoken</code>) со значением <code>logo</code>.</p>
<p>Второй стейдж представлен сильно обфусцированным JS-кодом-однострочником:</p>
<figure class="wp-block-image"><img width="1024" height="552" src="/wp-content/uploads/2026/07/photo_597@28-07-2026_19-03-30-1024x552.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/07/photo_597@28-07-2026_19-03-30-1024x552.jpg 1024w, /wp-content/uploads/2026/07/photo_597@28-07-2026_19-03-30-300x162.jpg 300w, /wp-content/uploads/2026/07/photo_597@28-07-2026_19-03-30-768x414.jpg 768w, /wp-content/uploads/2026/07/photo_597@28-07-2026_19-03-30-1536x829.jpg 1536w, /wp-content/uploads/2026/07/photo_597@28-07-2026_19-03-30-2048x1105.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /><figcaption>Отформатировали для наглядности, все равно страшно</figcaption></figure>
<p>Стейдж собирает информацию о системе — имя пользователя, имя компьютера, операционную систему — и посредством веб-сокета продолжает общение, принимая команды на исполнение.</p>
<p>Реализация качественная, с мультистейджами, спору нет. Но это все равно вредоносная активность, поэтому репортим пакеты админам NPM 🫥</p>
<p>В релизах с токенами <code>106</code> и <code>116</code> есть изюминка, а именно вшитые публичный и приватный ключи GitLab:</p>
<figure class="wp-block-image"><img width="1024" height="446" src="/wp-content/uploads/2026/07/photo_598@28-07-2026_19-03-30-1024x446.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/07/photo_598@28-07-2026_19-03-30-1024x446.jpg 1024w, /wp-content/uploads/2026/07/photo_598@28-07-2026_19-03-30-300x131.jpg 300w, /wp-content/uploads/2026/07/photo_598@28-07-2026_19-03-30-768x334.jpg 768w, /wp-content/uploads/2026/07/photo_598@28-07-2026_19-03-30-1536x668.jpg 1536w, /wp-content/uploads/2026/07/photo_598@28-07-2026_19-03-30.jpg 2036w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p>Мы не можем воспользоваться этими ключами: они относятся к приватному инстансу GitLab, развернутому в инфраструктуре злоумышленника.</p>
<p>Однако интересно, что кампания ведется на настолько серьезном уровне, что злоумышленнику потребовалось версионирование кода, хотя можно было бы использовать Git локально. Можно предположить, что в GitLab настроен CI/CD-пайплайн для обфускации кода и публикации стейджей.</p>
<blockquote>
<p>Хотите автоматически проверять, попали ли эти и другие вредоносные пакеты в ваш контур? Вам сюда: фиды для безопасной разработки из <a href="https://ptsecurity.com/services/fusion/" rel="noopener" target="_blank">PT Fusion</a>.</p>
</blockquote>
<p><span class="hashtag">#npm</span> <span class="hashtag">#scs</span></p>
<p><a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Кто-то сказал sandbox?</title>
		<link>/did-someone-say-sandbox/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 30 Jun 2026 11:20:01 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">/%d0%ba%d1%82%d0%be-%d1%82%d0%be-%d1%81%d0%ba%d0%b0%d0%b7%d0%b0%d0%bb-sandbox/</guid>

					<description><![CDATA[Кто-то сказал sandbox? 👀 В очередной раз наблюдаем, как злоумышленники проводят неэтичные ресерчи. Дано: Исследователь по безопасности Nicholas Curran Он опубликовал пакеты с интересными названиями: 🌟2 пакета npm-sandbox-ping-[4 символа] 🌟8 пакетов npm-sandbox-research-[4…]]></description>
										<content:encoded><![CDATA[<p><strong>Кто-то сказал sandbox?</strong> 👀</p>
<p>В очередной раз наблюдаем, как злоумышленники проводят неэтичные ресерчи.</p>
<p><strong>Дано:</strong><br />
Исследователь по безопасности <code>Nicholas Curran</code></p>
<p>Он опубликовал пакеты с интересными названиями:<br />
🌟2 пакета <code>npm-sandbox-ping-[4 символа]</code><br />
🌟8 пакетов <code>npm-sandbox-research-[4 символа]</code><br />
🌟<code>postinstall-logger-7x9z</code><br />
🌟<code>pkg-telemetry-r4f9</code><br />
🌟<code>runtime-metrics-w7k2</code><br />
🌟<code>event-metrics-q3x7</code><br />
🌟<code>build-tracker-n5p1</code></p>
<p>Согласно описанию (<em>скриншот 1</em>), эти пакеты созданы в рамках багбаунти-программы. </p>
<p><strong>Автор заявляет, что:</strong><br />
🔗Пакеты безопасны.<br />
🔗Все чувствительные данные перед отправкой хэшируются — не происходит никакого разглашения секретов.<br />
🔗Пакеты не выполняют закрепления в системе, перемещения в сети и деструктивных действий.<br />
🔗Цель исследования: изучить, изолирует ли npm-песочница небезопасные установочные скрипты.</p>
<p>Ресерч безопасности песочниц? Такое мы любим. Давайте посмотрим, как это реализовано.</p>
<p>Нагрузка стартует дважды: до и после установки пакета (<em>скриншот 2</em>). За Windows-логику отвечает <code>beaconXX.js</code>, все остальные платформы обрабатываются <code>beacon_linux.js</code>. Даже macOS.</p>
<p><strong>Логика под Windows</strong></p>
<p><code>beaconXX.js</code> (<em>скриншот 3</em>):<br />
1️⃣ Эксплуатирует известный <a href="https://mitre.ptsecurity.com/ru-RU/T1548.002" rel="noopener" target="_blank">обход UAC</a> через <code>fodhelper.exe</code>. Для этого, помимо запуска файла, необходимо внести изменения в реестр Windows.<br />
2️⃣ Дропает PowerShell-скрипт в <code>%TEMP%</code> и запускает его с повышенными привилегиями.</p>
<p><strong>PowerShell-скрипт:</strong><br />
1️⃣ Удаляет внесенные в реестр изменения.<br />
2️⃣ Собирает:<br />
🐟 артефакты, специфичные для изучаемой песочницы, с диска D, в том числе файл <code>findings.xml</code>;<br />
🐟 список секретов из Credential Manager;<br />
🐟 <code>npm config list</code> — сюда попадают в том числе токены аутентификации для учетной записи npm;<br />
🐟 все переменные окружения.<br />
3️⃣ Заметает следы, перезаписывая <code>findings.xml</code> следующим текстом:</p>
<blockquote><p>&lt;ArrayOfTaskFinding&gt;&lt;/ArrayOfTaskFinding&gt;</p></blockquote>
<p>
4️⃣ Собранные данные кодирует в base64 и просто отправляет на управляющий сервер&#8230; без хэширования, о котором заявлено в <code>README.md</code> 🤪<br />
5️⃣ В вечном цикле каждые 5 секунд обращается к управляющему серверу за командами на исполнение.</p>
<p>Учитывая, как код пытается вмешаться в работу песочницы, можно предположить, что это кастомная песочница с агентом наподобие Cuckoo Sandbox.</p>
<p><strong>Логика под non-Windows</strong></p>
<p><code>beacon_linux.js</code> (скриншот 4):<br />
1️⃣ Собирает:<br />
🐟 список имён всех переменных окружения;<br />
🐟 значения интересных переменных окружения, связанных с GitHub, NPM, раннерами, пользователем;<br />
🐟 список сетевых интерфейсов.<br />
2️⃣ Проверяет возможности для побега из контейнера, собирая:<br />
🐟 содержимое <code>/proc/1/cgroup</code> (информация об ограничениях контейнера);<br />
🐟 команду запуска процесса с <code>PID 1</code>;<br />
🐟 список примонтированных томов.<br />
🐟 набор <code>capabilities</code> своего процесса;<br />
🐟 наличие <code>/var/run/docker.sock</code> (позволяет управлять Docker с потенциалом полностью захватить устройство);<br />
🐟 доступ к <code>/proc/sched_debug</code> (позволяет разведать процессы, запущенные на хосте).<br />
3️⃣ Собирает артефакты, связанные с CI/CD: список файлов текущего проекта и <code>/home/runner/work</code>, логи GitHub.<br />
4️⃣ Отправляет отчет на управляющий сервер.</p>
<p><strong>Заключение</strong></p>
<p>Пакеты не соответствуют благим целям, о которых нам заявляли в <code>README.md</code>, — поэтому мы зарепортили админам NPM об этом недоразумении.</p>
<p>Странно видеть такое поведение от багхантера, имеющего учетную запись на HackerOne с 2017 🤔</p>
<blockquote><p>Хотите проверить свои проекты на наличие вредоносных внешних зависимостей? Попробуйте фиды для безопасной разработки из PT Fusion.</p></blockquote>
<figure class="wp-block-image"><img width="1024" height="382" src="/wp-content/uploads/2026/06/photo_582@30-06-2026_11-20-01-1024x382.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/06/photo_582@30-06-2026_11-20-01-1024x382.jpg 1024w, /wp-content/uploads/2026/06/photo_582@30-06-2026_11-20-01-300x112.jpg 300w, /wp-content/uploads/2026/06/photo_582@30-06-2026_11-20-01-768x286.jpg 768w, /wp-content/uploads/2026/06/photo_582@30-06-2026_11-20-01-1536x573.jpg 1536w, /wp-content/uploads/2026/06/photo_582@30-06-2026_11-20-01-2048x764.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="764" src="/wp-content/uploads/2026/06/photo_583@30-06-2026_11-20-01-1024x764.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/06/photo_583@30-06-2026_11-20-01-1024x764.jpg 1024w, /wp-content/uploads/2026/06/photo_583@30-06-2026_11-20-01-300x224.jpg 300w, /wp-content/uploads/2026/06/photo_583@30-06-2026_11-20-01-768x573.jpg 768w, /wp-content/uploads/2026/06/photo_583@30-06-2026_11-20-01-1536x1147.jpg 1536w, /wp-content/uploads/2026/06/photo_583@30-06-2026_11-20-01-2048x1529.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="764" src="/wp-content/uploads/2026/06/photo_584@30-06-2026_11-20-01-1024x764.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/06/photo_584@30-06-2026_11-20-01-1024x764.jpg 1024w, /wp-content/uploads/2026/06/photo_584@30-06-2026_11-20-01-300x224.jpg 300w, /wp-content/uploads/2026/06/photo_584@30-06-2026_11-20-01-768x573.jpg 768w, /wp-content/uploads/2026/06/photo_584@30-06-2026_11-20-01-1536x1147.jpg 1536w, /wp-content/uploads/2026/06/photo_584@30-06-2026_11-20-01-2048x1529.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p><span class="hashtag">#ti</span> <span class="hashtag">#scs</span> <span class="hashtag">#npm</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Злоумышленник публикует .bash_history смотреть без регистрации и смс</title>
		<link>/the-attacker-publishes-bash-history-watch-without-registration-and-sms/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 12 May 2026 14:29:36 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">/%d0%b7%d0%bb%d0%be%d1%83%d0%bc%d1%8b%d1%88%d0%bb%d0%b5%d0%bd%d0%bd%d0%b8%d0%ba-%d0%bf%d1%83%d0%b1%d0%bb%d0%b8%d0%ba%d1%83%d0%b5%d1%82-bash_history-%d1%81%d0%bc%d0%be%d1%82%d1%80%d0%b5%d1%82%d1%8c/</guid>

					<description><![CDATA[Злоумышленник публикует .bash_history смотреть без регистрации и смс 😱 Команда Supply Chain Security отправила отчет администрации реестра npm о занятной маленькой кампании против Apple, среди них: • apple-infra-network-v2 (170 скачиваний на момент…]]></description>
										<content:encoded><![CDATA[<p><strong>Злоумышленник публикует .bash_history смотреть без регистрации и смс </strong><strong>😱</strong></p>
<p>Команда Supply Chain Security отправила отчет администрации реестра npm о занятной маленькой кампании против Apple, среди них:</p>
<p>• <code>apple-infra-network-v2</code> (170 скачиваний на момент репорта)<br />
• <code>apple-infra-final-escape</code> (326 скачиваний)<br />
• <code>apple-infra-gcp-leak</code> (165 скачиваний)<br />
• <code>apple-infra-ultimate-bypass</code> (153 скачивания)<br />
• <code>agents-a365-runtime</code> — мимикрия под пакет <code>@microsoft/agents-a365-runtime</code> (447 скачиваний)<br />
• <code>apple-security-internal-scanner-v3</code> (185 скачиваний)<br />
• <code>apple-coredata-internal-service</code> (367 скачиваний)</p>
<p>Часть проектов первой волны лаконична и состоит из одного файла <code>package.json</code> весом менее 1 килобайта (<em>скриншот 1)</em>.</p>
<p><strong>Bash-однострочник:</strong><br />
🌟Получает содержимое <code>/etc/resolv.conf</code> — DNS-конфигурацию устройства.<br />
🌟Проверяет возможность разрезолвить домен <code>internal.apple.com</code> через <code>nslookup</code> / <code>host</code>.<br />
🌟Забирает записи ARP-кеша (таблицы сопоставлений ip-адресов на MAC-адреса).<br />
🌟Обращает внимание на следующие переменные окружения по маске: <code>*PROXY*</code>, <code>*TENCENT*</code>, <code>*REGION*</code>, <code>*ZONE*</code>.</p>
<p><strong>Смысл переменных окружения:</strong></p>
<p><span class="spoiler">PROXY* — забрать настройки корпоративных прокси (HTTP_PROXY, HTTPS_PROXY и другие). Там может попасться значение наподобие http://proxy[.]departmentname.companyname[.]local, позволяющее детальнее идентифицировать жертву;</p>
<p>TENCENT* — вероятно признак инфраструктуры Tencent Cloud</p>
<p>REGION и ZONE — переменные окружения, в которой может храниться местоположение облака, например eu-west-1</span></p>
<p>Этот отчет обрамляется текстом <code>--- NETWORK PIVOT AUDIT ---</code> и <code>--- AUDIT SELESAI ---</code> (индонезийский «Отчет окончен») и отправляется автору пакета.</p>
<p>———</p>
<p>Легко можно поверить, что это пентест- либо багбаунти-активность против Apple: аккуратно собирается отпечаток жертвы, без информации, которая представляла бы коммерческую ценность.</p>
<p>Однако часть дальнейших релизов имеют занятную логику (<em>скриншот 2</em>):</p>
<p>1️⃣ Попытка украсть значение одной из переменных окружения в следующем порядке: <code>NPM_TOKEN</code>, <code>NODE_AUTH_TOKEN</code>, <code>GITHUB_TOKEN</code>, <code>NPM_AUTH_TOKEN</code>. Если их нет, то попробуем взять <code>authToken</code> из файла <code>~/.npmrc</code></p>
<p>2️⃣ Надеясь, что у окружения есть доступ к внутреннему хранилищу npm-пакетов, попытка скачать пакет <code>apple-app-store-server-library</code>, пересобрать его с новой версией и опубликовать в глобальном <code>npmjs.org</code></p>
<p>Our honest reaction на второй пункт: 🤔 Ну и индонезийских комментариев стало больше.</p>
<p>———</p>
<p>По мере развития кампании злоумышленник перестал пускать в глаза пыль благих намерений и стал просто красть все интересные переменные окружения, а также забирать токены Azure IMDS.</p>
<p>В какой-то момент автор, тестируя логику публикации пакета от имени жертвы, случайно упаковал в один из своих релизов все свои скрипты, node-логи и даже <code>.bash-history</code> 🤔 (<em>скриншот 3</em>).</p>
<p>При изучении команд создается четкое ощущение, что мы столкнулись с работой агентской системы по автоматизации проведения пентестов. Лишь сильнейшие из людей могут писать команды наподобие:</p>
<pre><code>echo &#039;длинный валидный однострочный package.json c инфостилером в preinstall-логике&#039;  &gt; package.json &amp;&amp; npm publish</code></pre>
<p>В bash history также попали комментарии. Их мог оставить сам злоумышленник, копируя команды из диалога с LLM, а мог и сам агент:</p>
<blockquote><p>// Masukin ini ke dalam script preinstall lu<br />
# Nyari di mana lokasi instalasi npm lo<br />
# Biasanya hasilnya di /usr/bin/npm. Sekarang kita liat isinya:</p></blockquote>
<p>В переводе на английский:</p>
<blockquote><p>// Enter this into your preinstall script<br />
# Find your npm installation location<br />
# Usually, it&#039;s in /usr/bin/npm. Now let&#039;s look at the contents:</p></blockquote>
<p>———</p>
<p>На дворе 2026 год. Фреймворки для автопентеста уже существуют. Blue team тоже не отстает и предлагает свои решения по использованию LLM в тех же SIEM. Пройдет время, и нам, человекам, останется только с попкорном смотреть за этим противостоянием 🍿</p>
<figure class="wp-block-image"><img width="1024" height="841" src="/wp-content/uploads/2026/05/photo_560@12-05-2026_14-29-36-1024x841.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/05/photo_560@12-05-2026_14-29-36-1024x841.jpg 1024w, /wp-content/uploads/2026/05/photo_560@12-05-2026_14-29-36-300x246.jpg 300w, /wp-content/uploads/2026/05/photo_560@12-05-2026_14-29-36-768x631.jpg 768w, /wp-content/uploads/2026/05/photo_560@12-05-2026_14-29-36-1536x1261.jpg 1536w, /wp-content/uploads/2026/05/photo_560@12-05-2026_14-29-36.jpg 1566w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="841" src="/wp-content/uploads/2026/05/photo_561@12-05-2026_14-29-36-1024x841.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/05/photo_561@12-05-2026_14-29-36-1024x841.jpg 1024w, /wp-content/uploads/2026/05/photo_561@12-05-2026_14-29-36-300x246.jpg 300w, /wp-content/uploads/2026/05/photo_561@12-05-2026_14-29-36-768x631.jpg 768w, /wp-content/uploads/2026/05/photo_561@12-05-2026_14-29-36-1536x1261.jpg 1536w, /wp-content/uploads/2026/05/photo_561@12-05-2026_14-29-36.jpg 1566w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p><span class="hashtag">#npm</span> <span class="hashtag">#ti</span> <span class="hashtag">#scs</span> <br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Библиотека-логгер и инфостилер в придачу? Спасибо, не надо</title>
		<link>/a-logger-library-with-an-infostealer-thrown-in-no-thanks/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 07 Apr 2026 16:41:24 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d0%b1%d0%b8%d0%b1%d0%bb%d0%b8%d0%be%d1%82%d0%b5%d0%ba%d0%b0-%d0%bb%d0%be%d0%b3%d0%b3%d0%b5%d1%80-%d0%b8-%d0%b8%d0%bd%d1%84%d0%be%d1%81%d1%82%d0%b8%d0%bb%d0%b5%d1%80-%d0%b2-%d0%bf%d1%80%d0%b8%d0%b4/</guid>

					<description><![CDATA[Библиотека-логгер и инфостилер в придачу? Спасибо, не надо 👋 За последнее время произошло немало событий. Например, кто-то решил поиграть в меценатство и опубликовал 30 релизов с именами NPM-библиотек для логирования: • @logcore/pino-pretty-logger…]]></description>
										<content:encoded><![CDATA[<strong>Библиотека-логгер и инфостилер в придачу? Спасибо, не надо</strong> 👋<br />
<br />
За последнее время произошло немало событий. Например, кто-то решил поиграть в меценатство и опубликовал 30 релизов с именами NPM-библиотек для логирования:<br />
<br />
• <code>@logcore/pino-pretty-logger</code><br />
• <code>console-loggers
</code>• <code>jellyfi-pino-pretty-logger</code><br />
• j<code>onas-prettier-logger</code><br />
• <code>logger-beauty</code><br />
• <code>pino-logger-utils</code><br />
• <code>pino-pretty-log</code><br />
• <code>pino-pretty-logger</code><br />
• <code>pretty-pino-logger</code><br />
• <code>pretty-ts-logger</code><br />
• <code>ts-moduler</code><br />
• <code>wrapped-logger-utils</code><br />
<br />
Это не просто спам-кампания: эти библиотеки несут в себе инфостилер и бэкдор.<br />
<br />
Нам даже удалось в этот раз кому-то уступить в борьбе за звание «самая быстрая рука на диком опенсорсе» — первыми зарепортили лишь 5 из 12 пакетов 🥺<br />
<br />
Кампания использует обфускацию. Изначально злоумышленник защищал только имена переменных, но затем стал XOR-ить строки (<em>скриншоты 1, 2</em>).<br />
<br />
<strong>Вредоносная логика активируется во время импорта библиотеки:</strong><br />
<br />
1️⃣Определение ОС жертвы и сбор базовой информации о системе (IP-адрес сетевого устройства, имя пользователя).<br />
<br />
2️⃣Параллельное выполнение двух задач:<br />
<br />
🔗Быстрая кража: отправление на сервер злоумышленника файла <code>.env</code>, если он есть в текущей рабочей директории.<br />
<br />
🔗Обход домашней директории в поисках файлов с расширениями <code>.env</code> / <code>.json</code>. В коде есть небольшая оптимизация — при обходе будут пропущены следующие папки:<br />
<br />
<pre class="wp-block-code"><span><code lang="plaintext" class="hljs language-plaintext language-plaintext">'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'</code></span></pre><br />
<br />
Пользователям Linux особенно не повезет: им в <code>~/.ssh/authorized_keys</code> закинут новый публичный SSH-ключ. При работающем сервисе sshd и разрешении использовать ssh-ключ для текущего пользователя позволит злоумышленнику подключаться к устройству 😍<br />
<br />
Под Windows помимо обхода домашней директории стилер пройдется по всем подключенным дискам.<br />
<br />
3️⃣Отправка всех собранных данных на сервер злоумышленника.<br />
<br />
———<br />
<br />
В версиях пакета, где применяется более продвинутая обфускация, злоумышленник уточняет, какие конкретно файлы ему нужны:<br />
<br />
<pre class="wp-block-code"><span><code lang="javascript" class="hljs language-javascript language-javascript"><span class="hljs-keyword">const</span> ENV_LIKE_FILES = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>(&#91;
    <span class="hljs-string">'.env'</span>, <span class="hljs-string">'.env.local'</span>, <span class="hljs-string">'.env.production'</span>, <span class="hljs-string">'.env.development'</span>,
    <span class="hljs-string">'.config'</span>, <span class="hljs-string">'.npmrc'</span>, <span class="hljs-string">'.pypirc'</span>, <span class="hljs-string">'.git-credentials'</span>, <span class="hljs-string">'wallet.dat'</span>, <span class="hljs-string">'id.json'</span>, <span class="hljs-string">'key.json'</span>, <span class="hljs-string">'keystore/*.json'</span>,
]);
<span class="hljs-keyword">const</span> JSON_LIKE_FILES = <span class="hljs-keyword">new</span> <span class="hljs-built_in">Set</span>(&#91;<span class="hljs-string">'config.json'</span>, <span class="hljs-string">'settings.json'</span>, <span class="hljs-string">'secrets.json'</span>]);</code></span></pre><br />
<br />
Вероятно, это связано с большим количеством мусора при сборе всех json-файлов.<br />
<br />
Также добавилась кража директории <code>tdata</code>, содержащей данные сессии Telegram 🤢<br />
<br />
———<br />
<br />
Дежурное напоминание: не ослабляйте бдительность при работе с опенсорс-проектами 😑<br />
<br />
<span class="hashtag">#npm</span> <span class="hashtag">#ti</span> <span class="hashtag">#scs</span> <span class="hashtag">#pyanalysis</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a> (<a href="https://x.com/ptescalator" rel="noopener" target="_blank">X,</a> <a href="https://max.ru/join/V8dhsWy0FytLHcY_2m9KM99gsnBlr0v5RxOZFTOClho" rel="noopener" target="_blank">Max</a>)

<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2026/04/photo_534@07-04-2026_16-41-24-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/04/photo_534@07-04-2026_16-41-24-1024x1024.jpg 1024w, /wp-content/uploads/2026/04/photo_534@07-04-2026_16-41-24-300x300.jpg 300w, /wp-content/uploads/2026/04/photo_534@07-04-2026_16-41-24-150x150.jpg 150w, /wp-content/uploads/2026/04/photo_534@07-04-2026_16-41-24-768x768.jpg 768w, /wp-content/uploads/2026/04/photo_534@07-04-2026_16-41-24-1536x1536.jpg 1536w, /wp-content/uploads/2026/04/photo_534@07-04-2026_16-41-24-2048x2048.jpg 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Злоумышленники скомпрометировали десятки NPM-пакетов на ~2 млрд скачиваний</title>
		<link>/attackers-compromised-dozens-of-npm-packages-with-2-billion-downloads/</link>
		
		<dc:creator><![CDATA[global_author]]></dc:creator>
		<pubDate>Tue, 09 Sep 2025 18:04:03 +0000</pubDate>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[appsec]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[supplychain]]></category>
		<guid isPermaLink="false">/%d0%b7%d0%bb%d0%be%d1%83%d0%bc%d1%8b%d1%88%d0%bb%d0%b5%d0%bd%d0%bd%d0%b8%d0%ba%d0%b8-%d1%81%d0%ba%d0%be%d0%bc%d0%bf%d1%80%d0%be%d0%bc%d0%b5%d1%82%d0%b8%d1%80%d0%be%d0%b2%d0%b0%d0%bb%d0%b8-%d0%b4%d0%b5/</guid>

					<description><![CDATA[Злоумышленники скомпрометировали десятки NPM-пакетов на ~2 млрд скачиваний 🐾 Что произошло В рамках фишинговой рассылки был скомпрометирован мейнтейнер Josh &#34;Qix&#34; Junon. Ему и еще нескольким разработчикам пришло письмо с просьбой обновить второй…]]></description>
										<content:encoded><![CDATA[<p><strong>Злоумышленники скомпрометировали десятки NPM-пакетов на ~2 млрд скачиваний</strong> 🐾 </p>
<p><strong>Что произошло</strong></p>
<p>В рамках фишинговой рассылки <a href="https://news.ycombinator.com/item?id=45169794" rel="noopener" target="_blank">был скомпрометирован мейнтейнер Josh &quot;Qix&quot; Junon</a>.</p>
<p>Ему и еще нескольким разработчикам пришло письмо с просьбой обновить второй фактор, так как прошло 12+ месяцев с последнего изменения (<em>скриншоты 1, 2, 3</em>). Письмо пришло с ящика, имитирующего официальный (<code>support@npmjs.help</code>). 🐱</p>
<p>Qix является мейнтейнером больших проектов в экосистеме NPM, среди которых:</p>
<p>🟢<code>chalk</code> (882 форка и 22.7к звезд на GitHub, 313 млн. скачиваний в NPM за последнюю неделю);<br />
🟢<code>debug</code> (957 форков, 11.3к звезд, 372 млн. скачиваний);<br />
🟢<code>strip-ansi</code> (272 млн. скачиваний);<br />
🟢<code>wrap-ansi</code> (206 млн. скачиваний);<br />
🟢<code>has-flag</code> (200 млн. скачиваний).</p>
<p><strong>Проверить, что атака вас не затронула</strong></p>
<p>Вооружитесь <a href="https://github.com/google/osv-scanner" rel="noopener" target="_blank">osv-scanner</a>. Информация о вредоносных пакетах уже есть в базе <a href="http://osv.dev" rel="noopener" target="_blank">osv.dev</a>.</p>
<p>Можно воспользоваться <a href="https://gist.github.com/edgarpavlovsky/695b896445c19b6f66f141696f596059" rel="noopener" target="_blank">пользовательским скриптом</a> или проверить перечисленные там пакеты самостоятельно (<code>npm ls</code>,  <code>yarn why</code>,  <code>pnpm why</code>).</p>
<p><strong>Рекомендации для мейнтейнеров</strong></p>
<p>1. Если вам приходится логиниться по ссылкам из писем — проверяйте URL. Помните, что вы — лакомая цель для злоумышленников.</p>
<p>2. Используйте второй фактор. Даже если злоумышленник сможет его выманить фишинговой страницей авторизации, то ему придется как-то получать его вновь и вновь, если у вас 2FA стоит <a href="https://docs.npmjs.com/about-two-factor-authentication" rel="noopener" target="_blank">в режиме Authorization and writes</a> (подтверждение всех чувствительных действий, в т.ч. публикация новой версии пакета, режим включен по умолчанию).</p>
<p>3. Ознакомьтесь с практиками OIDC/&quot;trusted publishing&quot; — так вы усложните цель злоумышленнику, ведь ему придется захватить публичный CI/репозиторий для осуществления атаки.</p>
<p><strong>Рекомендации для разработчиков</strong></p>
<p>1. Фиксируйте зависимости. Не допускайте, чтобы пакетный менеджер просто тянул последний релиз используемых вами зависимостей.</p>
<p>2. Добавьте аудит зависимостей (для начала может подойти и osv-scanner) — так вы сможете узнать о проблемах на этапе сканирования зависимостей, а не из новостей.</p>
<p><strong>Рекомендации для AppSec</strong></p>
<p>Вы и без нас все знаете:</p>
<p>1. Настройте внутренний прокси с поддержкой карантина для внутренних проектов.</p>
<p>2. Убедитесь, что ваши разработчики ходят на внутреннее прокси, а не берут пакеты из глобальных репозиториев. 🐱</p>
<p><strong>Stay safe</strong> 👍</p>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2025/09/photo_372@09-09-2025_18-04-03-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2025/09/photo_372@09-09-2025_18-04-03-1024x1024.jpg 1024w, /wp-content/uploads/2025/09/photo_372@09-09-2025_18-04-03-300x300.jpg 300w, /wp-content/uploads/2025/09/photo_372@09-09-2025_18-04-03-150x150.jpg 150w, /wp-content/uploads/2025/09/photo_372@09-09-2025_18-04-03-768x767.jpg 768w, /wp-content/uploads/2025/09/photo_372@09-09-2025_18-04-03.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="1024" src="/wp-content/uploads/2025/09/photo_373@09-09-2025_18-04-03-1024x1024.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2025/09/photo_373@09-09-2025_18-04-03-1024x1024.jpg 1024w, /wp-content/uploads/2025/09/photo_373@09-09-2025_18-04-03-300x300.jpg 300w, /wp-content/uploads/2025/09/photo_373@09-09-2025_18-04-03-150x150.jpg 150w, /wp-content/uploads/2025/09/photo_373@09-09-2025_18-04-03-768x767.jpg 768w, /wp-content/uploads/2025/09/photo_373@09-09-2025_18-04-03.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<p>
<span class="hashtag">#npm</span> <span class="hashtag">#supplychain</span> <span class="hashtag">#appsec</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Через блокчейн к данным</title>
		<link>/through-blockchain-to-data/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 26 Nov 2024 16:00:15 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[npm]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d1%87%d0%b5%d1%80%d0%b5%d0%b7-%d0%b1%d0%bb%d0%be%d0%ba%d1%87%d0%b5%d0%b9%d0%bd-%d0%ba-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d0%bc/</guid>

					<description><![CDATA[Через блокчейн к данным ⭐️ Исследователи из Socket и Checkmarx рассказали об интересной вредоносной кампании в NPM. Злоумышленники мимикрировали под плагины для Puppeteer и блокчейн-клиенты. Для получения IP-адреса актуального командного сервера используется…]]></description>
										<content:encoded><![CDATA[<strong>Через блокчейн к данным</strong> ⭐️<br />
<br />
Исследователи из <a href="https://socket.dev/blog/massive-npm-malware-campaign-leverages-ethereum-smart-contracts" rel="noopener" target="_blank">Socket</a> и <a href="https://checkmarx.com/uncategorized/supply-chain-attack-using-ethereum-smart-contracts-to-distribute-multi-platform-malware/" rel="noopener" target="_blank">Checkmarx</a> рассказали об интересной вредоносной кампании в NPM. Злоумышленники мимикрировали под плагины для <a href="https://www.npmjs.com/package/puppeteer" rel="noopener" target="_blank">Puppeteer</a> и блокчейн-клиенты. Для получения IP-адреса актуального командного сервера используется смарт-контракт в блокчейне Ethereum 😦<br />
<br />
<strong>Из занятного — в коде библиотек используется несколько комментариев на русском:</strong><br />
<br />
<strong>•</strong> <code>console.error(&quot;Ошибка при получении IP адреса:&quot;, err)</code>;<br />
<strong>•</strong> <code>console.error(&quot;Ошибка при запуске файла:&quot;, _0x88fda8)</code>;<br />
<strong>•</strong> <code>console.error(&quot;Ошибка установки:&quot;, _0x14ce94)</code>;<br />
<br />
Socket предлагает быть осторожным с атрибуцией, так как это может быть следствием переиспользования кода либо сделано нарочно.<br />
<br />
В зависимости от вашей платформы будет скачан и запущен один из следующих исполняемых файлов: <code>node-win.exe</code>, <code>node-linux</code>, <code>node-macos</code>. Ниже мы будем называть их агентами.<br />
<br />
<strong>Мы изучили кампанию подробнее и обнаружили еще несколько интересных деталей.</strong><br />
<br />
1️⃣ Несмотря на то что Socket и Checkmarx приводят только один IP-адрес в качестве сетевого IoC, функция назначения нового URL в смарт-контракте вызывалась несколько раз. Всего нам известно о пяти адресах, и самым ранним из них был <code>http://localhost:3001</code> 😈, остальные представляют собой VPS-серверы.<br />
<br />
2️⃣ Агент умеет закрепляться в системе и так же, как и JS-библиотеки, скачивающие и запускающие его, получать C2 через блокчейн. Исполняемый файл представляет собой Node.js Single Executable Application, который упаковывает проект и интерпретатор JS в единый файл.<br />
<br />
3️⃣ Агент периодически опрашивает сервер на предмет команд в виде JS-кода. Первая нагрузка собирает информацию о системе жертвы: модель процессора, количество ядер, объем оперативной памяти, данные о видеокарте. Полученная информация отправляется обратно на сервер.<br />
<br />
4️⃣ Агенты получают просто true, если нет новых задач. Из интересного: корень HTTP-сервера возвращал следующую ошибку:<br />
<pre class="wp-block-code"><span><code lang="json" class="hljs language-json language-json">
{<span class="hljs-attr">"statusCode"</span>:<span class="hljs-number">404</span>,<span class="hljs-attr">"message"</span>:<span class="hljs-string">"ENOENT: no such file or directory, stat '/root/botnet-server/public/index.html'"</span>}
</code></span></pre><br />
Эта строка проливает свет на возможные цели злоумышленника ☕️<br />
<br />
<strong>IoCs:</strong><br />
<pre class="wp-block-code"><span><code lang="yaml" class="hljs language-yaml language-yaml">
<span class="hljs-string">http://194.53.54.188:3001</span>
<span class="hljs-string">http://193.233.201.21:3001</span>
<span class="hljs-string">http://45.125.67.172:1337</span>
<span class="hljs-string">http://45.125.67.172:1228</span>
<span class="hljs-number">194.53</span><span class="hljs-number">.54</span><span class="hljs-number">.188</span>
<span class="hljs-number">193.233</span><span class="hljs-number">.201</span><span class="hljs-number">.21</span>
<span class="hljs-number">45.125</span><span class="hljs-number">.67</span><span class="hljs-number">.172</span>
</code></span></pre><br />
<span class="hashtag">#ti</span> <span class="hashtag">#npm</span> <span class="hashtag">#pyanalysis</span> <span class="hashtag">#scs</span><br />
<a href="https://t.me/ptescalator" rel="noopener" target="_blank">@ptescalator</a>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
