<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Самораспространяющийся JavaScript-червь атаковал Википедию: уроки для веб-разработчиков]]></title><description><![CDATA[<p dir="auto">Недавно самораспространяющийся <strong>JavaScript-червь</strong> поразил Википедию, вандализировав тысячи страниц. Это произошло на Meta-Wiki платформы Wikimedia, где вредоносный скрипт активировался после двух лет спячки и заразил 3996 страниц, перезаписав common.js у 85 пользователей.</p>
<p dir="auto">Для веб-разработчиков этот инцидент - важный урок. Он показывает, как уязвимости в <strong>user scripts</strong> могут привести к цепной реакции. Разберем, что случилось, и как защитить свои проекты от подобных угроз.</p>
<h2>Как червь проник в систему</h2>
<p dir="auto">Червь прятался в скрипте User:Ololoshka562/test.js на русской Википедии с марта 2024 года. Его случайно запустил сотрудник Wikimedia во время проверки user script. Скрипт активировался в браузере авторизованного пользователя и начал само распространение.</p>
<p dir="auto">Сначала онил вредоносный loader в личный <strong>common.js</strong> пользователя. Затем попытался перезаписать глобальный <strong>MediaWiki:Common.js</strong>, который загружается для всех авторизованных посетителей. Если пользователь имел права на редактирование глобального скрипта, цепочка замыкалась - каждый новый посетитель запускал червя заново. Одновременно скрипт вандализировал случайные страницы через Special:Random, добавляя огромную картинку Woodpecker10.jpg и скрытый loader с <a href="http://basemetrika.ru" target="_blank" rel="noopener noreferrer">basemetrika.ru</a>.</p>
<p dir="auto">Весь процесс занял 23 минуты, но успел затронуть тысячи страниц. Wikimedia ввели read-only режим на два часа, откатили изменения и удалили ссылки на вредоносный код из историй правок.</p>
<p dir="auto">Вот этапы распространения:</p>
<ul>
<li><strong>Активация</strong>: Запуск test.js в браузере с правами.</li>
<li><strong>Локальное заражение</strong>: Инъекция в personal common.js.</li>
<li><strong>Глобальное заражение</strong>: Перезапись MediaWiki:Common.js.</li>
<li><strong>Вандализм</strong>: Добавление изображений и внешних скриптов на случайные страницы.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Этап</th>
<th>Описание</th>
<th>Последствия</th>
</tr>
</thead>
<tbody>
<tr>
<td>Активация</td>
<td>Случайный запуск старого скрипта</td>
<td>Один пользователь заражен</td>
</tr>
<tr>
<td>Локальное заражение</td>
<td>Инъекция в common.js</td>
<td>85 пользователей пострадали</td>
</tr>
<tr>
<td>Глобальное</td>
<td>Перезапись глобального JS</td>
<td>Потенциал для массового заражения</td>
</tr>
<tr>
<td>Вандализм</td>
<td>Модификация страниц</td>
<td>3996 страниц изменены</td>
</tr>
</tbody>
</table>
<h2>Уязвимости в user scripts и как они эксплуатируются</h2>
<p dir="auto"><strong>User scripts</strong> в системах вроде MediaWiki - это пользовательские JavaScript-файлы, которые расширяют функционал. Они удобны, но опасны, если не контролировать их выполнение. В случае с Википедией скрипт лежал два года незамеченным, пока не сработал.</p>
<p dir="auto">Злоумышленники любят такие векторы: они используют авторизованные сессии браузера для правок от имени пользователя. Червь не взламывал сервер - он работал в клиентской среде, эксплуатируя доверие к глобальным скриптам. Это классический <strong>client-side XSS</strong> через user-generated JS.</p>
<p dir="auto">Похожие атаки бывали раньше на wiki-проекты. Без строгой модерации user scripts становятся бомбой замедленного действия. Разработчики должны понимать, что любой загружаемый JS может мутировать и распространяться.</p>
<p dir="auto">Ключевые риски:</p>
<ul>
<li><em>Долгоживущие скрипты</em>: Могут активироваться случайно.</li>
<li><strong>Глобальные файлы</strong>: Один компромисс заражает всех.</li>
<li><em>Авторизованные сессии</em>: Браузер делает правки от имени пользователя.</li>
<li>Внешние loader’ы: Загружают код с подозрительных доменов.</li>
</ul>
<p dir="auto">Чтобы оценить угрозу, сравним с обычным XSS:</p>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Тип атаки</th>
<th>Где выполняется</th>
<th>Масштаб</th>
<th>Пример</th>
</tr>
</thead>
<tbody>
<tr>
<td>Classic XSS</td>
<td>Серверный ввод</td>
<td>Локальный</td>
<td>Форма комментариев</td>
</tr>
<tr>
<td>DOM XSS</td>
<td>Клиентский JS</td>
<td>Страница</td>
<td>URL-параметры</td>
</tr>
<tr>
<td>User script worm</td>
<td>User JS файлы</td>
<td>Глобальный</td>
<td>Википедия-червь</td>
</tr>
</tbody>
</table>
<h2>Уроки безопасности для веб-разработчиков</h2>
<p dir="auto">Этот случай учит проверять все пользовательские скрипты. Внедряйте <strong>Content Security Policy (CSP)</strong>, чтобы блокировать inline JS и внешние источники. Настройте strict-dynamic для динамических скриптов.</p>
<p dir="auto">Ограничивайте права: не все пользователи должны редактировать глобальные JS. Используйте sandbox для user scripts - выполняйте их в изолированной среде без доступа к DOM или API. Мониторьте изменения в common.js через логи и алерты.</p>
<p dir="auto">Регулярный аудит - ключ. Сканируйте репозитории на старые скрипты, как test.js. Интегрируйте инструменты вроде ESLint с правилами против self-propagating кода.</p>
<p dir="auto">Практические меры:</p>
<ul>
<li><strong>CSP</strong>: Запретите unsafe-inline и eval().</li>
<li><em>Sandbox iframes</em>: Для user content.</li>
<li>Автооткат: Системы revert на подозрительные правки.</li>
<li>Мониторинг: Логи правок в реальном времени.</li>
<li><em>Rate limiting</em>: Ограничьте правки по IP/сессии.</li>
</ul>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>Инструмент</th>
<th>Назначение</th>
<th>Преимущества</th>
</tr>
</thead>
<tbody>
<tr>
<td>CSP</td>
<td>Блокировка JS</td>
<td>Простая настройка</td>
</tr>
<tr>
<td>Subresource Integrity (SRI)</td>
<td>Хэш скриптов</td>
<td>Защита от tamper</td>
</tr>
<tr>
<td>Service Workers</td>
<td>Прокси JS</td>
<td>Контроль загрузки</td>
</tr>
<tr>
<td>OWASP ZAP</td>
<td>Сканер</td>
<td>Автообнаружение</td>
</tr>
</tbody>
</table>
<h2>Что взять на вооружение в проектах</h2>
<p dir="auto">Инцидент с Википедией напоминает: клиентский JS - слабое звено в больших платформах. Даже гиганты вроде Wikimedia уязвимы, если user content не под контролем. Стоит пересмотреть подходы к кастомным скриптам.</p>
<p dir="auto">Остается открытым вопрос: как детектировать dormant угрозы заранее? Инструменты эволюционируют, но человеческий фактор остается. Подумайте, есть ли в вашем коде ‘спящие’ скрипты, ждущие активации.</p>
]]></description><link>https://forum.exlends.ru/topic/1453/samorasprostranyayushijsya-javascript-cherv-atakoval-vikipediyu-uroki-dlya-veb-razrabotchikov</link><generator>RSS for Node</generator><lastBuildDate>Sat, 17 Oct 2026 03:07:54 GMT</lastBuildDate><atom:link href="https://forum.exlends.ru/topic/1453.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 09 Mar 2026 07:55:27 GMT</pubDate><ttl>60</ttl></channel></rss>